From a31f80739fd8739f8cd33a3b326b4024019818dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20de=20la=20Pe=C3=B1a?= Date: Mon, 7 Feb 2022 20:11:05 +0100 Subject: [PATCH] fix: update stack deployment to follow Users&Roles best practices (#2064) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * bump stack version 8.1.0-aa69d697 * fix: use new kibana roles and users We are going to use 'admin' everywhere * feat: add a method for checking ES cluster health * fix: create fleet-server after getting a service token from elasticsearch * fix: start stack using Fleet's test suite code Instead of calling the compose, we are calling the bootstrapping code for the Fleet test suite but without any valid tag. Because we are setting DEVELOPER_MODE=true for the stack node, it will keep the stack even though the scenarios and tags finished. We also pass a non-existing gherkin tag, to avoid running any scenario but the bootstrap code, only. * fix: typo * fix: selective execution of the .env for fleet suite * chore: try 'not in' * chore: use AND conditionals as a list * fix: check for stckRunner to be defined * fix: pass stackRunner var to the stack creation * fix: check for suite is defined first * fix: check for suite var * chore: use multiline for when condirtionals * fix docker install Signed-off-by: Adam Stokes <51892+adam-stokes@users.noreply.github.com> * fix suite definition for autodiscover Signed-off-by: Adam Stokes <51892+adam-stokes@users.noreply.github.com> * add kubectl to path Signed-off-by: Adam Stokes <51892+adam-stokes@users.noreply.github.com> * chore: bump elastic-agent versions to 8.1.hashed snapshot * fix: use docker provider for APM integration It will run on Debian AMD/ARM and SLES15 * chore: add client alive SSH settings * Revert "chore: add client alive SSH settings" This reverts commit 306551cfd3d9900076fd10374289b869acd87a34. * chore: define SSHD server settings for runners * chore: skip ubi8 scenarios We need to adapt them to the dnew deployment model. See #2088 * fix: transform response from bytes to string * fix: properly read Input Streams and Vars * fix: expose port for 0.0.0.0 * fix: streams could go empty * fix: expose port for 0.0.0.0 * fix: support checking for process count in containers * chore: unskip apm-server on ubi8 * chore: always install docker on runners * chore: bump elastic-package to v0.36.0 * chore: use elastic-package for apm-server scenarios * chore: use elastic-package for apm-server scenarios * Revert "chore: use elastic-package for apm-server scenarios" This reverts commit b5896a84471383f4f3cf90c289e704660f70d6c7. * Revert "chore: use elastic-package for apm-server scenarios" This reverts commit c6c29acb23aadd35933e524cdaa3bd7d7599e5f7. * chore: run dockerised tests only on debian * chore: do not print out tar extract command * fix: keep a Docker deployer for docker-based tests * fix: install docker for ARM * fix: remove invalid role vars for ARM * fix: install python-pip on ARM first * fix: install docker on ARM properly See https://www.docker.com/blog/getting-started-with-docker-for-arm-on-linux/ * fix: install docker on Suse * fix: typo Co-authored-by: Noémi Ványi * Fix error checking for revoked enroll token Signed-off-by: Adam Stokes <51892+adam-stokes@users.noreply.github.com> * fix logging Signed-off-by: Adam Stokes <51892+adam-stokes@users.noreply.github.com> * chore: use empty streams if error * fix: pass fleet-server policy to fleet-server on bootstrap * fix: retrieve default fleet-server policy instead of creating a new one * chore: restart services with restart command Instead of calling stop & start right after it, we are leveraging services ability to be restarted. For linux, systemctl will use "restart", for MacOS it will use "stop and start", for Windows, it's not supported yet * chore: increase expire timeout of the service token to the max (1h) Co-authored-by: apmmachine Co-authored-by: Adam Stokes <51892+adam-stokes@users.noreply.github.com> Co-authored-by: Noémi Ványi --- .ci/.e2e-tests-for-elastic-agent.yaml | 2 +- .ci/.e2e-tests.yaml | 2 +- .ci/Jenkinsfile | 2 +- .ci/ansible/files/sshd_config | 2 + .ci/ansible/playbook.yml | 29 ++- .ci/ansible/requirements.yml | 2 + .ci/ansible/tasks/install_deps.yml | 16 ++ .ci/ansible/tasks/runners.yml | 2 +- .ci/ansible/tasks/setup_test_script.yml | 30 ++- .../profiles/fleet/default/kibana.config.yml | 2 +- .../compose/profiles/fleet/docker-compose.yml | 28 +-- .../profiles/fleet/elasticsearch-roles.yml | 34 +++ .../profiles/fleet/elasticsearch-users | 9 + .../profiles/fleet/elasticsearch-users_roles | 13 ++ .../preconfigured-policies/kibana.config.yml | 2 +- .../services/elastic-agent/docker-compose.yml | 6 +- .../fleet-server/docker-compose.yml | 27 +++ .../fleet/features/apm_integration.feature | 1 - .../fleet/features/stand_alone_agent.feature | 30 +-- e2e/_suites/fleet/fleet.go | 180 ++++++++++----- e2e/_suites/fleet/ingest_manager_test.go | 5 +- e2e/_suites/fleet/stand-alone.go | 22 +- e2e/_suites/fleet/world.go | 17 +- go.mod | 8 +- go.sum | 208 ++++++++++++------ internal/action/process.go | 192 ++++++++++++++++ internal/deploy/base.go | 15 +- internal/deploy/base_test.go | 14 ++ internal/elasticsearch/client.go | 164 +++++++++++++- internal/installer/base.go | 17 ++ internal/installer/elasticagent_deb.go | 15 ++ internal/installer/elasticagent_docker.go | 16 ++ internal/installer/elasticagent_rpm.go | 15 ++ internal/installer/elasticagent_tar.go | 18 +- internal/installer/elasticagent_tar_macos.go | 11 +- internal/installer/elasticagent_zip.go | 5 + internal/kibana/client.go | 2 +- internal/kibana/fleet.go | 2 +- internal/kibana/integrations.go | 2 +- internal/kibana/policies.go | 20 +- 40 files changed, 963 insertions(+), 224 deletions(-) create mode 100644 .ci/ansible/files/sshd_config create mode 100644 cli/config/compose/profiles/fleet/elasticsearch-roles.yml create mode 100644 cli/config/compose/profiles/fleet/elasticsearch-users create mode 100644 cli/config/compose/profiles/fleet/elasticsearch-users_roles create mode 100644 cli/config/compose/services/elastic-agent/fleet-server/docker-compose.yml diff --git a/.ci/.e2e-tests-for-elastic-agent.yaml b/.ci/.e2e-tests-for-elastic-agent.yaml index 16ab01b0c6..d2f81145a6 100644 --- a/.ci/.e2e-tests-for-elastic-agent.yaml +++ b/.ci/.e2e-tests-for-elastic-agent.yaml @@ -40,7 +40,7 @@ SUITES: platforms: ["debian_arm64", "debian_amd64", "sles15"] - name: "APM Integration" tags: "apm_server" - platforms: ["fleet_elastic_pkg"] + platforms: ["debian_amd64"] - name: "Linux Integration" tags: "linux_integration" platforms: ["debian_arm64", "debian_amd64", "sles15"] diff --git a/.ci/.e2e-tests.yaml b/.ci/.e2e-tests.yaml index 443ef14000..284104ec17 100644 --- a/.ci/.e2e-tests.yaml +++ b/.ci/.e2e-tests.yaml @@ -51,7 +51,7 @@ SUITES: platforms: ["debian_arm64", "debian_amd64", "sles15"] - name: "APM Integration" tags: "apm_server" - platforms: ["fleet_elastic_pkg"] + platforms: ["debian_amd64"] - name: "Linux Integration" tags: "linux_integration" platforms: ["debian_arm64", "debian_amd64", "sles15"] diff --git a/.ci/Jenkinsfile b/.ci/Jenkinsfile index e05cbaa661..5c2ef9e872 100644 --- a/.ci/Jenkinsfile +++ b/.ci/Jenkinsfile @@ -215,7 +215,7 @@ pipeline { ansible( stackWorkspace, env.RUN_ID.split('-')[0], - "-i \"${stackRunner.ip},\" -t setup-stack --extra-vars=\"${LABELS_STRING} nodeLabel=stack nodeUser=${stackMachine.username} nodeImage=${stackMachine.image} nodeInstanceType=${stackMachine.instance_type}\"" + "-i \"${stackRunner.ip},\" -t setup-stack --extra-vars=\"${LABELS_STRING} stackRunner=${stackRunner.ip} nodeLabel=stack nodeUser=${stackMachine.username} nodeImage=${stackMachine.image} nodeInstanceType=${stackMachine.instance_type}\"" ) } diff --git a/.ci/ansible/files/sshd_config b/.ci/ansible/files/sshd_config new file mode 100644 index 0000000000..d92462db64 --- /dev/null +++ b/.ci/ansible/files/sshd_config @@ -0,0 +1,2 @@ +ClientAliveInterval 60 +ClientAliveCountMax 10 diff --git a/.ci/ansible/playbook.yml b/.ci/ansible/playbook.yml index 68ba581512..c6a7c83cff 100644 --- a/.ci/ansible/playbook.yml +++ b/.ci/ansible/playbook.yml @@ -65,6 +65,11 @@ tags: - setup-stack + - name: Configure test script + include_tasks: tasks/setup_test_script.yml + tags: + - setup-stack + - name: Add SSH keys to stack include_tasks: tasks/install_ssh_keys.yml tags: @@ -72,19 +77,20 @@ - name: Configure stack files ansible.builtin.replace: - path: "/home/{{ ansible_user }}/e2e-testing/cli/config/compose/profiles/fleet/default/kibana.config.yml" + path: '{{ item.path }}' regexp: '{{ item.old }}' replace: '{{ item.new }}' loop: - - { old: 'http://elasticsearch', new: 'http://{{ inventory_hostname }}' } - - { old: 'http://fleet-server', new: 'http://{{ inventory_hostname }}' } - - { old: 'http://package-registry:8080', new: 'https://epr-staging.elastic.co' } + - { old: 'http://elasticsearch', new: 'http://{{ inventory_hostname }}', path: "/home/{{ ansible_user }}/e2e-testing/cli/config/compose/profiles/fleet/default/kibana.config.yml" } + - { old: 'http://fleet-server', new: 'http://{{ inventory_hostname }}', path: "/home/{{ ansible_user }}/e2e-testing/cli/config/compose/profiles/fleet/default/kibana.config.yml" } + - { old: 'http://kibana', new: 'http://{{ inventory_hostname }}', path: "/home/{{ ansible_user }}/e2e-testing/cli/config/compose/services/elastic-agent/fleet-server/docker-compose.yml" } + - { old: 'http://package-registry:8080', new: 'https://epr-staging.elastic.co', path: "/home/{{ ansible_user }}/e2e-testing/cli/config/compose/profiles/fleet/default/kibana.config.yml" } tags: - setup-stack - - name: Start stack + - name: Start stack without any tag to spin up the stack using Fleet's bootstrapping code become: true - shell: docker-compose -f /home/{{ansible_user}}/e2e-testing/cli/config/compose/profiles/fleet/docker-compose.yml up -d + shell: "/home/{{ ansible_user }}/e2e-testing/.ci/scripts/functional-test.sh 'non-existing-tag'" tags: - setup-stack @@ -102,19 +108,22 @@ - role: geerlingguy.docker docker_daemon_options: default-ulimit: ["nofile=1024000:1024000"] - when: "'kubernetes-autodiscover' in suite or 'helm' in suite or 'fleet_amd64' in nodeLabel or 'fleet_elastic_pkg' in nodeLabel" + when: + - '"arm64" not in nodeLabel' + - 'ansible_os_family not in ["Suse"]' - role: andrewrothstein.kubectl - when: "'kubernetes-autodiscover' in suite or 'helm' in suite" + when: suite in ["kubernetes-autodiscover", "helm"] - role: andrewrothstein.kind - when: "'kubernetes-autodiscover' in suite or 'helm' in suite" + when: suite in ["kubernetes-autodiscover", "helm"] - role: geerlingguy.helm - when: "'kubernetes-autodiscover' in suite or 'helm' in suite" + when: suite in ["kubernetes-autodiscover", "helm"] - role: gantsign.golang vars: golang_version: 1.17 vars: ansible_python_interpreter: "auto" ansible_user: "{{nodeUser}}" + pip_package: "python3-pip" tasks: - name: Install deps include_tasks: tasks/install_deps.yml diff --git a/.ci/ansible/requirements.yml b/.ci/ansible/requirements.yml index 2d937fe000..712b5888ac 100644 --- a/.ci/ansible/requirements.yml +++ b/.ci/ansible/requirements.yml @@ -1,4 +1,6 @@ +- src: geerlingguy.pip - src: geerlingguy.docker +- src: geerlingguy.docker_arm - src: geerlingguy.helm - src: andrewrothstein.kubectl - src: andrewrothstein.kind diff --git a/.ci/ansible/tasks/install_deps.yml b/.ci/ansible/tasks/install_deps.yml index 248696398d..cf70235161 100644 --- a/.ci/ansible/tasks/install_deps.yml +++ b/.ci/ansible/tasks/install_deps.yml @@ -18,6 +18,7 @@ name: - autoconf - bison + - docker - flex - gcc - gcc-c++ @@ -51,3 +52,18 @@ - name: Install ssh-import-id python package to copy public SSH keys from Github accounts pip: name: ssh-import-id + +- name: Set sshd configuration for client alive settings + ansible.builtin.copy: + src: sshd_config + dest: /etc/ssh/sshd_config + owner: "{{ ansible_user }}" + group: "{{ ansible_user }}" + mode: '0600' + when: ansible_distribution in ["CentOS", "Debian", "Fedora", "RedHat", "Ubuntu"] + +- name: Install Docker for ARM (Debian, Ubuntu) + ansible.builtin.shell: curl -fsSL test.docker.com -o get-docker.sh && sh get-docker.sh + when: + - ansible_distribution in ["Debian", "Ubuntu"] + - '"arm64" in nodeLabel' diff --git a/.ci/ansible/tasks/runners.yml b/.ci/ansible/tasks/runners.yml index d244e6bd57..70437ed58e 100644 --- a/.ci/ansible/tasks/runners.yml +++ b/.ci/ansible/tasks/runners.yml @@ -52,7 +52,7 @@ - start-node - name: Wait for SSH to come up - wait_for: host={{ nodeItem.public_ip }} port=22 delay=10 timeout=60 + wait_for: host={{ nodeItem.public_ip }} port=22 delay=10 loop: "{{ ec2.instances }}" loop_control: loop_var: nodeItem diff --git a/.ci/ansible/tasks/setup_test_script.yml b/.ci/ansible/tasks/setup_test_script.yml index 68dc8497e5..8814352056 100644 --- a/.ci/ansible/tasks/setup_test_script.yml +++ b/.ci/ansible/tasks/setup_test_script.yml @@ -1,4 +1,18 @@ --- +- name: Extend environment for Stack Bootstrapping + lineinfile: + state: present + line: "{{ item }}" + insertafter: EOF + dest: "/home/{{ ansible_user }}/e2e-testing/.env" + create: yes + with_items: + - "export SUITE=fleet" + - "export PROVIDER=docker" + - "export DEVELOPER_MODE=true" + - "export SKIP_PULL=1" + when: "'stack' == nodeLabel" + - name: Extend environment for Fleet testing lineinfile: state: present @@ -15,8 +29,10 @@ - "export KIBANA_URL=http://{{stackRunner}}:5601" - "export FLEET_URL=http://{{stackRunner}}:8220" - "export SKIP_PULL=1" - - when: "'fleet' == suite" + when: + - suite is defined + - stackRunner is defined + - suite == "fleet" - name: Extend environment for Fleet with elastic-package testing lineinfile: @@ -41,7 +57,9 @@ with_items: - "export SUITE={{ lookup('env', 'SUITE') or 'kubernetes-autodiscover' }}" - "export PROVIDER={{ lookup('env', 'PROVIDER') or 'docker' }}" - when: "'kubernetes-autodiscover' == suite" + when: + - suite is defined + - suite == "kubernetes-autodiscover" - name: Extend environment for Helm testing lineinfile: @@ -53,7 +71,9 @@ with_items: - "export SUITE={{ lookup('env', 'SUITE') or 'helm' }}" - "export PROVIDER={{ lookup('env', 'PROVIDER') or 'docker' }}" - when: "'helm' == suite" + when: + - suite is defined + - suite == "helm" - name: Extend environment lineinfile: @@ -66,7 +86,7 @@ - "export STACK_VERSION={{ lookup('file', '{{workspace}}/.stack-version') or '8.0.0-SNAPSHOT' }}" - "export BEAT_VERSION={{ lookup('file', '{{workspace}}/.stack-version') or '8.0.0-SNAPSHOT' }}" - "export ELASTIC_APM_GLOBAL_LABELS={{ lookup('env', 'ELASTIC_APM_GLOBAL_LABELS') }}" - - "export PATH=$PATH:/opt/go/{{golang_version}}/bin" + - "export PATH=$PATH:/opt/go/{{golang_version}}/bin:/usr/local/bin" - name: Create Fleet test script file become: no diff --git a/cli/config/compose/profiles/fleet/default/kibana.config.yml b/cli/config/compose/profiles/fleet/default/kibana.config.yml index 64840917d2..b5ffcd9e6d 100644 --- a/cli/config/compose/profiles/fleet/default/kibana.config.yml +++ b/cli/config/compose/profiles/fleet/default/kibana.config.yml @@ -5,7 +5,7 @@ server.host: "0.0.0.0" telemetry.enabled: false elasticsearch.hosts: [ "http://elasticsearch:9200" ] -elasticsearch.username: elastic +elasticsearch.username: admin elasticsearch.password: changeme xpack.monitoring.ui.container.elasticsearch.enabled: true diff --git a/cli/config/compose/profiles/fleet/docker-compose.yml b/cli/config/compose/profiles/fleet/docker-compose.yml index 8f21f77f88..ef5e337f3f 100644 --- a/cli/config/compose/profiles/fleet/docker-compose.yml +++ b/cli/config/compose/profiles/fleet/docker-compose.yml @@ -14,12 +14,18 @@ services: - xpack.license.self_generated.type=trial - xpack.security.enabled=true - xpack.security.authc.api_key.enabled=true - - ELASTIC_USERNAME=elastic + - xpack.security.authc.token.enabled=true + - xpack.security.authc.token.timeout=60m + - ELASTIC_USERNAME=admin - ELASTIC_PASSWORD=changeme image: "docker.elastic.co/elasticsearch/elasticsearch:${stackVersion:-8.1.0-aa69d697-SNAPSHOT}" platform: ${stackPlatform:-linux/amd64} ports: - "9200:9200" + volumes: + - ./elasticsearch-roles.yml:/usr/share/elasticsearch/config/roles.yml + - ./elasticsearch-users:/usr/share/elasticsearch/config/users + - ./elasticsearch-users_roles:/usr/share/elasticsearch/config/users_roles kibana: depends_on: elasticsearch: @@ -34,23 +40,3 @@ services: - "5601:5601" volumes: - ./${kibanaProfile:-default}/kibana.config.yml:/usr/share/kibana/config/kibana.yml - fleet-server: - image: "docker.elastic.co/beats/elastic-agent-complete:${stackVersion:-8.1.0-aa69d697-SNAPSHOT}" - depends_on: - elasticsearch: - condition: service_healthy - kibana: - condition: service_healthy - ports: - - "8220:8220" - healthcheck: - test: "curl -f http://127.0.0.1:8220/api/status | grep HEALTHY 2>&1 >/dev/null" - retries: 12 - interval: 5s - environment: - - "FLEET_SERVER_ENABLE=1" - - "FLEET_SERVER_INSECURE_HTTP=1" - - "KIBANA_FLEET_SETUP=1" - - "KIBANA_FLEET_HOST=http://kibana:5601" - - "FLEET_SERVER_HOST=0.0.0.0" - - "FLEET_SERVER_PORT=8220" diff --git a/cli/config/compose/profiles/fleet/elasticsearch-roles.yml b/cli/config/compose/profiles/fleet/elasticsearch-roles.yml new file mode 100644 index 0000000000..91277fa8dd --- /dev/null +++ b/cli/config/compose/profiles/fleet/elasticsearch-roles.yml @@ -0,0 +1,34 @@ +--- +apm_server: + cluster: ['manage_ilm', 'manage_security', 'manage_api_key'] + indices: + - names: ['apm-*', 'logs-apm*', 'metrics-apm*', 'traces-apm*'] + privileges: ['write', 'create_index', 'manage', 'manage_ilm'] + applications: + - application: 'apm' + privileges: ['sourcemap:write', 'event:write', 'config_agent:read'] + resources: '*' +beats: + cluster: ['manage_index_templates', 'monitor', 'manage_ingest_pipelines', 'manage_ilm', 'manage_security', 'manage_api_key'] + indices: + - names: ['filebeat-*', 'shrink-filebeat-*'] + privileges: ['all'] +filebeat: + cluster: ['manage_index_templates', 'monitor', 'manage_ingest_pipelines', 'manage_ilm'] + indices: + - names: ['filebeat-*', 'shrink-filebeat-*'] + privileges: ['all'] +heartbeat: + cluster: ['manage_index_templates', 'monitor', 'manage_ingest_pipelines', 'manage_ilm'] + indices: + - names: ['heartbeat-*', 'shrink-heartbeat-*'] + privileges: ['all'] +metricbeat: + cluster: ['manage_index_templates', 'monitor', 'manage_ingest_pipelines', 'manage_ilm'] + indices: + - names: ['metricbeat-*', 'shrink-metricbeat-*'] + privileges: ['all'] +opbeans: + indices: + - names: ['opbeans-*'] + privileges: ['write', 'read'] diff --git a/cli/config/compose/profiles/fleet/elasticsearch-users b/cli/config/compose/profiles/fleet/elasticsearch-users new file mode 100644 index 0000000000..4cc30a99d9 --- /dev/null +++ b/cli/config/compose/profiles/fleet/elasticsearch-users @@ -0,0 +1,9 @@ +admin:$2a$10$xiY0ZzOKmDDN1p3if4t4muUBwh2.bFHADoMRAWQgSClm4ZJ4132Y. +apm_server_user:$2a$10$iTy29qZaCSVn4FXlIjertuO8YfYVLCbvoUAJ3idaXfLRclg9GXdGG +apm_user_ro:$2a$10$hQfy2o2u33SapUClsx8NCuRMpQyHP9b2l4t3QqrBA.5xXN2S.nT4u +beats_user:$2a$10$LRpKi4/Q3Qo4oIbiu26rH.FNIL4aOH4aj2Kwi58FkMo1z9FgJONn2 +filebeat_user:$2a$10$sFxIEX8tKyOYgsbJLbUhTup76ssvSD3L4T0H6Raaxg4ewuNr.lUFC +heartbeat_user:$2a$10$nKUGDr/V5ClfliglJhfy8.oEkjrDtklGQfhd9r9NoFqQeoNxr7uUK +kibana_system_user:$2a$10$nN6sRtQl2KX9Gn8kV/.NpOLSk6Jwn8TehEDnZ7aaAgzyl/dy5PYzW +metricbeat_user:$2a$10$5PyTd121U2ZXnFk9NyqxPuLxdptKbB8nK5egt6M5/4xrKUkk.GReG +opbeans_user:$2a$10$iTy29qZaCSVn4FXlIjertuO8YfYVLCbvoUAJ3idaXfLRclg9GXdGG diff --git a/cli/config/compose/profiles/fleet/elasticsearch-users_roles b/cli/config/compose/profiles/fleet/elasticsearch-users_roles new file mode 100644 index 0000000000..c1939933f0 --- /dev/null +++ b/cli/config/compose/profiles/fleet/elasticsearch-users_roles @@ -0,0 +1,13 @@ +apm_server:apm_server_user +apm_system:apm_server_user +apm_user:apm_server_user,apm_user_ro +beats:beats_user +beats_system:beats_user,filebeat_user,heartbeat_user,metricbeat_user +filebeat:filebeat_user +heartbeat:heartbeat_user +ingest_admin:apm_server_user +kibana_system:admin,kibana_system_user +kibana_user:apm_server_user,apm_user_ro,beats_user,filebeat_user,heartbeat_user,metricbeat_user,opbeans_user +metricbeat:metricbeat_user +opbeans:opbeans_user +superuser:admin diff --git a/cli/config/compose/profiles/fleet/preconfigured-policies/kibana.config.yml b/cli/config/compose/profiles/fleet/preconfigured-policies/kibana.config.yml index dd2ff396c8..ac9e571481 100644 --- a/cli/config/compose/profiles/fleet/preconfigured-policies/kibana.config.yml +++ b/cli/config/compose/profiles/fleet/preconfigured-policies/kibana.config.yml @@ -5,7 +5,7 @@ server.host: "0.0.0.0" telemetry.enabled: false elasticsearch.hosts: [ "http://elasticsearch:9200" ] -elasticsearch.username: elastic +elasticsearch.username: admin elasticsearch.password: changeme xpack.monitoring.ui.container.elasticsearch.enabled: true diff --git a/cli/config/compose/services/elastic-agent/docker-compose.yml b/cli/config/compose/services/elastic-agent/docker-compose.yml index c886b0ca69..a11851d9c2 100644 --- a/cli/config/compose/services/elastic-agent/docker-compose.yml +++ b/cli/config/compose/services/elastic-agent/docker-compose.yml @@ -1,13 +1,15 @@ version: '2.4' services: elastic-agent: - image: "docker.elastic.co/${elasticAgentDockerNamespace:-beats}/elastic-agent${elasticAgentDockerImageSuffix}:${elasticAgentTag:-8.0.0-SNAPSHOT}" + image: "docker.elastic.co/${elasticAgentDockerNamespace:-beats}/elastic-agent${elasticAgentDockerImageSuffix}:${elasticAgentTag:-8.1.0-aa69d697-SNAPSHOT}" depends_on: elasticsearch: condition: service_healthy kibana: condition: service_healthy environment: + - "ELASTICSEARCH_USERNAME=admin" + - "ELASTICSEARCH_PASSWORD=changeme" - "FLEET_SERVER_ENABLE=${fleetServerMode:-0}" - "FLEET_SERVER_INSECURE_HTTP=${fleetServerMode:-0}" - "FLEET_ENROLL=${fleetEnroll:-1}" @@ -16,4 +18,4 @@ services: - "FLEET_URL=${fleetUrl:-}" platform: ${stackPlatform:-linux/amd64} ports: - - "127.0.0.1:${fleetServerPort:-8220}:8220" + - "${fleetServerPort:-8220}:8220" diff --git a/cli/config/compose/services/elastic-agent/fleet-server/docker-compose.yml b/cli/config/compose/services/elastic-agent/fleet-server/docker-compose.yml new file mode 100644 index 0000000000..5b422a7059 --- /dev/null +++ b/cli/config/compose/services/elastic-agent/fleet-server/docker-compose.yml @@ -0,0 +1,27 @@ +version: '2.4' +services: + fleet-server: + image: "docker.elastic.co/${elasticAgentDockerNamespace:-beats}/elastic-agent${elasticAgentDockerImageSuffix}:${elasticAgentTag:-8.1.0-aa69d697-SNAPSHOT}" + depends_on: + elasticsearch: + condition: service_healthy + kibana: + condition: service_healthy + environment: + - "ELASTICSEARCH_USERNAME=admin" + - "ELASTICSEARCH_PASSWORD=changeme" + - "FLEET_SERVER_ENABLE=${fleetServerMode:-0}" + - "FLEET_SERVER_HOST=0.0.0.0" + - "FLEET_SERVER_INSECURE_HTTP=${fleetServerMode:-0}" + - "FLEET_SERVER_PORT=${fleetServerPort:-8220}" + - "FLEET_SERVER_SERVICE_TOKEN=${fleetServerServiceToken:-}" + - "FLEET_SERVER_POLICY_ID=${fleetServerPolicyId:-}" + - "FLEET_ENROLL=${fleetEnroll:-1}" + - "FLEET_ENROLLMENT_TOKEN=${fleetEnrollmentToken:-}" + - "FLEET_INSECURE=${fleetInsecure:-0}" + - "FLEET_URL=${fleetUrl:-}" + - "KIBANA_FLEET_HOST=http://kibana:5601" + - "KIBANA_FLEET_SETUP=${fleetServerMode:-0}" + platform: ${stackPlatform:-linux/amd64} + ports: + - "${fleetServerPort:-8220}:8220" diff --git a/e2e/_suites/fleet/features/apm_integration.feature b/e2e/_suites/fleet/features/apm_integration.feature index 309a80b85c..113305560f 100644 --- a/e2e/_suites/fleet/features/apm_integration.feature +++ b/e2e/_suites/fleet/features/apm_integration.feature @@ -15,7 +15,6 @@ Examples: default | default | @ubi8 -@skip:arm64 Examples: Ubi8 | image | | ubi8 | diff --git a/e2e/_suites/fleet/features/stand_alone_agent.feature b/e2e/_suites/fleet/features/stand_alone_agent.feature index 485f745cb5..311d35791d 100644 --- a/e2e/_suites/fleet/features/stand_alone_agent.feature +++ b/e2e/_suites/fleet/features/stand_alone_agent.feature @@ -16,7 +16,7 @@ Examples: default | default | @ubi8 -@skip:arm64 +@skip Examples: Ubi8 | image | | ubi8 | @@ -32,7 +32,7 @@ Examples: default | default | @ubi8 -@skip:arm64 +@skip Examples: Ubi8 | image | | ubi8 | @@ -49,7 +49,7 @@ Examples: default | default | @ubi8 -@skip:arm64 +@skip Examples: Ubi8 | image | | ubi8 | @@ -66,7 +66,7 @@ Examples: default | default | @ubi8 -@skip:arm64 +@skip Examples: Ubi8 | image | | ubi8 | @@ -79,7 +79,7 @@ Scenario Outline: Adding the process_summary System Integration to an stand-alon Then "system/metrics" with "process.summary" metrics are present in the datastreams @ubi8 -@skip:arm64 +@skip Examples: Ubi8 | image | | ubi8 | @@ -97,7 +97,7 @@ Scenario Outline: Adding the core System Integration to an stand-alone-agent Then "system/metrics" with "core" metrics are present in the datastreams @ubi8 -@skip:arm64 +@skip Examples: Ubi8 | image | | ubi8 | @@ -115,7 +115,7 @@ Scenario Outline: Adding the cpu System Integration to an stand-alone-agent Then "system/metrics" with "cpu" metrics are present in the datastreams @ubi8 -@skip:arm64 +@skip Examples: Ubi8 | image | | ubi8 | @@ -133,7 +133,7 @@ Scenario Outline: Adding the diskio System Integration to an stand-alone-agent Then "system/metrics" with "diskio" metrics are present in the datastreams @ubi8 -@skip:arm64 +@skip Examples: Ubi8 | image | | ubi8 | @@ -151,7 +151,7 @@ Scenario Outline: Adding the fsstat System Integration to an stand-alone-agent Then "system/metrics" with "fsstat" metrics are present in the datastreams @ubi8 -@skip:arm64 +@skip Examples: Ubi8 | image | | ubi8 | @@ -169,7 +169,7 @@ Scenario Outline: Adding the load System Integration to an stand-alone-agent Then "system/metrics" with "load" metrics are present in the datastreams @ubi8 -@skip:arm64 +@skip Examples: Ubi8 | image | | ubi8 | @@ -187,7 +187,7 @@ Scenario Outline: SAdding the memory System Integration to an stand-alone-agent Then "system/metrics" with "memory" metrics are present in the datastreams @ubi8 -@skip:arm64 +@skip Examples: Ubi8 | image | | ubi8 | @@ -205,7 +205,7 @@ Scenario Outline: Adding the network System Integration to an stand-alone-agent Then "system/metrics" with "network" metrics are present in the datastreams @ubi8 -@skip:arm64 +@skip Examples: Ubi8 | image | | ubi8 | @@ -223,7 +223,7 @@ Scenario Outline: Adding the process System Integration to an stand-alone-agent Then "system/metrics" with "process" metrics are present in the datastreams @ubi8 -@skip:arm64 +@skip Examples: Ubi8 | image | | ubi8 | @@ -241,7 +241,7 @@ Scenario Outline: Adding the socket_summary System Integration to an stand-alone Then "system/metrics" with "socket_summary" metrics are present in the datastreams @ubi8 -@skip:arm64 +@skip Examples: Ubi8 | image | | ubi8 | @@ -259,7 +259,7 @@ Scenario Outline: Adding the uptime System Integration to an stand-alone-agent Then "system/metrics" with "uptime" metrics are present in the datastreams @ubi8 -@skip:arm64 +@skip Examples: Ubi8 | image | | ubi8 | diff --git a/e2e/_suites/fleet/fleet.go b/e2e/_suites/fleet/fleet.go index fca9acbae7..dbdc83448b 100644 --- a/e2e/_suites/fleet/fleet.go +++ b/e2e/_suites/fleet/fleet.go @@ -6,6 +6,7 @@ package main import ( "context" + "encoding/json" "fmt" "io/ioutil" "os" @@ -55,7 +56,8 @@ type FleetTestSuite struct { Version string // current elastic-agent version kibanaClient *kibana.Client deployer deploy.Deployment - BeatsProcess string // (optional) name of the Beats that must be present before installing the elastic-agent + dockerDeployer deploy.Deployment // used for docker related deployents, such as the stand-alone containers + BeatsProcess string // (optional) name of the Beats that must be present before installing the elastic-agent // date controls for queries AgentStoppedDate time.Time RuntimeDependenciesStartDate time.Time @@ -64,6 +66,13 @@ type FleetTestSuite struct { DefaultAPIKey string } +func (fts *FleetTestSuite) getDeployer() deploy.Deployment { + if fts.StandAlone { + return fts.dockerDeployer + } + return fts.deployer +} + // afterScenario destroys the state created by a scenario func (fts *FleetTestSuite) afterScenario() { defer func() { @@ -85,7 +94,7 @@ func (fts *FleetTestSuite) afterScenario() { if !fts.StandAlone { // for the centos/debian flavour we need to retrieve the internal log files for the elastic-agent, as they are not // exposed as container logs. For that reason we need to go through the installer abstraction - agentInstaller, _ := installer.Attach(fts.currentContext, fts.deployer, agentService, fts.InstallerType) + agentInstaller, _ := installer.Attach(fts.currentContext, fts.getDeployer(), agentService, fts.InstallerType) if log.IsLevelEnabled(log.DebugLevel) { err := agentInstaller.Logs(fts.currentContext) @@ -102,12 +111,12 @@ func (fts *FleetTestSuite) afterScenario() { } } else if log.IsLevelEnabled(log.DebugLevel) { // for the Docker image, we simply retrieve container logs - _ = fts.deployer.Logs(fts.currentContext, agentService) + _ = fts.getDeployer().Logs(fts.currentContext, agentService) } err := fts.unenrollHostname() if err != nil { - manifest, _ := fts.deployer.Inspect(fts.currentContext, agentService) + manifest, _ := fts.getDeployer().Inspect(fts.currentContext, agentService) log.WithFields(log.Fields{ "err": err, "hostname": manifest.Hostname, @@ -116,7 +125,7 @@ func (fts *FleetTestSuite) afterScenario() { } env := fts.getProfileEnv() - _ = fts.deployer.Remove(fts.currentContext, deploy.NewServiceRequest(common.FleetProfileName), []deploy.ServiceRequest{deploy.NewServiceRequest(serviceName)}, env) + _ = fts.getDeployer().Remove(fts.currentContext, deploy.NewServiceRequest(common.FleetProfileName), []deploy.ServiceRequest{deploy.NewServiceRequest(serviceName)}, env) // TODO: Determine why this may be empty here before being cleared out if fts.CurrentTokenID != "" { @@ -189,11 +198,17 @@ func (fts *FleetTestSuite) beforeScenario() { } for _, item := range jsonData.Children() { + var streams []kibana.Stream + if err := json.Unmarshal(item.Path("streams").Bytes(), &streams); err != nil { + log.WithError(err).Warn("Could not unmarshall streams, will use an empty array instead") + streams = []kibana.Stream{} + } + if item.Path("type").Data().(string) == "system/metrics" { packageDataStream.Inputs = append(packageDataStream.Inputs, kibana.Input{ Type: item.Path("type").Data().(string), Enabled: item.Path("enabled").Data().(bool), - Streams: item.S("streams").Data().([]interface{}), + Streams: streams, Vars: map[string]kibana.Var{ "system.hostfs": { Value: "", @@ -205,7 +220,7 @@ func (fts *FleetTestSuite) beforeScenario() { packageDataStream.Inputs = append(packageDataStream.Inputs, kibana.Input{ Type: item.Path("type").Data().(string), Enabled: item.Path("enabled").Data().(bool), - Streams: item.S("streams").Data().([]interface{}), + Streams: streams, }) } } @@ -286,7 +301,7 @@ func (fts *FleetTestSuite) theStandaloneAgentIsListedInFleetWithStatus(desiredSt retryCount := 0 agentService := deploy.NewServiceRequest(common.ElasticAgentServiceName) - manifest, _ := fts.deployer.Inspect(fts.currentContext, agentService) + manifest, _ := fts.getDeployer().Inspect(fts.currentContext, agentService) waitForAgents := func() error { retryCount++ @@ -362,7 +377,7 @@ func (fts *FleetTestSuite) anStaleAgentIsDeployedToFleetWithInstaller(version, i func (fts *FleetTestSuite) installCerts() error { agentService := deploy.NewServiceRequest(common.ElasticAgentServiceName) - agentInstaller, _ := installer.Attach(fts.currentContext, fts.deployer, agentService, fts.InstallerType) + agentInstaller, _ := installer.Attach(fts.currentContext, fts.getDeployer(), agentService, fts.InstallerType) err := agentInstaller.InstallCerts(fts.currentContext) if err != nil { @@ -390,7 +405,7 @@ func (fts *FleetTestSuite) anAgentIsUpgraded(desiredVersion string) error { } agentService := deploy.NewServiceRequest(common.ElasticAgentServiceName) - manifest, _ := fts.deployer.Inspect(fts.currentContext, agentService) + manifest, _ := fts.getDeployer().Inspect(fts.currentContext, agentService) return fts.kibanaClient.UpgradeAgent(fts.currentContext, manifest.Hostname, desiredVersion) } @@ -404,7 +419,7 @@ func (fts *FleetTestSuite) agentInVersion(version string) error { agentInVersionFn := func() error { agentService := deploy.NewServiceRequest(common.ElasticAgentServiceName) - manifest, _ := fts.deployer.Inspect(fts.currentContext, agentService) + manifest, _ := fts.getDeployer().Inspect(fts.currentContext, agentService) agent, err := fts.kibanaClient.GetAgentByHostname(fts.currentContext, manifest.Hostname) if err != nil { return err @@ -431,7 +446,7 @@ func (fts *FleetTestSuite) agentInVersion(version string) error { func (fts *FleetTestSuite) agentRunPolicy(policyName string) error { agentRunPolicyFn := func() error { agentService := deploy.NewServiceRequest(common.ElasticAgentServiceName) - manifest, _ := fts.deployer.Inspect(fts.currentContext, agentService) + manifest, _ := fts.getDeployer().Inspect(fts.currentContext, agentService) policies, err := fts.kibanaClient.ListPolicies(fts.currentContext) if err != nil { @@ -531,12 +546,12 @@ func (fts *FleetTestSuite) anAgentIsDeployedToFleetWithInstallerAndFleetServer(i agentService, } env := fts.getProfileEnv() - err := fts.deployer.Add(fts.currentContext, deploy.NewServiceRequest(common.FleetProfileName), services, env) + err := fts.getDeployer().Add(fts.currentContext, deploy.NewServiceRequest(common.FleetProfileName), services, env) if err != nil { return err } - agentInstaller, _ := installer.Attach(fts.currentContext, fts.deployer, agentService, installerType) + agentInstaller, _ := installer.Attach(fts.currentContext, fts.getDeployer(), agentService, installerType) err = deployAgentToFleet(fts.currentContext, agentInstaller, fts.CurrentToken) if err != nil { return err @@ -546,20 +561,16 @@ func (fts *FleetTestSuite) anAgentIsDeployedToFleetWithInstallerAndFleetServer(i func (fts *FleetTestSuite) processStateChangedOnTheHost(process string, state string) error { agentService := deploy.NewServiceRequest(common.ElasticAgentServiceName) - agentInstaller, _ := installer.Attach(fts.currentContext, fts.deployer, agentService, fts.InstallerType) + agentInstaller, _ := installer.Attach(fts.currentContext, fts.getDeployer(), agentService, fts.InstallerType) if state == "started" { err := agentInstaller.Start(fts.currentContext) return err } else if state == "restarted" { - err := agentInstaller.Stop(fts.currentContext) + err := agentInstaller.Restart(fts.currentContext) if err != nil { return err } - err = agentInstaller.Start(fts.currentContext) - if err != nil { - return err - } return nil } else if state == "uninstalled" { err := agentInstaller.Uninstall(fts.currentContext) @@ -594,9 +605,16 @@ func (fts *FleetTestSuite) processStateChangedOnTheHost(process string, state st return err } - manifest, _ := fts.deployer.Inspect(fts.currentContext, agentService) + manifest, _ := fts.getDeployer().Inspect(fts.currentContext, agentService) - return CheckProcessState(fts.deployer, manifest.Name, process, "stopped", 0) + var srv deploy.ServiceRequest + if fts.StandAlone { + srv = deploy.NewServiceContainerRequest(manifest.Name) + } else { + srv = deploy.NewServiceRequest(manifest.Name) + } + + return CheckProcessState(fts.currentContext, fts.getDeployer(), srv, process, "stopped", 0) } // bootstrapFleet this method creates the runtime dependencies for the Fleet test suite, being of special @@ -618,6 +636,13 @@ func bootstrapFleet(ctx context.Context, env map[string]string) error { }).Fatal("Unable to create kibana client") } + err = elasticsearch.WaitForClusterHealth(ctx) + if err != nil { + log.WithFields(log.Fields{ + "error": err, + }).Fatal("Elasticsearch Cluster is not healthy") + } + err = kibanaClient.RecreateFleet(ctx) if err != nil { log.WithFields(log.Fields{ @@ -626,6 +651,48 @@ func bootstrapFleet(ctx context.Context, env map[string]string) error { }).Fatal("Fleet could not be recreated") } + fleetServicePolicy, err := kibanaClient.GetDefaultPolicy(ctx, true) + if err != nil { + log.WithFields(log.Fields{ + "error": err, + }).Fatal("Could not get Fleet Server's default policy") + } + log.WithFields(log.Fields{ + "id": fleetServicePolicy.ID, + "name": fleetServicePolicy.Name, + "description": fleetServicePolicy.Description, + }).Info("Fleet Server Policy retrieved") + + serviceToken, err := elasticsearch.GetAPIToken(ctx) + if err != nil { + log.WithFields(log.Fields{ + "error": err, + }).Fatal("Could not get API Token from Elasticsearch") + } + + fleetServerEnv := make(map[string]string) + for k, v := range env { + fleetServerEnv[k] = v + } + fleetServerEnv["fleetServerMode"] = "1" + fleetServerEnv["fleetServerPort"] = "8220" + fleetServerEnv["fleetInsecure"] = "1" + fleetServerEnv["fleetServerServiceToken"] = serviceToken.AccessToken + fleetServerEnv["fleetServerPolicyId"] = fleetServicePolicy.ID + + fleetServerSrv := deploy.ServiceRequest{ + Name: common.ElasticAgentServiceName, + Flavour: "fleet-server", + } + + err = deployer.Add(ctx, deploy.NewServiceRequest(common.FleetProfileName), []deploy.ServiceRequest{fleetServerSrv}, fleetServerEnv) + if err != nil { + log.WithFields(log.Fields{ + "error": err, + "env": fleetServerEnv, + }).Fatal("Fleet Server could not be started") + } + err = kibanaClient.WaitForFleet(ctx) if err != nil { log.WithFields(log.Fields{ @@ -703,7 +770,7 @@ func (fts *FleetTestSuite) setup() error { func (fts *FleetTestSuite) theAgentIsListedInFleetWithStatus(desiredStatus string) error { agentService := deploy.NewServiceRequest(common.ElasticAgentServiceName) - manifest, _ := fts.deployer.Inspect(fts.currentContext, agentService) + manifest, _ := fts.getDeployer().Inspect(fts.currentContext, agentService) err := theAgentIsListedInFleetWithStatus(fts.currentContext, desiredStatus, manifest.Hostname) if err != nil { return err @@ -836,7 +903,7 @@ func theAgentIsListedInFleetWithStatus(ctx context.Context, desiredStatus string func (fts *FleetTestSuite) theFileSystemAgentFolderIsEmpty() error { agentService := deploy.NewServiceRequest(common.ElasticAgentServiceName) - agentInstaller, _ := installer.Attach(fts.currentContext, fts.deployer, agentService, fts.InstallerType) + agentInstaller, _ := installer.Attach(fts.currentContext, fts.getDeployer(), agentService, fts.InstallerType) pkgManifest, _ := agentInstaller.Inspect() cmd := []string{ @@ -862,14 +929,14 @@ func (fts *FleetTestSuite) theFileSystemAgentFolderIsEmpty() error { func (fts *FleetTestSuite) theHostIsRestarted() error { agentService := deploy.NewServiceRequest(common.ElasticAgentServiceName) - err := fts.deployer.Stop(fts.currentContext, agentService) + err := fts.getDeployer().Stop(fts.currentContext, agentService) if err != nil { log.WithField("err", err).Error("Could not stop the service") } utils.Sleep(time.Duration(utils.TimeoutFactor) * 10 * time.Second) - err = fts.deployer.Start(fts.currentContext, agentService) + err = fts.getDeployer().Start(fts.currentContext, agentService) if err != nil { log.WithField("err", err).Error("Could not start the service") } @@ -946,7 +1013,7 @@ func (fts *FleetTestSuite) theAgentIsReenrolledOnTheHost() error { log.Trace("Re-enrolling the agent on the host with same token") agentService := deploy.NewServiceRequest(common.ElasticAgentServiceName) - agentInstaller, _ := installer.Attach(fts.currentContext, fts.deployer, agentService, fts.InstallerType) + agentInstaller, _ := installer.Attach(fts.currentContext, fts.getDeployer(), agentService, fts.InstallerType) err := agentInstaller.Enroll(fts.currentContext, fts.CurrentToken) if err != nil { @@ -1034,7 +1101,7 @@ func (fts *FleetTestSuite) theHostNameIsNotShownInTheAdminViewInTheSecurityApp() agentListedInSecurityFn := func() error { agentService := deploy.NewServiceRequest(common.ElasticAgentServiceName) - manifest, _ := fts.deployer.Inspect(fts.currentContext, agentService) + manifest, _ := fts.getDeployer().Inspect(fts.currentContext, agentService) host, err := fts.kibanaClient.IsAgentListedInSecurityApp(fts.currentContext, manifest.Hostname) if err != nil { log.WithFields(log.Fields{ @@ -1076,7 +1143,7 @@ func (fts *FleetTestSuite) theHostNameIsShownInTheAdminViewInTheSecurityApp(stat agentListedInSecurityFn := func() error { agentService := deploy.NewServiceRequest(common.ElasticAgentServiceName) - manifest, _ := fts.deployer.Inspect(fts.currentContext, agentService) + manifest, _ := fts.getDeployer().Inspect(fts.currentContext, agentService) matches, err := fts.kibanaClient.IsAgentListedInSecurityAppWithStatus(fts.currentContext, manifest.Hostname, status) if err != nil || !matches { log.WithFields(log.Fields{ @@ -1122,7 +1189,7 @@ func (fts *FleetTestSuite) anIntegrationIsSuccessfullyDeployedWithAgentAndInstal func (fts *FleetTestSuite) thePolicyResponseWillBeShownInTheSecurityApp() error { agentService := deploy.NewServiceRequest(common.ElasticAgentServiceName) - manifest, _ := fts.deployer.Inspect(fts.currentContext, agentService) + manifest, _ := fts.getDeployer().Inspect(fts.currentContext, agentService) agentID, err := fts.kibanaClient.GetAgentIDByHostname(fts.currentContext, manifest.Hostname) if err != nil { return err @@ -1218,7 +1285,7 @@ func (fts *FleetTestSuite) thePolicyIsUpdatedToHaveMode(name string, mode string func (fts *FleetTestSuite) thePolicyWillReflectTheChangeInTheSecurityApp() error { agentService := deploy.NewServiceRequest(common.ElasticAgentServiceName) - manifest, _ := fts.deployer.Inspect(fts.currentContext, agentService) + manifest, _ := fts.getDeployer().Inspect(fts.currentContext, agentService) agentID, err := fts.kibanaClient.GetAgentIDByHostname(fts.currentContext, manifest.Hostname) if err != nil { return err @@ -1294,12 +1361,12 @@ func (fts *FleetTestSuite) anAttemptToEnrollANewAgentFails() error { agentService, } env := fts.getProfileEnv() - err := fts.deployer.Add(fts.currentContext, deploy.NewServiceRequest(common.FleetProfileName), services, env) + err := fts.getDeployer().Add(fts.currentContext, deploy.NewServiceRequest(common.FleetProfileName), services, env) if err != nil { return err } - agentInstaller, _ := installer.Attach(fts.currentContext, fts.deployer, agentService, fts.InstallerType) + agentInstaller, _ := installer.Attach(fts.currentContext, fts.getDeployer(), agentService, fts.InstallerType) err = deployAgentToFleet(fts.currentContext, agentInstaller, fts.CurrentToken) if err == nil { @@ -1314,7 +1381,7 @@ func (fts *FleetTestSuite) anAttemptToEnrollANewAgentFails() error { // checking the error message produced by the install command in TAR installer // to distinguish from other install errors - if err != nil && strings.HasPrefix(err.Error(), "Failed to install the agent with subcommand:") { + if err != nil && strings.Contains(err.Error(), "Error: enroll command failed") { log.WithFields(log.Fields{ "err": err, "token": fts.CurrentToken, @@ -1333,7 +1400,7 @@ func (fts *FleetTestSuite) unenrollHostname() error { defer span.End() agentService := deploy.NewServiceRequest(common.ElasticAgentServiceName) - manifest, _ := fts.deployer.Inspect(fts.currentContext, agentService) + manifest, _ := fts.getDeployer().Inspect(fts.currentContext, agentService) log.Tracef("Un-enrolling all agentIDs for %s", manifest.Hostname) agents, err := fts.kibanaClient.ListAgents(fts.currentContext) @@ -1457,7 +1524,7 @@ func inputs(integration string) []kibana.Input { { Type: "apm", Enabled: true, - Streams: []interface{}{}, + Streams: []kibana.Stream{}, Vars: map[string]kibana.Var{ "apm-server": { Value: "host", @@ -1471,20 +1538,20 @@ func inputs(integration string) []kibana.Input { { Type: "linux/metrics", Enabled: true, - Streams: []interface{}{ - map[string]interface{}{ - "id": "linux/metrics-linux.memory-" + uuid.New().String(), - "enabled": true, - "data_stream": map[string]interface{}{ - "dataset": "linux.memory", - "type": "metrics", + Streams: []kibana.Stream{ + { + ID: "linux/metrics-linux.memory-" + uuid.New().String(), + Enabled: true, + DS: kibana.DataStream{ + Dataset: "linux.memory", + Type: "metrics", + }, + Vars: map[string]kibana.Var{ + "period": { + Value: "1s", + Type: "string", + }, }, - }, - }, - Vars: map[string]kibana.Var{ - "period": { - Value: "1s", - Type: "string", }, }, }, @@ -1495,7 +1562,7 @@ func inputs(integration string) []kibana.Input { func (fts *FleetTestSuite) getAgentOSData() (string, error) { agentService := deploy.NewServiceRequest(common.ElasticAgentServiceName) - manifest, _ := fts.deployer.Inspect(fts.currentContext, agentService) + manifest, _ := fts.getDeployer().Inspect(fts.currentContext, agentService) agent, err := fts.kibanaClient.GetAgentByHostname(fts.currentContext, manifest.Hostname) if err != nil { return "", err @@ -1505,7 +1572,7 @@ func (fts *FleetTestSuite) getAgentOSData() (string, error) { func (fts *FleetTestSuite) getAgentDefaultAPIKey() (string, error) { agentService := deploy.NewServiceRequest(common.ElasticAgentServiceName) - manifest, _ := fts.deployer.Inspect(fts.currentContext, agentService) + manifest, _ := fts.getDeployer().Inspect(fts.currentContext, agentService) agent, err := fts.kibanaClient.GetAgentByHostname(fts.currentContext, manifest.Hostname) if err != nil { return "", err @@ -1556,7 +1623,7 @@ func readJSONFile(file string) (*gabs.Container, error) { return jsonParsed.S("inputs"), nil } -func parseJSONMetrics(data *gabs.Container, integration string, set string, metrics string) []interface{} { +func parseJSONMetrics(data *gabs.Container, integration string, set string, metrics string) []kibana.Stream { for i, item := range data.Children() { if item.Path("type").Data().(string) == integration { for idx, stream := range item.S("streams").Children() { @@ -1570,13 +1637,18 @@ func parseJSONMetrics(data *gabs.Container, integration string, set string, metr true, fmt.Sprintf("inputs.%d.streams.%d.enabled", i, idx), ) - dataStreamOut, _ := data.Path(fmt.Sprintf("inputs.%d.streams", i)).Data().([]interface{}) + + var dataStreamOut []kibana.Stream + if err := json.Unmarshal(data.Path(fmt.Sprintf("inputs.%d.streams", i)).Bytes(), &dataStreamOut); err != nil { + return []kibana.Stream{} + } + return dataStreamOut } } } } - return nil + return []kibana.Stream{} } func (fts *FleetTestSuite) thePolicyIsUpdatedToHaveSystemSet(name string, set string) error { diff --git a/e2e/_suites/fleet/ingest_manager_test.go b/e2e/_suites/fleet/ingest_manager_test.go index 1867d1ceec..193c362868 100644 --- a/e2e/_suites/fleet/ingest_manager_test.go +++ b/e2e/_suites/fleet/ingest_manager_test.go @@ -44,8 +44,9 @@ func setUpSuite() { imts = IngestManagerTestSuite{ Fleet: &FleetTestSuite{ - kibanaClient: kibanaClient, - deployer: deploy.New(common.Provider), + kibanaClient: kibanaClient, + deployer: deploy.New(common.Provider), + dockerDeployer: deploy.New("docker"), }, } } diff --git a/e2e/_suites/fleet/stand-alone.go b/e2e/_suites/fleet/stand-alone.go index d4ea843a64..911c77ee5e 100644 --- a/e2e/_suites/fleet/stand-alone.go +++ b/e2e/_suites/fleet/stand-alone.go @@ -33,9 +33,9 @@ func (fts *FleetTestSuite) thereIsNewDataInTheIndexFromAgent() error { maxTimeout := time.Duration(utils.TimeoutFactor) * time.Minute * 2 minimumHitsCount := 20 - agentService := deploy.NewServiceRequest(common.ElasticAgentServiceName).WithFlavour(fts.Image) + agentService := deploy.NewServiceContainerRequest(common.ElasticAgentServiceName).WithFlavour(fts.Image) - manifest, _ := fts.deployer.Inspect(fts.currentContext, agentService) + manifest, _ := fts.getDeployer().Inspect(fts.currentContext, agentService) result, err := searchAgentData(fts.currentContext, manifest.Hostname, fts.RuntimeDependenciesStartDate, minimumHitsCount, maxTimeout) if err != nil { return err @@ -47,8 +47,8 @@ func (fts *FleetTestSuite) thereIsNewDataInTheIndexFromAgent() error { } func (fts *FleetTestSuite) theDockerContainerIsStopped(serviceName string) error { - agentService := deploy.NewServiceRequest(serviceName) - err := fts.deployer.Stop(fts.currentContext, agentService) + agentService := deploy.NewServiceContainerRequest(serviceName) + err := fts.getDeployer().Stop(fts.currentContext, agentService) if err != nil { return err } @@ -61,8 +61,8 @@ func (fts *FleetTestSuite) thereIsNoNewDataInTheIndexAfterAgentShutsDown() error maxTimeout := time.Duration(30) * time.Second minimumHitsCount := 1 - agentService := deploy.NewServiceRequest(common.ElasticAgentServiceName) - manifest, _ := fts.deployer.Inspect(fts.currentContext, agentService) + agentService := deploy.NewServiceContainerRequest(common.ElasticAgentServiceName) + manifest, _ := fts.getDeployer().Inspect(fts.currentContext, agentService) result, err := searchAgentData(fts.currentContext, manifest.Hostname, fts.AgentStoppedDate, minimumHitsCount, maxTimeout) if err != nil { if strings.Contains(err.Error(), "type:index_not_found_exception") { @@ -96,8 +96,8 @@ func (fts *FleetTestSuite) startStandAloneAgent(image string, flavour string, en // load the docker images that were already: // a. downloaded from the GCP bucket // b. fetched from the local beats binaries - agentService := deploy.NewServiceRequest(common.ElasticAgentServiceName) - dockerInstaller, _ := installer.Attach(fts.currentContext, fts.deployer, agentService, "docker") + agentService := deploy.NewServiceContainerRequest(common.ElasticAgentServiceName) + dockerInstaller, _ := installer.Attach(fts.currentContext, fts.getDeployer(), agentService, "docker") dockerInstaller.Preinstall(fts.currentContext) arch := utils.GetArchitecture() @@ -133,9 +133,9 @@ func (fts *FleetTestSuite) startStandAloneAgent(image string, flavour string, en common.ProfileEnv[k] = v } - agentService := deploy.NewServiceRequest(common.ElasticAgentServiceName).WithFlavour(flavour) + agentService := deploy.NewServiceContainerRequest(common.ElasticAgentServiceName).WithFlavour(flavour) - err = fts.deployer.Add(fts.currentContext, deploy.NewServiceRequest(common.FleetProfileName), []deploy.ServiceRequest{agentService}, common.ProfileEnv) + err = fts.getDeployer().Add(fts.currentContext, deploy.NewServiceContainerRequest(common.FleetProfileName), []deploy.ServiceRequest{agentService}, common.ProfileEnv) if err != nil { log.Error("Could not deploy the elastic-agent") return err @@ -143,7 +143,7 @@ func (fts *FleetTestSuite) startStandAloneAgent(image string, flavour string, en fts.Image = image - manifest, _ := fts.deployer.Inspect(fts.currentContext, agentService) + manifest, _ := fts.getDeployer().Inspect(fts.currentContext, agentService) err = fts.installTestTools(manifest.Name) if err != nil { diff --git a/e2e/_suites/fleet/world.go b/e2e/_suites/fleet/world.go index e6038c5aa1..bcca28ac74 100644 --- a/e2e/_suites/fleet/world.go +++ b/e2e/_suites/fleet/world.go @@ -5,6 +5,7 @@ package main import ( + "context" "strconv" "time" @@ -37,27 +38,33 @@ func (imts *IngestManagerTestSuite) thereAreInstancesOfTheProcessInTheState(ocur return err } - return CheckProcessState(imts.Fleet.deployer, manifest.Name, process, state, count) + var srv deploy.ServiceRequest + if imts.Fleet.StandAlone { + srv = deploy.NewServiceContainerRequest(manifest.Name) + } else { + srv = deploy.NewServiceRequest(manifest.Name) + } + + return CheckProcessState(imts.Fleet.currentContext, imts.Fleet.deployer, srv, process, state, count) } // CheckProcessState checks if a process is in the desired state in a container // name of the container for the service: // we are using the underlying deployer to run the commands in the container/service -func CheckProcessState(deployer deploy.Deployment, service string, process string, state string, occurrences int) error { +func CheckProcessState(ctx context.Context, deployer deploy.Deployment, service deploy.ServiceRequest, process string, state string, occurrences int) error { timeout := time.Duration(utils.TimeoutFactor) * time.Minute - serviceRequest := deploy.NewServiceRequest(service) actionOpts := action.ProcessAction{ Process: process, DesiredState: state, Occurrences: occurrences, MaxTimeout: timeout} - waitForProcess, err := action.Attach(imts.Fleet.currentContext, deployer, serviceRequest, action.ActionWaitForProcess, actionOpts) + waitForProcess, err := action.Attach(ctx, deployer, service, action.ActionWaitForProcess, actionOpts) if err != nil { log.WithField("error", err).Error("Unable to attach Process check action") } - _, err = waitForProcess.Run(imts.Fleet.currentContext) + _, err = waitForProcess.Run(ctx) if err != nil { if state == "started" { log.WithFields(log.Fields{ diff --git a/go.mod b/go.mod index ec962872d0..49393b7b50 100644 --- a/go.mod +++ b/go.mod @@ -5,12 +5,12 @@ go 1.14 require ( github.com/Flaque/filet v0.0.0-20201012163910-45f684403088 github.com/Jeffail/gabs/v2 v2.6.0 - github.com/cenkalti/backoff/v4 v4.1.0 + github.com/cenkalti/backoff/v4 v4.1.1 github.com/cucumber/godog v0.11.0 github.com/cucumber/messages-go/v10 v10.0.3 // indirect - github.com/docker/cli v20.10.7+incompatible - github.com/docker/docker v20.10.6+incompatible - github.com/elastic/elastic-package v0.32.1 + github.com/docker/cli v20.10.11+incompatible + github.com/docker/docker v20.10.12+incompatible + github.com/elastic/elastic-package v0.36.0 github.com/elastic/go-elasticsearch/v8 v8.0.0-20210317102009-a9d74cec0186 github.com/elastic/go-windows v1.0.1 // indirect github.com/gobuffalo/packr/v2 v2.8.1 diff --git a/go.sum b/go.sum index 276990c1d6..e1942b3997 100644 --- a/go.sum +++ b/go.sum @@ -51,6 +51,7 @@ dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7 github.com/AlecAivazis/survey/v2 v2.3.2 h1:TqTB+aDDCLYhf9/bD2TwSO8u8jDSmMUd2SUVO4gCnU8= github.com/AlecAivazis/survey/v2 v2.3.2/go.mod h1:TH2kPCDU3Kqq7pLbnCWwZXDBjnhZtmsCle5EiYDJ2fg= 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 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= @@ -59,16 +60,20 @@ github.com/Azure/go-autorest v10.8.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSW 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.20/go.mod h1:o3tqFY+QR40VOlk+pV4d77mORO64jOXSgEnPQgLK6JY= github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg= 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.15/go.mod h1:tGMin8I49Yij6AQ+rvV+Xa/zwxYQB5hmsd6DkfAx2+A= 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/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= 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/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= @@ -95,8 +100,9 @@ github.com/Microsoft/go-winio v0.4.16-0.20201130162521-d1ffc52c7331/go.mod h1:XB github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= github.com/Microsoft/go-winio v0.4.17-0.20210211115548-6eac466e5fa3/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= github.com/Microsoft/go-winio v0.4.17-0.20210324224401-5516f17a5958/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= -github.com/Microsoft/go-winio v0.4.17 h1:iT12IBVClFevaf8PuVyi3UmZOVh4OqnaLxDTW2O6j3w= github.com/Microsoft/go-winio v0.4.17/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= +github.com/Microsoft/go-winio v0.5.1 h1:aPJp2QD7OOrhO5tQXqQoGSJc+DjDtWTGLOmNyAm6FgY= +github.com/Microsoft/go-winio v0.5.1/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= github.com/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= @@ -104,8 +110,10 @@ github.com/Microsoft/hcsshim v0.8.9/go.mod h1:5692vkUqntj1idxauYlpoINNKeqCiG6Sg3 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.21 h1:btRfUDThBE5IKcvI8O8jOiIkujUsAMBSRsYDYmEi6oM= 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.1 h1:VfDCj+QnY19ktX5TsH22JHcjaZ05RWQiwDbOyEg5ziM= +github.com/Microsoft/hcsshim v0.9.1/go.mod h1:Y/0uV2jUab5kBI7SQgl62at0AVX7uaruzADAVmxm3eM= 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/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= @@ -119,14 +127,16 @@ github.com/PaesslerAG/jsonpath v0.1.0/go.mod h1:4BzmtoM/PI8fPO4aQGIusjGxGir2BzcV github.com/PaesslerAG/jsonpath v0.1.1 h1:c1/AToHQMVsduPAa4Vh6xp2U0evy4t8SWp8imEsylIk= github.com/PaesslerAG/jsonpath v0.1.1/go.mod h1:lVboNxFGal/VwW6d9JzIy56bUsYAP6tH/x80vjnCseY= github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= -github.com/ProtonMail/go-crypto v0.0.0-20211221144345-a4f6767435ab h1:5FiL/TCaiKCss/BLMIACDxxadYrx767l9kh0qYX+sLQ= -github.com/ProtonMail/go-crypto v0.0.0-20211221144345-a4f6767435ab/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= +github.com/ProtonMail/go-crypto v0.0.0-20220113124808-70ae35bab23f h1:J2FzIrXN82q5uyUraeJpLIm7U6PffRwje2ORho5yIik= +github.com/ProtonMail/go-crypto v0.0.0-20220113124808-70ae35bab23f/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= github.com/ProtonMail/go-mime v0.0.0-20190923161245-9b5a4261663a h1:W6RrgN/sTxg1msqzFFb+G80MFmpjMw61IU+slm+wln4= github.com/ProtonMail/go-mime v0.0.0-20190923161245-9b5a4261663a/go.mod h1:NYt+V3/4rEeDuaev/zw1zCq8uqVEuPHzDPo3OZrlGJ4= -github.com/ProtonMail/gopenpgp/v2 v2.4.0 h1:LUUPJ0d/kwFxPUUzTfiM/oW5vgicDD18ryaR01ez8wY= -github.com/ProtonMail/gopenpgp/v2 v2.4.0/go.mod h1:RFjoVjfhV8f78tjz/fLrp/OXkugL3QmWsiJq/fsQYA4= +github.com/ProtonMail/gopenpgp/v2 v2.4.2 h1:xPcQYAa3D3V2sDhJq0bYWwlWtxzTudxm1/XXHlSWcJo= +github.com/ProtonMail/gopenpgp/v2 v2.4.2/go.mod h1:0byYFEOo6x4F/1YqhN7Z6m015Cqnxllz3CGb5cjJueY= +github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= 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 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= 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/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= @@ -148,6 +158,7 @@ github.com/andybalholm/brotli v1.0.3/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHG github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20210826220005-b48c857c3a0e/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY= 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= @@ -167,6 +178,7 @@ github.com/aws/aws-sdk-go v1.34.9/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU github.com/aymerick/raymond v2.0.2+incompatible h1:VEp3GpgdAnv9B2GFyTvqgcKvY+mfKMjPOA3SbKLtnU0= 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/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= @@ -188,8 +200,8 @@ github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0Bsq github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.0 h1:c8LkOFQTzuO0WBM/ae5HdGQuZPfPxp7lqBRwQRm4fSc= -github.com/cenkalti/backoff/v4 v4.1.0/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.1.1 h1:G2HAfAmvm/GcKan2oOQpBXOd2tT2G57ZnZGWa1PxPBQ= +github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= 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= @@ -199,6 +211,7 @@ github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghf github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5 h1:7aWHqerlJ41y6FOsEUvknqgXnGmJyJSbjhAWq5pO4F8= github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5/go.mod h1:/iP1qXHoty45bqomnu2LM+VVyAEdWN+vtSHGlQgyxbw= 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= @@ -240,8 +253,9 @@ github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1 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 h1:iJnMvco9XGvKUvNQkv88bE4uJXxRQH18efbKo9w5vHQ= github.com/containerd/cgroups v1.0.1/go.mod h1:0SJrPIenamHDcZhEcJMNBB85rHcUsw4f25ZfBiPYRkU= +github.com/containerd/cgroups v1.0.2 h1:mZBclaSgNDfPWtfhj2xJY28LZ9nYIgzB0pwSURPl6JM= +github.com/containerd/cgroups v1.0.2/go.mod h1:qpbpJ1jmlqsR9f2IyaLPsdkCdnt0rbDVqIDlhuu5tRY= 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= @@ -255,14 +269,15 @@ github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMX 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.2/go.mod h1:0DOxVqwDy2iZvrZp2JUx/E+hS0UNTVn7dJnIOwtYR4g= -github.com/containerd/containerd v1.5.7 h1:rQyoYtj4KddB3bxG6SAqd4+08gePNyJjRqvOIfV3rkM= github.com/containerd/containerd v1.5.7/go.mod h1:gyvv6+ugqY25TiXxcZC3L5yOeYgEw0QMhscqVp1AR9c= +github.com/containerd/containerd v1.5.9 h1:rs6Xg1gtIxaeyG+Smsb/0xaSDu1VgFhOCKBXxMxbsF4= +github.com/containerd/containerd v1.5.9/go.mod h1:fvQqCfadDGga5HZyn3j4+dx56qj2I9YwBrlSdalvJYQ= 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= @@ -291,11 +306,13 @@ github.com/containerd/imgcrypt v1.1.1/go.mod h1:xpLnwiQmEUJPvQoAapeb2SNCxz7Xr6PJ 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= @@ -347,10 +364,12 @@ github.com/cucumber/messages-go/v10 v10.0.1/go.mod h1:kA5T38CBlBbYLU12TIrJ4fk4wS github.com/cucumber/messages-go/v10 v10.0.3 h1:m/9SD/K/A15WP7i1aemIv7cwvUw+viS51Ui5HBw1cdE= github.com/cucumber/messages-go/v10 v10.0.3/go.mod h1:9jMZ2Y8ZxjLY6TG2+x344nt5rXstVVDYSdS5ySfI1WY= 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/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.0/go.mod h1:XYlo+eRTsVA9aHGp7NGjFkPla4m+DCL7hqDjlFjiygg= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -360,20 +379,24 @@ github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba/go.mod h1:dV8l 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/distribution/distribution/v3 v3.0.0-20210804104954-38ab4c606ee3/go.mod h1:gt38b7cvVKazi5XkHvINNytZXgTEntyhtyM3HQz46Nk= +github.com/distribution/distribution/v3 v3.0.0-20211118083504-a29a3c99a684/go.mod h1:UfCu3YXJJCI+IdnqGgYP82dk2+Joxmv+mUTVBES6wac= github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= github.com/dnephin/pflag v1.0.7 h1:oxONGlWxhmUct0YzKTgrpQv9AUA1wtPBn7zuSjJqptk= github.com/dnephin/pflag v1.0.7/go.mod h1:uxE91IoWURlOiTUIA8Mq5ZZkAv3dPUfZNaT80Zm7OQE= -github.com/docker/cli v20.10.7+incompatible h1:pv/3NqibQKphWZiAskMzdz8w0PRbtTaEB+f6NwdU7Is= -github.com/docker/cli v20.10.7+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v0.0.0-20191017083524-a8ff7f821017/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v20.10.11+incompatible h1:tXU1ezXcruZQRrMP8RN2z9N91h+6egZTS1gsPsKantc= +github.com/docker/cli v20.10.11+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 h1:a5mlkVzth6W5A4fOsS3D2EO5BUmsJpcB+cRlLU7cSug= github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v17.12.0-ce-rc1.0.20200618181300-9dc6525e6118+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v20.10.6+incompatible h1:oXI3Vas8TI8Eu/EjH4srKHJBVqraSzJybhxY7Om9faQ= +github.com/docker/docker v1.4.2-0.20190924003213-a8608b5b67c7/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker v20.10.6+incompatible/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.12+incompatible h1:CEeNmFM0QZIsJCZKMkZx0ZcahTiewkrgiwfYD+dfl1U= +github.com/docker/docker v20.10.12+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.6.3/go.mod h1:WRaJzqw3CTB9bk10avuGsjVBZsD05qeibJ1/TYlvc0Y= +github.com/docker/docker-credential-helpers v0.6.4/go.mod h1:ofX3UI0Gz1TteYBjtgs07O36Pyasyp66D2uKT7H8W1c= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-events v0.0.0-20170721190031-9461782956ad/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= @@ -390,8 +413,8 @@ github.com/dsnet/compress v0.0.2-0.20210315054119-f66993602bf5/go.mod h1:qssHWj6 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/elastic/elastic-package v0.32.1 h1:GX0Kyoi8hRWvrq9jfjpkZmeQxsJkBfGJd8bDLYk2w+g= -github.com/elastic/elastic-package v0.32.1/go.mod h1:l1fEnF52XRBL6a5h6uAemtdViz2bjtjUtgdQcuRhEAY= +github.com/elastic/elastic-package v0.36.0 h1:EsDME4iLHQUSzxor7F2CPueHpPu/GNBL6D4VYUiIHRg= +github.com/elastic/elastic-package v0.36.0/go.mod h1:TUyhRXtf+kazrUthMF+5FtngcFJZtsgty0o/nnl8UFU= github.com/elastic/go-elasticsearch/v7 v7.16.0 h1:GHsxDFXIAlhSleXun4kwA89P7kQFADRChqvgOPeYP5A= github.com/elastic/go-elasticsearch/v7 v7.16.0/go.mod h1:OJ4wdbtDNk5g503kvlHLyErCgQwwzmDtaFC4XyOxXA4= github.com/elastic/go-elasticsearch/v8 v8.0.0-20210317102009-a9d74cec0186 h1:F07rUXGNyhzJZKXI08EI/eAURqzhDqoRSdb//R+BOx4= @@ -479,25 +502,29 @@ github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= 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 h1:QK40JKJyMdUDz+h+xvCsru/bJhvG0UxvePV0ufL/AcE= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/zapr v1.2.0/go.mod h1:Qa4Bsj2Vb+FAVeAKsLD8RLQ+YRJB8YDmOAKxaBQf7Ro= 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.19.8 h1:doM+tQdZbUm9gydV9yR+iQNmztbjj7I3sW4sIcAwIzc= github.com/go-openapi/errors v0.19.8/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= +github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= 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/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 h1:1WJP/wi4OjB4iV8KVbH73rQaoialJrqv8gitZLxGLtM= github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= +github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= github.com/go-openapi/strfmt v0.21.0 h1:hX2qEZKmYks+t0hKeb4VTJpUm2UYsdL3+DCid5swxIs= github.com/go-openapi/strfmt v0.21.0/go.mod h1:ZRQ409bWMj+SOgXofQAGTIo2Ebu72Gs+WaRADcS5iNg= +github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= 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 h1:gm3vOOXfiuw5i9p5N9xJvfjvuofpyvLA9Wr6QfK5Fng= @@ -548,8 +575,9 @@ github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5x github.com/godror/godror v0.24.2/go.mod h1:wZv/9vPiUib6tkoDl+AZ/QLf5YZgMravZ7jxH2eQWAE= github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gofrs/uuid v3.3.0+incompatible h1:8K4tyRfvU1CYPgJsveYFQMhpFd/wXNM7iK6rR7UHz84= github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw= +github.com/gofrs/uuid v4.0.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/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= @@ -559,8 +587,10 @@ github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXP 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-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= 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= @@ -605,6 +635,8 @@ github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Z github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= +github.com/google/cel-go v0.9.0/go.mod h1:U7ayypeSkw23szu4GaQTPJGx66c20mx8JklMSxrmI1w= +github.com/google/cel-spec v0.6.0/go.mod h1:Nwjgxy5CbjlPrtCWjeDjUyKMl8w41YBYGjsyDdqk0xA= 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= @@ -618,6 +650,7 @@ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-containerregistry v0.5.1/go.mod h1:Ct15B4yir3PLOP5jsy0GNeYVaIZs/MK/Jz5any1wFW0= github.com/google/go-github/v32 v32.1.0 h1:GWkQOdXqviCPx7Q7Fj+KyPoGm4SwHRh8rheoPhd27II= 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= @@ -664,6 +697,7 @@ github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORR 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.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= @@ -754,7 +788,8 @@ github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c 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.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= -github.com/jmoiron/sqlx v1.3.1/go.mod h1:2BljVx/86SuTyjE+aPYlHCTNvZrnJXghYGpNiXLBMCQ= +github.com/jmoiron/sqlx v1.3.4/go.mod h1:2BljVx/86SuTyjE+aPYlHCTNvZrnJXghYGpNiXLBMCQ= +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.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= @@ -824,8 +859,10 @@ github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 h1:P6pPBnrTSX3DEVR4fDembhR github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0/go.mod h1:vmVJ0l/dxyfGW6FmdpVm2joNMFikkuWg0EoCKLGUMNw= github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.10.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.10.4/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/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= @@ -835,6 +872,7 @@ github.com/magefile/mage v1.11.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXq 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/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= @@ -872,10 +910,12 @@ github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-shellwords v1.0.3/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= -github.com/mattn/go-shellwords v1.0.11/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y= +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/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/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 h1:5PJl274Y63IEHC+7izoQE9x6ikvDFZS2mDVS3drnohI= github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= @@ -890,7 +930,7 @@ github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceT github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= github.com/mitchellh/cli v1.1.2/go.mod h1:6iaV0fGdElS6dPBx0EApTxHrcWvmJphyh2n8YBLPPZ4= github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= -github.com/mitchellh/copystructure v1.1.1/go.mod h1:EBArHfARyrSWO/+Wyr9zwEkc6XMFB9XyNgFNmRkZZU4= +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= @@ -907,15 +947,16 @@ github.com/mitchellh/mapstructure v1.4.3 h1:OVowDSCllw/YjdLkam3/sm7wEtOy59d8ndGg github.com/mitchellh/mapstructure v1.4.3/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.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= 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/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= github.com/moby/sys/mount v0.2.0 h1:WhCW5B355jtxndN5ovugJlMFJawbUODuW8fSnEH6SSM= 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 h1:1O+1cHA1aujwEwwVMa2Xm2l+gIpUHyd3+D+d7LZh1kM= 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 h1:2Ks8/r6lopsxWi9m58nlwjaeSzUX9iiL1vj5qB/9ObI= +github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ= github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo= github.com/moby/term v0.0.0-20201216013528-df9cb8a40635/go.mod h1:FBS0z0QWA44HXygs7VXDUOGoN/1TV3RuWkLO04am3wc= @@ -955,16 +996,20 @@ github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6 github.com/onsi/ginkgo v0.0.0-20151202141238-7f8ab55aaf3b/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= 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.14.0 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/gomega v0.0.0-20151007035656-2152b45fa28a/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= 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 h1:gph6h/qe9GSUw1NhH1gp+qb+h8rXD8Cy60Z32Qw3ELA= github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc= @@ -975,8 +1020,9 @@ github.com/opencontainers/go-digest v1.0.0-rc1.0.20180430190053-c9281466c8b2/go. 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 h1:JMemWkRwHx4Zj+fVxWoMCFm/8sYGGrUVojFA6h/TRcI= github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM= +github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/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= @@ -1040,6 +1086,7 @@ github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+ github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= +github.com/prometheus/common v0.28.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= 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= @@ -1073,6 +1120,7 @@ github.com/sagikazarmark/crypt v0.3.0/go.mod h1:uD/D+6UF4SrIR1uGEv7bBNkNqLGqUr43 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/sclevine/spec v1.2.0/go.mod h1:W4J29eT/Kzv7/b9IWLB055Z+qvVC9vt0Arko24q7p+U= 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/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= @@ -1268,6 +1316,7 @@ go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/ go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= 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= 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= @@ -1285,19 +1334,17 @@ golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191122220453-ac88ee75c92c/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200128174031-69ecbb4d6d5d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= 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-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= -golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 h1:HWj/xjIHfjYU5nVXpTM0s39J9CbLn7Cc5a7IC5rwsMQ= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20211117183948-ae814b36b871 h1:/pEO3GD/ABYAjuakUS6xSEmmlyVS4kxBNkeA9tLJiTI= +golang.org/x/crypto v0.0.0-20211117183948-ae814b36b871/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= 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= @@ -1394,12 +1441,15 @@ golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5o 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-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-20210813160813-60bc85c4be6d/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-20211209124913-491a49abca63 h1:iocB37TsdFuN6IBRZ+ry36wrkoV51/tl5vOWqkcPGvY= +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-20220107192237-5cfca573fb4d h1:62NvYBuaanGXR2ZOfwDFkhhl6X1DUgf8qg3GuQvxZsE= +golang.org/x/net v0.0.0-20220107192237-5cfca573fb4d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= 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= @@ -1457,6 +1507,7 @@ golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7w 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= @@ -1546,13 +1597,13 @@ golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211013075003-97ac67df715c/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-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211205182925-97ca703d548d h1:FjkYO/PPp4Wi0EAUOVLxePm7qVW4r4ctbWpURyuOD0E= golang.org/x/sys v0.0.0-20211205182925-97ca703d548d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e h1:fLOSk5Q00efkSvAm+4xcoXD+RRmLmmulPn5I3Y9F2EM= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-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 h1:9zKuko04nR4gjZ4+DNjHqRlAJqbJETHwiNKDqTfOjfE= golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -1570,12 +1621,14 @@ golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxb 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 h1:7zkz7BUtwNFFqcowJ+RIgu2MaV/MapERkDIy+mwPyjs= golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-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= @@ -1595,6 +1648,7 @@ golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgw 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= @@ -1628,12 +1682,14 @@ golang.org/x/tools v0.0.0-20200509030707-2212a7e161a5/go.mod h1:EkVYQZoAsY45+roY 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= @@ -1645,9 +1701,10 @@ golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.6-0.20210820212750-d4cc65f0b2ff/go.mod h1:YD9qOF0M9xpSpdWTBbzEl5e/RnCefISl8E5Noe10jFM= golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= -golang.org/x/tools v0.1.8 h1:P1HhGGuLW4aAclzjtmJdf0mJOjVUZUzOTqkAkWL+l6w= -golang.org/x/tools v0.1.8/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/tools v0.1.9 h1:j9KsMiaP1c3B0OTQGth0/k+miLGTgLsAFUCrF2vLcF8= +golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= 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= @@ -1725,12 +1782,14 @@ google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfG 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-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-20201102152239-715cce707fb0/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= @@ -1763,8 +1822,9 @@ google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ6 google.golang.org/genproto v0.0.0-20211129164237-f09f9a12af12/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211203200212-54befc351ae9/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 h1:I0YcKz0I7OAhddo7ya8kMnvprhcWM045PmkBdMO9zN0= google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368 h1:Et6SkiuvnBn+SgrSYXs/BrUpGB4mbdwt4R3vaPIlicA= +google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= @@ -1795,8 +1855,9 @@ google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnD 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.42.0 h1:XT2/MFpuPFsEX2fWh3YQtHkZ+WYZFQRfaUgLZYj/p6A= google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.43.0 h1:Eeu7bZtDZ2DpRCsLhUlcrLnvYaMK1Gz86a+hMVvELmM= +google.golang.org/grpc v1.43.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -1869,8 +1930,8 @@ gotest.tools/gotestsum v1.7.0/go.mod h1:V1m4Jw3eBerhI/A6qCxUE07RnCg7ACkKj9BYcAm0 gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= -helm.sh/helm/v3 v3.7.2 h1:xn1OxcZEpgKpp4CCpPz1KKUyb9gAtTouXV2E3S8ChYQ= -helm.sh/helm/v3 v3.7.2/go.mod h1:UXuiAn0+FfBpqbiMuwWt8/aAKkfJvnWLBJ6f4HcFs0M= +helm.sh/helm/v3 v3.8.0 h1:vlQQDDQkrH4NECOFbGcwjjKyHL5Sa3xNLjMxXm7fMVo= +helm.sh/helm/v3 v3.8.0/go.mod h1:0nYPSuvuj8TTJDLRSAfbzGGbazPZsayaDpP8s9FfZT8= 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= @@ -1885,86 +1946,87 @@ howett.net/plist v0.0.0-20201203080718-1454fab16a06/go.mod h1:vMygbs4qMhSZSc4lCU 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.4/go.mod h1:Rgs+9gIGYC5laXQSZZ9JqT5NevNgoGiOdVWi1BAB3qk= -k8s.io/api v0.23.1 h1:ncu/qfBfUoClqwkTGbeRqqOqBCRoUAflMuOaOD7J0c8= k8s.io/api v0.23.1/go.mod h1:WfXnOnwSqNtG62Y1CdjoMxh7r7u9QXGCkA1u0na2jgo= -k8s.io/apiextensions-apiserver v0.22.4 h1:2iGpcVyw4MnAyyXVJU2Xg6ZsbIxAOfRHo0LF5A5J0RA= -k8s.io/apiextensions-apiserver v0.22.4/go.mod h1:kH9lxD8dbJ+k0ZizGET55lFgdGjO8t45fgZnCVdZEpw= +k8s.io/api v0.23.3 h1:KNrME8KHGr12Ozjf8ytOewKzZh6hl/hHUZeHddT3a38= +k8s.io/api v0.23.3/go.mod h1:w258XdGyvCmnBj/vGzQMj6kzdufJZVUwEM1U2fRJwSQ= +k8s.io/apiextensions-apiserver v0.23.1 h1:xxE0q1vLOVZiWORu1KwNRQFsGWtImueOrqSl13sS5EU= +k8s.io/apiextensions-apiserver v0.23.1/go.mod h1:0qz4fPaHHsVhRApbtk3MGXNn2Q9M/cVWWhfHdY2SxiM= 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.4/go.mod h1:yU6oA6Gnax9RrxGzVvPFFJ+mpnW6PBSqp0sx0I0HHW0= -k8s.io/apimachinery v0.23.1 h1:sfBjlDFwj2onG0Ijx5C+SrAoeUscPrmghm7wHP+uXlo= k8s.io/apimachinery v0.23.1/go.mod h1:SADt2Kl8/sttJ62RRsi9MIV4o8f5S3coArm0Iu3fBno= +k8s.io/apimachinery v0.23.3 h1:7IW6jxNzrXTsP0c8yXz2E5Yx/WTzVPTsHIx/2Vm0cIk= +k8s.io/apimachinery v0.23.3/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM= 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.4/go.mod h1:38WmcUZiiy41A7Aty8/VorWRa8vDGqoUzDf2XYlku0E= -k8s.io/cli-runtime v0.22.4/go.mod h1:x35r0ERHXr/MrbR1C6MPJxQ3xKG6+hXi9m2xLzlMPZA= -k8s.io/cli-runtime v0.23.1 h1:vHUZrq1Oejs0WaJnxs09mLHKScvIIl2hMSthhS8o8Yo= +k8s.io/apiserver v0.23.1/go.mod h1:Bqt0gWbeM2NefS8CjWswwd2VNAKN6lUKR85Ft4gippY= k8s.io/cli-runtime v0.23.1/go.mod h1:r9r8H/qfXo9w+69vwUL7LokKlLRKW5D6A8vUKCx+YL0= +k8s.io/cli-runtime v0.23.3 h1:aJiediw+uUbxkfO6BNulcAMTUoU9Om43g3R7rIkYqcw= +k8s.io/cli-runtime v0.23.3/go.mod h1:yA00O5pDqnjkBh8fkuugBbfIfjB1nOpz+aYLotbnOfc= 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.4/go.mod h1:Yzw4e5e7h1LNHA4uqnMVrpEpUs1hJOiuBsJKIlRCHDA= -k8s.io/client-go v0.23.1 h1:Ma4Fhf/p07Nmj9yAB1H7UwbFHEBrSPg8lviR24U2GiQ= k8s.io/client-go v0.23.1/go.mod h1:6QSI8fEuqD4zgFK0xbdwfB/PthBsIxCJMa3s17WlcO0= -k8s.io/code-generator v0.22.4/go.mod h1:qjYl54pQ/emhkT0UxbufbREYJMWsHNNV/jSVwhYZQGw= +k8s.io/client-go v0.23.3 h1:23QYUmCQ/W6hW78xIwm3XqZrrKZM+LWDqW2zfo+szJs= +k8s.io/client-go v0.23.3/go.mod h1:47oMd+YvAOqZM7pcQ6neJtBiFH7alOyfunYN48VsmwE= +k8s.io/code-generator v0.19.7/go.mod h1:lwEq3YnLYb/7uVXLorOJfxg+cUu2oihFhHZ0n9NIla0= +k8s.io/code-generator v0.23.1/go.mod h1:V7yn6VNTCWW8GqodYCESVo95fuiEg713S8B7WacWZDA= 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.4 h1:7qwLJnua2ppGNZrRGDQ0vhsFebI39VGbZ4zdR5ArViI= -k8s.io/component-base v0.22.4/go.mod h1:MrSaQy4a3tFVViff8TZL6JHYSewNCLshZCwHYM58v5A= -k8s.io/component-helpers v0.22.4/go.mod h1:A50qTyczDFbhZDifIfS2zFrHuPk9UNOWPpvNZ+3RSIs= +k8s.io/component-base v0.23.1 h1:j/BqdZUWeWKCy2v/jcgnOJAzpRYWSbGcjGVYICko8Uc= +k8s.io/component-base v0.23.1/go.mod h1:6llmap8QtJIXGDd4uIWJhAq0Op8AtQo6bDW2RrNMTeo= +k8s.io/component-helpers v0.23.1/go.mod h1:ZK24U+2oXnBPcas2KolLigVVN9g5zOzaHLkHiQMFGr0= 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/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20201214224949-b6c5ce23f027/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= +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/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 h1:bUO6drIvCIsvZ/XFgfxoGFQU/a4Qkh0iAlvUR7vlHJw= k8s.io/klog/v2 v2.30.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +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-20211115234752-e816edb12b65 h1:E3J9oCLlaobFUqsjG9DfKbP2BmgwBL2p7pn0A3dG9W4= k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk= -k8s.io/kubectl v0.22.4 h1:ECUO1QWyZ70DiIKEfgBx+8i9D98uspVOwgc1APs/07w= -k8s.io/kubectl v0.22.4/go.mod h1:ok2qRT6y2Gy4+y+mniJVyUMKeBHP4OWS9Rdtf/QTM5I= +k8s.io/kubectl v0.23.1 h1:gmscOiV4Y4XIRIn14gQBBADoyyVrDZPbxRCTDga4RSA= +k8s.io/kubectl v0.23.1/go.mod h1:Ui7dJKdUludF8yWAOSN7JZEkOuYixX5yF6E6NjoukKE= k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= -k8s.io/metrics v0.22.4/go.mod h1:6F/iwuYb1w2QDCoHkeMFLf4pwHBcYKLm4mPtVHKYrIw= +k8s.io/metrics v0.23.1/go.mod h1:qXvsM1KANrc+ZZeFwj6Phvf0NLiC+d3RwcsLcdGc+xs= 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 h1:wxEMGetGMur3J1xuGLQY7GEQYg9bZxKn3tKo5k/eYcs= k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -oras.land/oras-go v0.4.0/go.mod h1:VJcU+VE4rkclUbum5C0O7deEZbBYnsnpbGSACwTjOcg= +k8s.io/utils v0.0.0-20211116205334-6203023598ed h1:ck1fRPWPJWsMd8ZRFsWc6mh/zHp5fZ/shhbrgPUxDAE= +k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +oras.land/oras-go v1.1.0/go.mod h1:1A7vR/0KknT2UkJVWh+xMi95I/AhK8ZrxrnUSmXN0bQ= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/letsencrypt v0.0.3/go.mod h1:buyQKZ6IXrRnB7TdkHP0RyEybLx18HHyOSoTyoOLqNY= 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.25/go.mod h1:Mlj9PNLmG9bZ6BHFwFKDo5afkpWyUISkb9Me0GnK66I= sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6 h1:fD1pz4yfdADVNfFmcP2aBEtudwUQ1AlLnRBALr33v3s= sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6/go.mod h1:p4QtZmO4uMYipTQNzagwnNoseA6OxSUutVw05NhYDRs= -sigs.k8s.io/kustomize/api v0.8.11/go.mod h1:a77Ls36JdfCWojpUqR6m60pdGY1AYFix4AH83nJtY1g= sigs.k8s.io/kustomize/api v0.10.1 h1:KgU7hfYoscuqag84kxtzKdEC3mKMb99DPI3a0eaV1d0= sigs.k8s.io/kustomize/api v0.10.1/go.mod h1:2FigT1QN6xKdcnGS2Ppp1uIWrtWN28Ms8A3OZUZhwr8= -sigs.k8s.io/kustomize/cmd/config v0.9.13/go.mod h1:7547FLF8W/lTaDf0BDqFTbZxM9zqwEJqCKN9sSR0xSs= -sigs.k8s.io/kustomize/kustomize/v4 v4.2.0/go.mod h1:MOkR6fmhwG7hEDRXBYELTi5GSFcLwfqwzTRHW3kv5go= -sigs.k8s.io/kustomize/kyaml v0.11.0/go.mod h1:GNMwjim4Ypgp/MueD3zXHLRJEjz7RvtPae0AwlvEMFM= +sigs.k8s.io/kustomize/cmd/config v0.10.2/go.mod h1:K2aW7nXJ0AaT+VA/eO0/dzFLxmpFcTzudmAgDwPY1HQ= +sigs.k8s.io/kustomize/kustomize/v4 v4.4.1/go.mod h1:qOKJMMz2mBP+vcS7vK+mNz4HBLjaQSWRY22EF6Tb7Io= sigs.k8s.io/kustomize/kyaml v0.13.0 h1:9c+ETyNfSrVhxvphs+K2dzT3dh5oVPPEqPOE/cUpScY= sigs.k8s.io/kustomize/kyaml v0.13.0/go.mod h1:FTJxEZ86ScK184NpGSAQcfEqee0nul8oLCK30D47m4E= +sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= 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 h1:Hr/htKFmJEbtMgS/UD0N+gtgctAqz81t3nu+sPzynno= 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.1 h1:bKCqE9GvQ5tiVHn5rfn1r+yao3aLQEaLzkkmAkf+A6Y= +sigs.k8s.io/structured-merge-diff/v4 v4.2.1/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= 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= diff --git a/internal/action/process.go b/internal/action/process.go index 5eed90ccf5..28f3cbfde6 100644 --- a/internal/action/process.go +++ b/internal/action/process.go @@ -11,6 +11,7 @@ import ( "time" "github.com/cenkalti/backoff/v4" + "github.com/elastic/e2e-testing/internal/common" "github.com/elastic/e2e-testing/internal/deploy" "github.com/elastic/e2e-testing/internal/utils" "github.com/shirou/gopsutil/v3/process" @@ -43,6 +44,11 @@ func AttachActionWaitProcess(deploy deploy.Deployment, service deploy.ServiceReq // Run executes the command func (a *actionWaitProcess) Run(ctx context.Context) (string, error) { + if a.service.IsContainer { + // when we run the tests in a container, we need to execute the command inside the container + return runInContainer(ctx, a) + } + exp := utils.GetExponentialBackOff(a.opts.MaxTimeout) pidState := "stopped" @@ -114,3 +120,189 @@ func (a *actionWaitProcess) Run(ctx context.Context) (string, error) { return "", nil } + +// runInContainer restored from https://github.com/elastic/e2e-testing/pull/1740, it executes +// pgrep in the target container defined by the service of the actionWaitProcess +func runInContainer(ctx context.Context, a *actionWaitProcess) (string, error) { + log.WithFields(log.Fields{ + "desiredState": a.opts.DesiredState, + "occurrences": a.opts.Occurrences, + "process": a.opts.Process, + }).Trace("Checking for container") + + exp := utils.GetExponentialBackOff(a.opts.MaxTimeout) + + mustBePresent := false + if a.opts.DesiredState == "started" { + mustBePresent = true + } + retryCount := 1 + + processStatus := func() error { + log.WithFields(log.Fields{ + "desiredState": a.opts.DesiredState, + "occurrences": a.opts.Occurrences, + "process": a.opts.Process, + }).Trace("Checking process desired state on the container") + + // pgrep -d: -d, --delimiter specify output delimiter + //i.e. "pgrep -d , metricbeat": 483,519 + cmds := []string{"pgrep", "-d", ",", a.opts.Process} + output, err := a.deploy.ExecIn(ctx, deploy.NewServiceRequest(common.FleetProfileName), a.service, cmds) + if err != nil { + if !mustBePresent && a.opts.Occurrences == 0 { + log.WithFields(log.Fields{ + "cmds": cmds, + "desiredState": a.opts.DesiredState, + "elapsedTime": exp.GetElapsedTime(), + "error": err, + "service": a.service, + "mustBePresent": mustBePresent, + "occurrences": a.opts.Occurrences, + "process": a.opts.Process, + "retry": retryCount, + }).Warn("Process is not present and number of occurences is 0") + return nil + } + + log.WithFields(log.Fields{ + "cmds": cmds, + "desiredState": a.opts.DesiredState, + "elapsedTime": exp.GetElapsedTime(), + "error": err, + "service": a.service, + "mustBePresent": mustBePresent, + "occurrences": a.opts.Occurrences, + "process": a.opts.Process, + "retry": retryCount, + }).Warn("Could not get number of processes in the container") + + retryCount++ + + return err + } + + // tokenize the pids to get each pid's state, adding them to an array if they match the desired state + // From Split docs: + // If output does not contain sep and sep is not empty, Split returns a + // slice of length 1 whose only element is s, that's why we first initialise to the empty array + pids := strings.Split(output, ",") + if len(pids) == 1 && pids[0] == "" { + pids = []string{} + } + + log.WithFields(log.Fields{ + "count": len(pids), + "desiredState": a.opts.DesiredState, + "mustBePresent": mustBePresent, + "pids": pids, + "process": a.opts.Process, + }).Tracef("Pids for process found") + + desiredStatePids := []string{} + + for _, pid := range pids { + pidStateCmds := []string{"ps", "-q", pid, "-o", "state", "--no-headers"} + pidState, err := a.deploy.ExecIn(ctx, deploy.NewServiceRequest(common.FleetProfileName), a.service, pidStateCmds) + if err != nil { + log.WithFields(log.Fields{ + "cmds": cmds, + "desiredState": a.opts.DesiredState, + "elapsedTime": exp.GetElapsedTime(), + "error": err, + "service": a.service, + "mustBePresent": mustBePresent, + "occurrences": a.opts.Occurrences, + "pid": pid, + "process": a.opts.Process, + "retry": retryCount, + }).Warn("Could not check pid status in the container") + + retryCount++ + + return err + } + + log.WithFields(log.Fields{ + "desiredState": a.opts.DesiredState, + "mustBePresent": mustBePresent, + "pid": pid, + "pidState": pidState, + "process": a.opts.Process, + }).Tracef("Checking if process is in the S state") + + // if the process must be present, then check for the S state + // From 'man ps': + // D uninterruptible sleep (usually IO) + // R running or runnable (on run queue) + // S interruptible sleep (waiting for an event to complete) + // T stopped by job control signal + // t stopped by debugger during the tracing + // W paging (not valid since the 2.6.xx kernel) + // X dead (should never be seen) + // Z defunct ("zombie") process, terminated but not reaped by its parent + if mustBePresent && pidState == "S" { + desiredStatePids = append(desiredStatePids, pid) + } else if !mustBePresent { + desiredStatePids = append(desiredStatePids, pid) + } + } + + occurrencesMatched := (len(desiredStatePids) == a.opts.Occurrences) + + // both true or both false + if mustBePresent == occurrencesMatched { + log.WithFields(log.Fields{ + "desiredOccurrences": a.opts.Occurrences, + "desiredState": a.opts.DesiredState, + "service": a.service, + "mustBePresent": mustBePresent, + "occurrences": len(desiredStatePids), + "process": a.opts.Process, + }).Infof("Process desired state checked") + + return nil + } + + if mustBePresent { + err = fmt.Errorf("%s process is not running in the container with the desired number of occurrences (%d) yet", a.opts.Process, a.opts.Occurrences) + log.WithFields(log.Fields{ + "desiredOccurrences": a.opts.Occurrences, + "desiredState": a.opts.DesiredState, + "elapsedTime": exp.GetElapsedTime(), + "error": err, + "service": a.service, + "occurrences": len(desiredStatePids), + "process": a.opts.Process, + "retry": retryCount, + }).Warn(err.Error()) + + retryCount++ + + return err + } + + err = fmt.Errorf("%s process is still running in the container", a.opts.Process) + log.WithFields(log.Fields{ + "desiredOccurrences": a.opts.Occurrences, + "elapsedTime": exp.GetElapsedTime(), + "error": err, + "service": a.service, + "occurrences": len(desiredStatePids), + "process": a.opts.Process, + "state": a.opts.DesiredState, + "retry": retryCount, + }).Warn(err.Error()) + + retryCount++ + + return err + } + + err := backoff.Retry(processStatus, exp) + if err != nil { + return "", err + } + + return "", nil +} diff --git a/internal/deploy/base.go b/internal/deploy/base.go index efbcc5f834..fadd9a22de 100644 --- a/internal/deploy/base.go +++ b/internal/deploy/base.go @@ -39,8 +39,9 @@ type ServiceOperator interface { Logs(ctx context.Context) error Postinstall(ctx context.Context) error Preinstall(ctx context.Context) error - Start(ctx context.Context) error // will start a service - Stop(ctx context.Context) error // will stop a service + Restart(ctx context.Context) error // will restart a service + Start(ctx context.Context) error // will start a service + Stop(ctx context.Context) error // will stop a service Uninstall(ctx context.Context) error } @@ -77,6 +78,7 @@ type ServiceRequest struct { Name string BackgroundProcesses []string // optional, configured using builder method to add processes that must be installed in the service Flavour string // optional, configured using builder method + IsContainer bool // optional, set to true when the service is backed by a container Scale int // default: 1 WaitStrategies []WaitForServiceRequest // wait strategies for the service } @@ -91,6 +93,15 @@ func NewServiceRequest(n string) ServiceRequest { } } +// NewServiceContainerRequest creates a request for a service +func NewServiceContainerRequest(n string) ServiceRequest { + srv := NewServiceRequest(n) + + srv.IsContainer = true + + return srv +} + // GetName returns the name of the service request, including flavour if needed func (sr ServiceRequest) GetName() string { serviceIncludingFlavour := sr.Name diff --git a/internal/deploy/base_test.go b/internal/deploy/base_test.go index 0326fcf014..44594b8cfa 100644 --- a/internal/deploy/base_test.go +++ b/internal/deploy/base_test.go @@ -47,6 +47,20 @@ func Test_New(t *testing.T) { }) } +func Test_ServiceRequest(t *testing.T) { + t.Run("ServiceRequest as service", func(t *testing.T) { + srv := NewServiceRequest("foo") + + assert.False(t, srv.IsContainer, "Service should not be a container") + }) + + t.Run("ServiceRequest as container", func(t *testing.T) { + srv := NewServiceContainerRequest("foo") + + assert.True(t, srv.IsContainer, "Service should be a container") + }) +} + func Test_ServiceRequest_GetName(t *testing.T) { t.Run("ServiceRequest without flavour", func(t *testing.T) { srv := NewServiceRequest("foo") diff --git a/internal/elasticsearch/client.go b/internal/elasticsearch/client.go index b5c8b71088..324b00b8c0 100644 --- a/internal/elasticsearch/client.go +++ b/internal/elasticsearch/client.go @@ -137,7 +137,7 @@ func getElasticsearchClient(ctx context.Context) (*es.Client, error) { func getElasticsearchClientFromHostPort(ctx context.Context, host string, port int, scheme string) (*es.Client, error) { cfg := es.Config{ Addresses: []string{fmt.Sprintf("%s://%s:%d", scheme, host, port)}, - Username: "elastic", + Username: "admin", Password: shell.GetEnv("ELASTICSEARCH_PASSWORD", "changeme"), } @@ -160,6 +160,112 @@ func getElasticsearchClientFromHostPort(ctx context.Context, host string, port i return esClient, nil } +// SecurityTokenResponse wraps a security token result +type SecurityTokenResponse struct { + AccessToken string `json:"access_token"` + Authentication struct { + Realm struct { + Name string `json:"name"` + Type string `json:"type"` + } `json:"authentication_realm"` + Type string `json:"authentication_type"` + Email string `json:"email"` + Enabled bool `json:"enabled"` + FullName bool `json:"full_name"` + LookupRealm struct { + Name string `json:"name"` + Type string `json:"type"` + } `json:"lookup_realm"` + Metadata struct { + Reserved string `json:"_reserved"` + } `json:"lookup_realm"` + Roles []string `json:"roles"` + Username string `json:"username"` + } `json:"authentication"` + ExpiresIn int `json:"expires_in"` + Type string `json:"type"` +} + +// SecurityTokenRequest payload for requesting a security token +type SecurityTokenRequest struct { + GrantType string `json:"grant_type"` +} + +// GetAPIToken retrieves an OAuth API token +func GetAPIToken(ctx context.Context) (SecurityTokenResponse, error) { + span, _ := apm.StartSpanOptions(ctx, "Get API Token", "elasticsearch.security.get-token", apm.SpanOptions{ + Parent: apm.SpanFromContext(ctx).TraceContext(), + }) + defer span.End() + + result := SecurityTokenResponse{} + + esClient, err := getElasticsearchClient(ctx) + if err != nil { + return result, err + } + + securityToken := SecurityTokenRequest{ + GrantType: "client_credentials", + } + + log.WithFields(log.Fields{ + "tokenRequest": securityToken, + }).Debug("Retrieving Elasticsearch's API token") + + var buf bytes.Buffer + err = json.NewEncoder(&buf).Encode(securityToken) + if err != nil { + log.WithFields(log.Fields{ + "error": err, + }).Error("Error decoding Security Token struct") + + return result, err + } + + res, err := esClient.Security.GetToken(&buf) + if err != nil { + log.WithFields(log.Fields{ + "error": err, + }).Error("Error retrieving security token from Elasticsearch") + + return result, err + } + defer res.Body.Close() + + if res.IsError() { + var e map[string]interface{} + if err := json.NewDecoder(res.Body).Decode(&e); err != nil { + log.WithFields(log.Fields{ + "error": err, + }).Error("Error parsing error response body from Elasticsearch") + + return result, err + } + + err := fmt.Errorf( + "error getting response from Elasticsearch. Status: %s, ResponseError: %v", + res.Status(), e) + + return result, err + } + + if err := json.NewDecoder(res.Body).Decode(&result); err != nil { + log.WithFields(log.Fields{ + "error": err, + }).Error("Error parsing response body from Elasticsearch") + + return result, err + } + + log.WithFields(log.Fields{ + "status": res.Status(), + "result": result, + }).Debug("API Token retrieved from Elasticsearch") + + return result, nil +} + // Search provide search interface to ES func Search(ctx context.Context, indexName string, query map[string]interface{}) (SearchResult, error) { span, _ := apm.StartSpanOptions(ctx, "Search", "elasticsearch.search", apm.SpanOptions{ @@ -290,6 +396,60 @@ func WaitForElasticsearch(ctx context.Context, maxTimeoutMinutes time.Duration) return true, nil } +// WaitForClusterHealth waits for the elasticsearch cluster to be healthy +func WaitForClusterHealth(ctx context.Context) error { + span, _ := apm.StartSpanOptions(ctx, "ClusterHealth", "elasticsearch.cluster.health", apm.SpanOptions{ + Parent: apm.SpanFromContext(ctx).TraceContext(), + }) + defer span.End() + + esClient, err := getElasticsearchClient(ctx) + if err != nil { + return err + } + + exp := utils.GetExponentialBackOff(60 * time.Second) + + retryCount := 1 + + healthFunction := func() error { + response, err := esClient.Cluster.Health() + if err != nil { + log.WithFields(log.Fields{ + "error": err, + "retry": retryCount, + "elapsedTime": exp.GetElapsedTime(), + }).Warn("The Elasticsearch Cluster Health API is not available yet") + + retryCount++ + + return err + } + + log.WithFields(log.Fields{ + "retries": retryCount, + "response": response, + "elapsedTime": exp.GetElapsedTime(), + }).Trace("The Elasticsearch Cluster Health API is available") + + if response.StatusCode != 200 { + log.WithFields(log.Fields{ + "retries": retryCount, + "statusCode": response.StatusCode, + "elapsedTime": exp.GetElapsedTime(), + }).Warn("The Elasticsearch Cluster is not healthy yet. Retrying") + + retryCount++ + + return fmt.Errorf("the Elasticsearch Cluster is not healthy yet. Retrying") + } + + return nil + } + + return backoff.Retry(healthFunction, exp) +} + // WaitForIndices waits for the elasticsearch indices to return the list of indices. func WaitForIndices() (string, error) { exp := utils.GetExponentialBackOff(60 * time.Second) @@ -302,7 +462,7 @@ func WaitForIndices() (string, error) { r := curl.HTTPRequest{ URL: fmt.Sprintf("%s://%s:%d/_cat/indices?v", esEndpoint.Scheme, esEndpoint.Host, esEndpoint.Port), BasicAuthPassword: shell.GetEnv("ELASTICSEARCH_PASSWORD", "changeme"), - BasicAuthUser: "elastic", + BasicAuthUser: "admin", } response, err := curl.Get(r) diff --git a/internal/installer/base.go b/internal/installer/base.go index 07c4c6c4de..145d5ad9eb 100644 --- a/internal/installer/base.go +++ b/internal/installer/base.go @@ -95,6 +95,23 @@ func systemCtlPostInstall(ctx context.Context, linux string, artifact string, ex return nil } +func systemCtlRestart(ctx context.Context, linux string, artifact string, execFn func(ctx context.Context, args []string) (string, error)) error { + cmds := systemd.RestartCmds(artifact) + span, _ := apm.StartSpanOptions(ctx, "Restarting "+artifact+" service", artifact+"."+linux+".restart", apm.SpanOptions{ + Parent: apm.SpanFromContext(ctx).TraceContext(), + }) + span.Context.SetLabel("arguments", cmds) + span.Context.SetLabel("artifact", artifact) + span.Context.SetLabel("linux", linux) + defer span.End() + + _, err := execFn(ctx, cmds) + if err != nil { + return err + } + return nil +} + func systemCtlStart(ctx context.Context, linux string, artifact string, execFn func(ctx context.Context, args []string) (string, error)) error { cmds := systemd.StartCmds(artifact) span, _ := apm.StartSpanOptions(ctx, "Starting "+artifact+" service", artifact+"."+linux+".start", apm.SpanOptions{ diff --git a/internal/installer/elasticagent_deb.go b/internal/installer/elasticagent_deb.go index f26e58814e..0fa8c2f6bd 100644 --- a/internal/installer/elasticagent_deb.go +++ b/internal/installer/elasticagent_deb.go @@ -181,6 +181,21 @@ func (i *elasticAgentDEBPackage) Preinstall(ctx context.Context) error { return installArtifactFn(ctx, "elastic-agent") } +// Restart will restart a service +func (i *elasticAgentDEBPackage) Restart(ctx context.Context) error { + for _, bp := range i.service.BackgroundProcesses { + if strings.EqualFold(bp, "filebeat") || strings.EqualFold(bp, "metricbeat") { + // restart the dependant binary first + err := systemCtlRestart(ctx, "debian", bp, i.Exec) + if err != nil { + return err + } + } + } + + return systemCtlRestart(ctx, "debian", "elastic-agent", i.Exec) +} + // Start will start a service func (i *elasticAgentDEBPackage) Start(ctx context.Context) error { for _, bp := range i.service.BackgroundProcesses { diff --git a/internal/installer/elasticagent_docker.go b/internal/installer/elasticagent_docker.go index 5b7dbd9040..bc0d3f66c0 100644 --- a/internal/installer/elasticagent_docker.go +++ b/internal/installer/elasticagent_docker.go @@ -126,6 +126,22 @@ func (i *elasticAgentDockerPackage) Preinstall(ctx context.Context) error { ) } +// Restart will restart a service +func (i *elasticAgentDockerPackage) Restart(ctx context.Context) error { + cmds := []string{"systemctl", "restart", "elastic-agent"} + span, _ := apm.StartSpanOptions(ctx, "Restarting Elastic Agent service", "elastic-agent.docker.restart", apm.SpanOptions{ + Parent: apm.SpanFromContext(ctx).TraceContext(), + }) + span.Context.SetLabel("arguments", cmds) + defer span.End() + + _, err := i.Exec(ctx, cmds) + if err != nil { + return err + } + return nil +} + // Start will start a service func (i *elasticAgentDockerPackage) Start(ctx context.Context) error { cmds := []string{"systemctl", "start", "elastic-agent"} diff --git a/internal/installer/elasticagent_rpm.go b/internal/installer/elasticagent_rpm.go index 8c69e09c79..b25c4b8686 100644 --- a/internal/installer/elasticagent_rpm.go +++ b/internal/installer/elasticagent_rpm.go @@ -185,6 +185,21 @@ func (i *elasticAgentRPMPackage) Preinstall(ctx context.Context) error { return installArtifactFn(ctx, "elastic-agent") } +// Restart will restart a service +func (i *elasticAgentRPMPackage) Restart(ctx context.Context) error { + for _, bp := range i.service.BackgroundProcesses { + if strings.EqualFold(bp, "filebeat") || strings.EqualFold(bp, "metricbeat") { + // start the dependant binary first + err := systemCtlRestart(ctx, "centos", bp, i.Exec) + if err != nil { + return err + } + } + } + + return systemCtlRestart(ctx, "centos", "elastic-agent", i.Exec) +} + // Start will start a service func (i *elasticAgentRPMPackage) Start(ctx context.Context) error { for _, bp := range i.service.BackgroundProcesses { diff --git a/internal/installer/elasticagent_tar.go b/internal/installer/elasticagent_tar.go index 28c435bba7..1cb1a67334 100644 --- a/internal/installer/elasticagent_tar.go +++ b/internal/installer/elasticagent_tar.go @@ -142,7 +142,7 @@ func (i *elasticAgentTARPackage) Preinstall(ctx context.Context) error { return err } - _, err = i.Exec(ctx, []string{"tar", "-xvf", binaryPath}) + _, err = i.Exec(ctx, []string{"tar", "-zxf", binaryPath}) if err != nil { return err } @@ -169,6 +169,22 @@ func (i *elasticAgentTARPackage) Preinstall(ctx context.Context) error { } +// Restart will restart a service +func (i *elasticAgentTARPackage) Restart(ctx context.Context) error { + cmds := []string{"systemctl", "restart", "elastic-agent"} + span, _ := apm.StartSpanOptions(ctx, "Restarting Elastic Agent service", "elastic-agent.tar.restart", apm.SpanOptions{ + Parent: apm.SpanFromContext(ctx).TraceContext(), + }) + span.Context.SetLabel("arguments", cmds) + defer span.End() + + _, err := i.Exec(ctx, cmds) + if err != nil { + return err + } + return nil +} + // Start will start a service func (i *elasticAgentTARPackage) Start(ctx context.Context) error { cmds := []string{"systemctl", "start", "elastic-agent"} diff --git a/internal/installer/elasticagent_tar_macos.go b/internal/installer/elasticagent_tar_macos.go index e3b1ec3761..0a7d95a636 100644 --- a/internal/installer/elasticagent_tar_macos.go +++ b/internal/installer/elasticagent_tar_macos.go @@ -130,7 +130,7 @@ func (i *elasticAgentTARDarwinPackage) Preinstall(ctx context.Context) error { return err } - _, err = i.Exec(ctx, []string{"tar", "-xvf", binaryPath}) + _, err = i.Exec(ctx, []string{"tar", "-zxf", binaryPath}) if err != nil { return err } @@ -140,6 +140,15 @@ func (i *elasticAgentTARDarwinPackage) Preinstall(ctx context.Context) error { return nil } +// Restart will restart a service +func (i *elasticAgentTARDarwinPackage) Restart(ctx context.Context) error { + err := i.Stop(ctx) + if err != nil { + return err + } + return i.Start(ctx) +} + // Start will start a service func (i *elasticAgentTARDarwinPackage) Start(ctx context.Context) error { cmds := []string{"launchctl", "start", "elastic-agent"} diff --git a/internal/installer/elasticagent_zip.go b/internal/installer/elasticagent_zip.go index 06ebddf191..b54abd676b 100644 --- a/internal/installer/elasticagent_zip.go +++ b/internal/installer/elasticagent_zip.go @@ -143,6 +143,11 @@ func (i *elasticAgentZIPPackage) Preinstall(ctx context.Context) error { return nil } +// Restart will restart a service +func (i *elasticAgentZIPPackage) Restart(ctx context.Context) error { + return nil +} + // Start will start a service func (i *elasticAgentZIPPackage) Start(ctx context.Context) error { return nil diff --git a/internal/kibana/client.go b/internal/kibana/client.go index ab5e79827b..2d5adff849 100644 --- a/internal/kibana/client.go +++ b/internal/kibana/client.go @@ -30,7 +30,7 @@ type Client struct { // NewClient creates a new instance of the client. func NewClient() (*Client, error) { host := getBaseURL() - username := "elastic" + username := "admin" password := shell.GetEnv("KIBANA_PASSWORD", "changeme") return &Client{ diff --git a/internal/kibana/fleet.go b/internal/kibana/fleet.go index 0ce66c7df5..a8024eea86 100644 --- a/internal/kibana/fleet.go +++ b/internal/kibana/fleet.go @@ -76,7 +76,7 @@ func NewFleetConfig(token string) (*FleetConfig, error) { // Flags bootstrap flags for fleet server func (cfg FleetConfig) Flags() []string { flags := []string{ - "-e", "-v", "--force", "--insecure", "--enrollment-token=" + cfg.EnrollmentToken, + "--e", "--force", "--insecure", "--enrollment-token=" + cfg.EnrollmentToken, "--url", cfg.FleetServerURL(), } diff --git a/internal/kibana/integrations.go b/internal/kibana/integrations.go index e5480bdf3f..7426c17633 100644 --- a/internal/kibana/integrations.go +++ b/internal/kibana/integrations.go @@ -69,7 +69,7 @@ func (c *Client) AddIntegrationToPolicy(ctx context.Context, packageDS PackageDa "elapsedTime": exp.GetElapsedTime(), "err": err, "statusCode": statusCode, - "response": respBody, + "response": string(respBody), "package": packageDS, "retry": retryCount, }).Warn("could not add package to policy because of HTTP code is not 200") diff --git a/internal/kibana/policies.go b/internal/kibana/policies.go index 4867869eaf..797e82e4c8 100644 --- a/internal/kibana/policies.go +++ b/internal/kibana/policies.go @@ -193,12 +193,12 @@ type DataStream struct { // Input represents a package-level input. type Input struct { - Type string `json:"type"` - Enabled bool `json:"enabled"` - Streams []interface{} `json:"streams"` - Vars Vars `json:"vars,omitempty"` - Config interface{} `json:"config,omitempty"` - CompiledStream interface{} `json:"compiled_stream,omitempty"` + Type string `json:"type"` + Enabled bool `json:"enabled"` + Streams []Stream `json:"streams,omitempty"` + Vars Vars `json:"vars,omitempty"` + Config interface{} `json:"config,omitempty"` + CompiledStream interface{} `json:"compiled_stream,omitempty"` } // PackageDataStream represents a request to add a single package's single data stream to a @@ -215,6 +215,14 @@ type PackageDataStream struct { Package IntegrationPackage `json:"package"` } +// Stream represents a stream for an input +type Stream struct { + DS DataStream `json:"data_stream"` + Enabled bool `json:"enabled"` + ID string `json:"id"` + Vars Vars `json:"vars,omitempty"` +} + // ListPackagePolicies return list of package policies func (c *Client) ListPackagePolicies(ctx context.Context) ([]PackageDataStream, error) { span, _ := apm.StartSpanOptions(ctx, "Listing package policies", "fleet.package-policies.items", apm.SpanOptions{