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{