From 8796d06b8ffed6cf12bd6190389cb67167f39c6a Mon Sep 17 00:00:00 2001 From: Enrico Donnici Date: Thu, 21 May 2026 11:15:00 +0200 Subject: [PATCH 1/6] Fix Cilium e2e metric readiness (#23760) * Fix Cilium e2e metric readiness * Refine Cilium metric readiness wait * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- cilium/tests/conftest.py | 55 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 52 insertions(+), 3 deletions(-) diff --git a/cilium/tests/conftest.py b/cilium/tests/conftest.py index caa56b731ba88..d51115661523b 100644 --- a/cilium/tests/conftest.py +++ b/cilium/tests/conftest.py @@ -9,6 +9,7 @@ from datadog_checks.base.utils.common import get_docker_hostname from datadog_checks.cilium import CiliumCheck from datadog_checks.dev import run_command +from datadog_checks.dev.conditions import WaitFor from datadog_checks.dev.kind import kind_run from datadog_checks.dev.kube_port_forward import port_forward from datadog_checks.dev.utils import get_active_env @@ -110,9 +111,11 @@ def setup_cilium(): ) if result.stderr: raise Exception(result.stderr) - pods = result.stdout.split(" ") + cilium_pods = result.stdout.split() + if not cilium_pods: + raise AssertionError("No Cilium pods found") - for pod in pods: + for pod in cilium_pods: result = run_command( [ "kubectl", @@ -121,7 +124,7 @@ def setup_cilium(): "cilium", "-c", "cilium-agent", - pod.strip(), + pod, "--", "cilium", "endpoint", @@ -132,6 +135,52 @@ def setup_cilium(): if result.stderr: raise Exception(result.stderr) + WaitFor( + wait_for_cilium_metric_families, + attempts=60, + wait=2, + args=( + cilium_pods, + [ + "cilium_forward_bytes_total", + "cilium_forward_count_total", + "cilium_endpoint_regeneration_time_stats_seconds", + "cilium_policy_regeneration_time_stats_seconds", + ], + ), + )() + + +def wait_for_cilium_metric_families(pods, families): + missing = [] + for pod in pods: + for family in families: + result = run_command( + [ + "kubectl", + "exec", + "-n", + "cilium", + "-c", + "cilium-agent", + pod, + "--", + "cilium", + "metrics", + "list", + "--match-pattern", + family, + ], + capture=True, + ) + if result.code != 0: + raise Exception(result.stderr or result.stdout) + if family not in result.stdout: + missing.append("{} on {}".format(family, pod)) + + if missing: + raise AssertionError("Cilium metric families are not available yet: {}".format(", ".join(missing))) + def get_instances(agent_host, agent_port, operator_host, operator_port, use_openmetrics): return { From f8c173d698ff497da45f556ed5d0716838067e7e Mon Sep 17 00:00:00 2001 From: Juanpe Araque Date: Thu, 21 May 2026 10:48:09 +0100 Subject: [PATCH 2/6] Clarify the qa-label check refers to the Agent release cycle (#23784) * Spell out that the qa-label check refers to the Agent release cycle * Add changelog entry * Use the fixed changelog type for a zero-impact wording change * Inline the long error string so ruff 0.11.10 stops complaining --- ddev/changelog.d/23784.fixed | 1 + ddev/src/ddev/cli/validate/all/orchestrator.py | 2 +- ddev/src/ddev/cli/validate/qa_label.py | 18 ++++++++++-------- ddev/tests/cli/validate/test_qa_label.py | 6 +++--- 4 files changed, 15 insertions(+), 12 deletions(-) create mode 100644 ddev/changelog.d/23784.fixed diff --git a/ddev/changelog.d/23784.fixed b/ddev/changelog.d/23784.fixed new file mode 100644 index 0000000000000..824ff0132be1a --- /dev/null +++ b/ddev/changelog.d/23784.fixed @@ -0,0 +1 @@ +Reword the `qa-label` validation messages to make explicit that the check refers to the Datadog Agent release cycle. diff --git a/ddev/src/ddev/cli/validate/all/orchestrator.py b/ddev/src/ddev/cli/validate/all/orchestrator.py index ba654708402cc..3ed7b21439293 100644 --- a/ddev/src/ddev/cli/validate/all/orchestrator.py +++ b/ddev/src/ddev/cli/validate/all/orchestrator.py @@ -105,7 +105,7 @@ class ValidationConfig: description="Validate Python package metadata and naming", ), "qa-label": ValidationConfig( - description="Validate the pull request declares a QA decision label", + description="Validate the pull request declares whether it needs QA for the next Agent release", repo_wide=True, ), "readmes": ValidationConfig( diff --git a/ddev/src/ddev/cli/validate/qa_label.py b/ddev/src/ddev/cli/validate/qa_label.py index aa958bd2a53ca..c94968f6e6c12 100644 --- a/ddev/src/ddev/cli/validate/qa_label.py +++ b/ddev/src/ddev/cli/validate/qa_label.py @@ -19,10 +19,12 @@ REQUIRED_LABELS: frozenset[str] = frozenset({'qa/skip-qa', 'qa/required'}) HELP_MESSAGE = ( - "Every pull request must declare its QA expectation by setting exactly one of:\n" - " - 'qa/required' if this PR ships changes that need to be validated during QA.\n" - " - 'qa/skip-qa' if this PR does not need QA validation (e.g., docs, tests, " - "developer tooling, or no agent-impacting changes).\n" + "Every pull request must declare whether its changes require QA validation as part of " + "the next Datadog Agent release by setting exactly one of:\n" + " - 'qa/required' if this PR ships Agent-impacting changes that must be validated " + "during the QA phase of the next Agent release.\n" + " - 'qa/skip-qa' if this PR has no impact on the Agent release (e.g., docs, tests, " + "developer tooling, or changes that don't ship with the Agent).\n" ) @@ -34,7 +36,7 @@ def _is_fork_pr(app: Application, event: PullRequestEvent) -> bool: return head_repo != base_repo -@click.command(short_help='Validate the QA decision label on the current pull request') +@click.command(short_help='Validate the Agent-release QA decision label on the current pull request') @click.pass_obj def qa_label(app: Application): """Fail unless the current pull request has exactly one QA decision label. @@ -72,13 +74,13 @@ def qa_label(app: Application): qa_labels = sorted(set(labels) & REQUIRED_LABELS) if len(qa_labels) == 1: - app.display_success(f'QA label set: {qa_labels[0]}') + app.display_success(f'Agent-release QA label set: {qa_labels[0]}') return if not qa_labels: - app.display_error(f'No QA decision label set on PR #{pr_number}.') + app.display_error(f'PR #{pr_number} is missing an Agent-release QA decision label.') else: - app.display_error(f'PR #{pr_number} has more than one QA decision label: {", ".join(qa_labels)}.') + app.display_error(f'PR #{pr_number} has more than one Agent-release QA decision label: {", ".join(qa_labels)}.') app.display_info(HELP_MESSAGE) app.abort() diff --git a/ddev/tests/cli/validate/test_qa_label.py b/ddev/tests/cli/validate/test_qa_label.py index 312b5a53d2553..0b88feb2b48ae 100644 --- a/ddev/tests/cli/validate/test_qa_label.py +++ b/ddev/tests/cli/validate/test_qa_label.py @@ -50,7 +50,7 @@ def test_passes_with_exactly_one_qa_label(ddev, pr_context, mocker, label): result = ddev('validate', 'qa-label') assert result.exit_code == 0, result.output - assert 'QA label set' in result.output + assert 'Agent-release QA label set' in result.output def test_fails_when_no_qa_label(ddev, pr_context, mocker): @@ -59,7 +59,7 @@ def test_fails_when_no_qa_label(ddev, pr_context, mocker): result = ddev('validate', 'qa-label') assert result.exit_code == 1, result.output - assert 'No QA decision label set' in result.output + assert 'missing an Agent-release QA decision label' in result.output assert 'qa/required' in result.output assert 'qa/skip-qa' in result.output @@ -70,7 +70,7 @@ def test_fails_when_both_qa_labels(ddev, pr_context, mocker): result = ddev('validate', 'qa-label') assert result.exit_code == 1, result.output - assert 'more than one QA decision label' in result.output + assert 'more than one Agent-release QA decision label' in result.output def test_skips_outside_pull_request_context(ddev, monkeypatch, mocker): From 4449050c26976bda84b902b37cd7be5950a43b46 Mon Sep 17 00:00:00 2001 From: Adel Haj Hassan <41540817+adel121@users.noreply.github.com> Date: Thu, 21 May 2026 12:19:25 +0200 Subject: [PATCH 3/6] [CONTP-1531] Drop Datadog CSI Driver integration (#23222) * drop csi driver python check in favor of go * drop changelog --------- Co-authored-by: Cursor --- .codecov.yml | 9 - .github/CODEOWNERS | 2 - .github/workflows/test-all.yml | 20 - datadog_csi_driver/CHANGELOG.md | 2 - .../datadog_csi_driver/__about__.py | 4 - .../datadog_csi_driver/__init__.py | 7 - .../datadog_csi_driver/check.py | 28 - .../config_models/__init__.py | 24 - .../config_models/defaults.py | 128 ---- .../config_models/instance.py | 184 ----- .../config_models/shared.py | 45 -- .../config_models/validators.py | 13 - .../datadog_csi_driver/data/auto_conf.yaml | 650 ------------------ .../datadog_csi_driver/data/conf.yaml.example | 610 ---------------- datadog_csi_driver/hatch.toml | 4 - datadog_csi_driver/images/IMAGES_README.md | 41 -- datadog_csi_driver/pyproject.toml | 60 -- datadog_csi_driver/tests/__init__.py | 3 - datadog_csi_driver/tests/common.py | 30 - datadog_csi_driver/tests/conftest.py | 29 - datadog_csi_driver/tests/docker/Caddyfile | 4 - .../tests/docker/docker-compose.yaml | 10 - datadog_csi_driver/tests/fixtures/metrics.txt | 7 - datadog_csi_driver/tests/test_unit.py | 28 - 24 files changed, 1942 deletions(-) delete mode 100644 datadog_csi_driver/datadog_checks/datadog_csi_driver/__about__.py delete mode 100644 datadog_csi_driver/datadog_checks/datadog_csi_driver/__init__.py delete mode 100644 datadog_csi_driver/datadog_checks/datadog_csi_driver/check.py delete mode 100644 datadog_csi_driver/datadog_checks/datadog_csi_driver/config_models/__init__.py delete mode 100644 datadog_csi_driver/datadog_checks/datadog_csi_driver/config_models/defaults.py delete mode 100644 datadog_csi_driver/datadog_checks/datadog_csi_driver/config_models/instance.py delete mode 100644 datadog_csi_driver/datadog_checks/datadog_csi_driver/config_models/shared.py delete mode 100644 datadog_csi_driver/datadog_checks/datadog_csi_driver/config_models/validators.py delete mode 100644 datadog_csi_driver/datadog_checks/datadog_csi_driver/data/auto_conf.yaml delete mode 100644 datadog_csi_driver/datadog_checks/datadog_csi_driver/data/conf.yaml.example delete mode 100644 datadog_csi_driver/hatch.toml delete mode 100644 datadog_csi_driver/images/IMAGES_README.md delete mode 100644 datadog_csi_driver/pyproject.toml delete mode 100644 datadog_csi_driver/tests/__init__.py delete mode 100644 datadog_csi_driver/tests/common.py delete mode 100644 datadog_csi_driver/tests/conftest.py delete mode 100644 datadog_csi_driver/tests/docker/Caddyfile delete mode 100644 datadog_csi_driver/tests/docker/docker-compose.yaml delete mode 100644 datadog_csi_driver/tests/fixtures/metrics.txt delete mode 100644 datadog_csi_driver/tests/test_unit.py diff --git a/.codecov.yml b/.codecov.yml index 49c979786fa41..b54d570280199 100644 --- a/.codecov.yml +++ b/.codecov.yml @@ -802,10 +802,6 @@ coverage: target: 75 flags: - checkpoint_harmony_endpoint - datadog_csi_driver: - target: 75 - flags: - - datadog_csi_driver dcgm: target: 75 flags: @@ -1067,11 +1063,6 @@ flags: paths: - datadog_cluster_agent/datadog_checks/datadog_cluster_agent - datadog_cluster_agent/tests - datadog_csi_driver: - carryforward: true - paths: - - datadog_csi_driver/datadog_checks/datadog_csi_driver - - datadog_csi_driver/tests dcgm: carryforward: true paths: diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 5766eb69c6c42..a4da26086ceb7 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -44,8 +44,6 @@ manifest.json @DataDog/documentation @DataDog/agent-integrations /crio/manifest.json @DataDog/container-integrations @DataDog/agent-integrations @DataDog/documentation /datadog_cluster_agent/ @DataDog/container-integrations @DataDog/agent-integrations /datadog_cluster_agent/*.md @DataDog/container-integrations @DataDog/agent-integrations @DataDog/documentation -/datadog_csi_driver/ @DataDog/container-platform @DataDog/agent-integrations -/datadog_csi_driver/*.md @DataDog/container-platform @DataDog/agent-integrations @DataDog/documentation /datadog_operator/ @DataDog/container-ecosystems @DataDog/agent-integrations /datadog_operator/*.md @DataDog/container-ecosystems @DataDog/agent-integrations @DataDog/documentation /docker_daemon/ @DataDog/container-integrations @DataDog/agent-integrations diff --git a/.github/workflows/test-all.yml b/.github/workflows/test-all.yml index 8a1d4ccb8b92c..0fdcf02cfa0a4 100644 --- a/.github/workflows/test-all.yml +++ b/.github/workflows/test-all.yml @@ -958,26 +958,6 @@ jobs: minimum-base-package: ${{ inputs.minimum-base-package }} pytest-args: ${{ inputs.pytest-args }} secrets: inherit - j58cf93c: - uses: ./.github/workflows/test-target.yml - with: - job-name: datadog_csi_driver - target: datadog_csi_driver - platform: linux - runner: '["ubuntu-22.04"]' - repo: "${{ inputs.repo }}" - context: ${{ inputs.context }} - python-version: "${{ inputs.python-version }}" - latest: ${{ inputs.latest }} - agent-image: "${{ inputs.agent-image }}" - agent-image-py2: "${{ inputs.agent-image-py2 }}" - agent-image-windows: "${{ inputs.agent-image-windows }}" - agent-image-windows-py2: "${{ inputs.agent-image-windows-py2 }}" - test-py2: ${{ inputs.test-py2 }} - test-py3: ${{ inputs.test-py3 }} - minimum-base-package: ${{ inputs.minimum-base-package }} - pytest-args: ${{ inputs.pytest-args }} - secrets: inherit j69f9754: uses: ./.github/workflows/test-target.yml with: diff --git a/datadog_csi_driver/CHANGELOG.md b/datadog_csi_driver/CHANGELOG.md index 5c3350ed8cc75..cc48d4e588c92 100644 --- a/datadog_csi_driver/CHANGELOG.md +++ b/datadog_csi_driver/CHANGELOG.md @@ -1,7 +1,5 @@ # CHANGELOG - datadog_csi_driver - - ## 1.5.1 / 2026-04-15 ***Fixed***: diff --git a/datadog_csi_driver/datadog_checks/datadog_csi_driver/__about__.py b/datadog_csi_driver/datadog_checks/datadog_csi_driver/__about__.py deleted file mode 100644 index 40d4f330b9edb..0000000000000 --- a/datadog_csi_driver/datadog_checks/datadog_csi_driver/__about__.py +++ /dev/null @@ -1,4 +0,0 @@ -# (C) Datadog, Inc. 2025-present -# All rights reserved -# Licensed under a 3-clause BSD style license (see LICENSE) -__version__ = '1.5.1' diff --git a/datadog_csi_driver/datadog_checks/datadog_csi_driver/__init__.py b/datadog_csi_driver/datadog_checks/datadog_csi_driver/__init__.py deleted file mode 100644 index d77cedda99a81..0000000000000 --- a/datadog_csi_driver/datadog_checks/datadog_csi_driver/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -# (C) Datadog, Inc. 2025-present -# All rights reserved -# Licensed under a 3-clause BSD style license (see LICENSE) -from .__about__ import __version__ -from .check import DatadogCSIDriverCheck - -__all__ = ['__version__', 'DatadogCSIDriverCheck'] diff --git a/datadog_csi_driver/datadog_checks/datadog_csi_driver/check.py b/datadog_csi_driver/datadog_checks/datadog_csi_driver/check.py deleted file mode 100644 index fa59eda2dace0..0000000000000 --- a/datadog_csi_driver/datadog_checks/datadog_csi_driver/check.py +++ /dev/null @@ -1,28 +0,0 @@ -# (C) Datadog, Inc. 2025-present -# All rights reserved -# Licensed under a 3-clause BSD style license (see LICENSE) -from datadog_checks.base import OpenMetricsBaseCheckV2 - -METRICS_MAP = [ - { - 'datadog_csi_driver_node_publish_volume_attempts': {'name': 'node_publish_volume_attempts'}, - 'datadog_csi_driver_node_unpublish_volume_attempts': {'name': 'node_unpublish_volume_attempts'}, - } -] - - -class DatadogCSIDriverCheck(OpenMetricsBaseCheckV2): - __NAMESPACE__ = 'datadog.csi_driver' - DEFAULT_METRIC_LIMIT = 0 - - def __init__(self, name, init_config, instances): - super().__init__(name, init_config, instances) - - def get_default_config(self): - return { - 'metrics': METRICS_MAP, - 'openmetrics_endpoint': 'http://localhost:5000/metrics', - } - - def check(self, instance): - super().check(instance) diff --git a/datadog_csi_driver/datadog_checks/datadog_csi_driver/config_models/__init__.py b/datadog_csi_driver/datadog_checks/datadog_csi_driver/config_models/__init__.py deleted file mode 100644 index 4d80b1e478f62..0000000000000 --- a/datadog_csi_driver/datadog_checks/datadog_csi_driver/config_models/__init__.py +++ /dev/null @@ -1,24 +0,0 @@ -# (C) Datadog, Inc. 2025-present -# All rights reserved -# Licensed under a 3-clause BSD style license (see LICENSE) - -# This file is autogenerated. -# To change this file you should edit assets/configuration/spec.yaml and then run the following commands: -# ddev -x validate config -s -# ddev -x validate models -s - -from .instance import InstanceConfig -from .shared import SharedConfig - - -class ConfigMixin: - _config_model_instance: InstanceConfig - _config_model_shared: SharedConfig - - @property - def config(self) -> InstanceConfig: - return self._config_model_instance - - @property - def shared_config(self) -> SharedConfig: - return self._config_model_shared diff --git a/datadog_csi_driver/datadog_checks/datadog_csi_driver/config_models/defaults.py b/datadog_csi_driver/datadog_checks/datadog_csi_driver/config_models/defaults.py deleted file mode 100644 index 05447154da6cf..0000000000000 --- a/datadog_csi_driver/datadog_checks/datadog_csi_driver/config_models/defaults.py +++ /dev/null @@ -1,128 +0,0 @@ -# (C) Datadog, Inc. 2025-present -# All rights reserved -# Licensed under a 3-clause BSD style license (see LICENSE) - -# This file is autogenerated. -# To change this file you should edit assets/configuration/spec.yaml and then run the following commands: -# ddev -x validate config -s -# ddev -x validate models -s - - -def instance_allow_redirects(): - return True - - -def instance_auth_type(): - return 'basic' - - -def instance_cache_metric_wildcards(): - return True - - -def instance_cache_shared_labels(): - return True - - -def instance_collect_counters_with_distributions(): - return False - - -def instance_collect_histogram_buckets(): - return True - - -def instance_disable_generic_tags(): - return False - - -def instance_empty_default_hostname(): - return False - - -def instance_enable_health_service_check(): - return True - - -def instance_enable_legacy_tags_normalization(): - return True - - -def instance_histogram_buckets_as_distributions(): - return False - - -def instance_ignore_connection_errors(): - return False - - -def instance_kerberos_auth(): - return 'disabled' - - -def instance_kerberos_delegate(): - return False - - -def instance_kerberos_force_initiate(): - return False - - -def instance_log_requests(): - return False - - -def instance_min_collection_interval(): - return 15 - - -def instance_non_cumulative_histogram_buckets(): - return False - - -def instance_persist_connections(): - return False - - -def instance_request_size(): - return 16 - - -def instance_skip_proxy(): - return False - - -def instance_tag_by_endpoint(): - return True - - -def instance_telemetry(): - return False - - -def instance_timeout(): - return 10 - - -def instance_tls_ignore_warning(): - return False - - -def instance_tls_use_host_header(): - return False - - -def instance_tls_verify(): - return True - - -def instance_use_latest_spec(): - return False - - -def instance_use_legacy_auth_encoding(): - return True - - -def instance_use_process_start_time(): - return False diff --git a/datadog_csi_driver/datadog_checks/datadog_csi_driver/config_models/instance.py b/datadog_csi_driver/datadog_checks/datadog_csi_driver/config_models/instance.py deleted file mode 100644 index 4290af3c834f5..0000000000000 --- a/datadog_csi_driver/datadog_checks/datadog_csi_driver/config_models/instance.py +++ /dev/null @@ -1,184 +0,0 @@ -# (C) Datadog, Inc. 2025-present -# All rights reserved -# Licensed under a 3-clause BSD style license (see LICENSE) - -# This file is autogenerated. -# To change this file you should edit assets/configuration/spec.yaml and then run the following commands: -# ddev -x validate config -s -# ddev -x validate models -s - -from __future__ import annotations - -from types import MappingProxyType -from typing import Any, Optional, Union - -from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator -from typing_extensions import Literal - -from datadog_checks.base.utils.functions import identity -from datadog_checks.base.utils.models import validation - -from . import defaults, validators - - -SECURE_FIELD_NAMES = frozenset( - ['auth_token', 'kerberos_cache', 'kerberos_keytab', 'tls_ca_cert', 'tls_cert', 'tls_private_key'] -) - - -class AuthToken(BaseModel): - model_config = ConfigDict( - arbitrary_types_allowed=True, - frozen=True, - ) - reader: Optional[MappingProxyType[str, Any]] = None - writer: Optional[MappingProxyType[str, Any]] = None - - -class ExtraMetrics(BaseModel): - model_config = ConfigDict( - arbitrary_types_allowed=True, - extra='allow', - frozen=True, - ) - name: Optional[str] = None - type: Optional[str] = None - - -class MetricPatterns(BaseModel): - model_config = ConfigDict( - arbitrary_types_allowed=True, - frozen=True, - ) - exclude: Optional[tuple[str, ...]] = None - include: Optional[tuple[str, ...]] = None - - -class Metrics(BaseModel): - model_config = ConfigDict( - arbitrary_types_allowed=True, - extra='allow', - frozen=True, - ) - name: Optional[str] = None - type: Optional[str] = None - - -class Proxy(BaseModel): - model_config = ConfigDict( - arbitrary_types_allowed=True, - frozen=True, - ) - http: Optional[str] = None - https: Optional[str] = None - no_proxy: Optional[tuple[str, ...]] = None - - -class ShareLabels(BaseModel): - model_config = ConfigDict( - arbitrary_types_allowed=True, - frozen=True, - ) - labels: Optional[tuple[str, ...]] = None - match: Optional[tuple[str, ...]] = None - - -class InstanceConfig(BaseModel): - model_config = ConfigDict( - validate_default=True, - arbitrary_types_allowed=True, - frozen=True, - ) - allow_redirects: Optional[bool] = None - auth_token: Optional[AuthToken] = None - auth_type: Optional[str] = None - aws_host: Optional[str] = None - aws_region: Optional[str] = None - aws_service: Optional[str] = None - cache_metric_wildcards: Optional[bool] = None - cache_shared_labels: Optional[bool] = None - collect_counters_with_distributions: Optional[bool] = None - collect_histogram_buckets: Optional[bool] = None - connect_timeout: Optional[float] = None - disable_generic_tags: Optional[bool] = None - empty_default_hostname: Optional[bool] = None - enable_health_service_check: Optional[bool] = None - enable_legacy_tags_normalization: Optional[bool] = None - exclude_labels: Optional[tuple[str, ...]] = None - exclude_metrics: Optional[tuple[str, ...]] = None - exclude_metrics_by_labels: Optional[MappingProxyType[str, Union[bool, tuple[str, ...]]]] = None - extra_headers: Optional[MappingProxyType[str, Any]] = None - extra_metrics: Optional[tuple[Union[str, MappingProxyType[str, Union[str, ExtraMetrics]]], ...]] = None - headers: Optional[MappingProxyType[str, Any]] = None - histogram_buckets_as_distributions: Optional[bool] = None - hostname_format: Optional[str] = None - hostname_label: Optional[str] = None - ignore_connection_errors: Optional[bool] = None - ignore_tags: Optional[tuple[str, ...]] = None - include_labels: Optional[tuple[str, ...]] = None - kerberos_auth: Optional[Literal['required', 'optional', 'disabled']] = None - kerberos_cache: Optional[str] = None - kerberos_delegate: Optional[bool] = None - kerberos_force_initiate: Optional[bool] = None - kerberos_hostname: Optional[str] = None - kerberos_keytab: Optional[str] = None - kerberos_principal: Optional[str] = None - log_requests: Optional[bool] = None - metric_patterns: Optional[MetricPatterns] = None - metrics: Optional[tuple[Union[str, MappingProxyType[str, Union[str, Metrics]]], ...]] = None - min_collection_interval: Optional[float] = None - namespace: Optional[str] = Field(None, pattern='\\w*') - non_cumulative_histogram_buckets: Optional[bool] = None - ntlm_domain: Optional[str] = None - openmetrics_endpoint: str - password: Optional[str] = None - persist_connections: Optional[bool] = None - proxy: Optional[Proxy] = None - raw_line_filters: Optional[tuple[str, ...]] = None - raw_metric_prefix: Optional[str] = None - read_timeout: Optional[float] = None - rename_labels: Optional[MappingProxyType[str, Any]] = None - request_size: Optional[float] = None - service: Optional[str] = None - share_labels: Optional[MappingProxyType[str, Union[bool, ShareLabels]]] = None - skip_proxy: Optional[bool] = None - tag_by_endpoint: Optional[bool] = None - tags: Optional[tuple[str, ...]] = None - telemetry: Optional[bool] = None - timeout: Optional[float] = None - tls_ca_cert: Optional[str] = None - tls_cert: Optional[str] = None - tls_ciphers: Optional[tuple[str, ...]] = None - tls_ignore_warning: Optional[bool] = None - tls_private_key: Optional[str] = None - tls_protocols_allowed: Optional[tuple[str, ...]] = None - tls_use_host_header: Optional[bool] = None - tls_verify: Optional[bool] = None - use_latest_spec: Optional[bool] = None - use_legacy_auth_encoding: Optional[bool] = None - use_process_start_time: Optional[bool] = None - username: Optional[str] = None - - @model_validator(mode='before') - def _initial_validation(cls, values): - return validation.core.initialize_config(getattr(validators, 'initialize_instance', identity)(values)) - - @field_validator('*', mode='before') - def _validate(cls, value, info): - field = cls.model_fields[info.field_name] - field_name = field.alias or info.field_name - if field_name in info.context['configured_fields']: - value = getattr(validators, f'instance_{info.field_name}', identity)(value, field=field) - - if info.field_name in SECURE_FIELD_NAMES: - validation.security.check_field_trusted_provider( - info.field_name, value, info.context.get('security_config') - ) - else: - value = getattr(defaults, f'instance_{info.field_name}', lambda: value)() - - return validation.utils.make_immutable(value) - - @model_validator(mode='after') - def _final_validation(cls, model): - return validation.core.check_model(getattr(validators, 'check_instance', identity)(model)) diff --git a/datadog_csi_driver/datadog_checks/datadog_csi_driver/config_models/shared.py b/datadog_csi_driver/datadog_checks/datadog_csi_driver/config_models/shared.py deleted file mode 100644 index 8721d9e284e5f..0000000000000 --- a/datadog_csi_driver/datadog_checks/datadog_csi_driver/config_models/shared.py +++ /dev/null @@ -1,45 +0,0 @@ -# (C) Datadog, Inc. 2025-present -# All rights reserved -# Licensed under a 3-clause BSD style license (see LICENSE) - -# This file is autogenerated. -# To change this file you should edit assets/configuration/spec.yaml and then run the following commands: -# ddev -x validate config -s -# ddev -x validate models -s - -from __future__ import annotations - -from typing import Optional - -from pydantic import BaseModel, ConfigDict, field_validator, model_validator - -from datadog_checks.base.utils.functions import identity -from datadog_checks.base.utils.models import validation - -from . import validators - - -class SharedConfig(BaseModel): - model_config = ConfigDict( - validate_default=True, - arbitrary_types_allowed=True, - frozen=True, - ) - service: Optional[str] = None - - @model_validator(mode='before') - def _initial_validation(cls, values): - return validation.core.initialize_config(getattr(validators, 'initialize_shared', identity)(values)) - - @field_validator('*', mode='before') - def _validate(cls, value, info): - field = cls.model_fields[info.field_name] - field_name = field.alias or info.field_name - if field_name in info.context['configured_fields']: - value = getattr(validators, f'shared_{info.field_name}', identity)(value, field=field) - - return validation.utils.make_immutable(value) - - @model_validator(mode='after') - def _final_validation(cls, model): - return validation.core.check_model(getattr(validators, 'check_shared', identity)(model)) diff --git a/datadog_csi_driver/datadog_checks/datadog_csi_driver/config_models/validators.py b/datadog_csi_driver/datadog_checks/datadog_csi_driver/config_models/validators.py deleted file mode 100644 index 8495a481e5308..0000000000000 --- a/datadog_csi_driver/datadog_checks/datadog_csi_driver/config_models/validators.py +++ /dev/null @@ -1,13 +0,0 @@ -# (C) Datadog, Inc. 2025-present -# All rights reserved -# Licensed under a 3-clause BSD style license (see LICENSE) - -# Here you can include additional config validators or transformers -# -# def initialize_instance(values, **kwargs): -# if 'my_option' not in values and 'my_legacy_option' in values: -# values['my_option'] = values['my_legacy_option'] -# if values.get('my_number') > 10: -# raise ValueError('my_number max value is 10, got %s' % str(values.get('my_number'))) -# -# return values diff --git a/datadog_csi_driver/datadog_checks/datadog_csi_driver/data/auto_conf.yaml b/datadog_csi_driver/datadog_checks/datadog_csi_driver/data/auto_conf.yaml deleted file mode 100644 index 04e4c87ea28d1..0000000000000 --- a/datadog_csi_driver/datadog_checks/datadog_csi_driver/data/auto_conf.yaml +++ /dev/null @@ -1,650 +0,0 @@ -## @param ad_identifiers - list of strings - required -## A list of container identifiers that are used by Autodiscovery to identify -## which container the check should be run against. For more information, see: -## https://docs.datadoghq.com/agent/guide/ad_identifiers/ -# -ad_identifiers: - - csi-driver - -## All options defined here are available to all instances. -# -init_config: - - ## @param proxy - mapping - optional - ## Set HTTP or HTTPS proxies for all instances. Use the `no_proxy` list - ## to specify hosts that must bypass proxies. - ## - ## The SOCKS protocol is also supported like so: - ## - ## socks5://user:pass@host:port - ## - ## Using the scheme `socks5` causes the DNS resolution to happen on the - ## client, rather than on the proxy server. This is in line with `curl`, - ## which uses the scheme to decide whether to do the DNS resolution on - ## the client or proxy. If you want to resolve the domains on the proxy - ## server, use `socks5h` as the scheme. - # - # proxy: - # http: http://: - # https: https://: - # no_proxy: - # - - # - - - ## @param skip_proxy - boolean - optional - default: false - ## If set to `true`, this makes the check bypass any proxy - ## settings enabled and attempt to reach services directly. - # - # skip_proxy: false - - ## @param timeout - number - optional - default: 10 - ## The timeout for connecting to services. - # - # timeout: 10 - - ## @param service - string - optional - ## Attach the tag `service:` to every metric, event, and service check emitted by this integration. - ## - ## Additionally, this sets the default `service` for every log source. - # - # service: - -## Every instance is scheduled independently of the others. -# -instances: - - ## @param openmetrics_endpoint - string - required - ## The URL exposing metrics in the OpenMetrics format. - # - - openmetrics_endpoint: http://%%host%%:5000/metrics - - ## @param raw_metric_prefix - string - optional - ## A prefix that is removed from all exposed metric names, if present. - ## All configuration options will use the prefix-less name. - # - # raw_metric_prefix: _ - - ## @param extra_metrics - (list of string or mapping) - optional - ## This list defines metrics to collect from the `openmetrics_endpoint`, in addition to - ## what the check collects by default. If the check already collects a metric, then - ## metric definitions here take precedence. Metrics may be defined in 3 ways: - ## - ## 1. If the item is a string, then it represents the exposed metric name, and - ## the sent metric name will be identical. For example: - ## ``` - ## extra_metrics: - ## - - ## - - ## ``` - ## 2. If the item is a mapping, then the keys represent the exposed metric names. - ## - ## 1. If a value is a string, then it represents the sent metric name. For example: - ## ``` - ## extra_metrics: - ## - : - ## - : - ## ``` - ## 2. If a value is a mapping, then it must have a `name` and/or `type` key. - ## The `name` represents the sent metric name, and the `type` represents how - ## the metric should be handled, overriding any type information the endpoint - ## may provide. For example: - ## ``` - ## extra_metrics: - ## - : - ## name: - ## type: - ## - : - ## name: - ## type: - ## ``` - ## The supported native types are `gauge`, `counter`, `histogram`, and `summary`. - ## - ## Note: To collect counter metrics with names ending in `_total`, specify the metric name without the `_total` - ## suffix. For example, to collect the counter metric `promhttp_metric_handler_requests_total`, specify - ## `promhttp_metric_handler_requests`. This submits to Datadog the metric name appended with `.count`. - ## For more information, see: - ## https://github.com/OpenObservability/OpenMetrics/blob/main/specification/OpenMetrics.md#suffixes - ## - ## Regular expressions may be used to match the exposed metric names, for example: - ## ``` - ## extra_metrics: - ## - ^network_(ingress|egress)_.+ - ## - .+: - ## type: gauge - ## ``` - # - # extra_metrics: - # - - # - : - # - : - # name: - # type: - - ## @param exclude_metrics - list of strings - optional - ## A list of metrics to exclude, with each entry being either - ## the exact metric name or a regular expression. - ## - ## In order to exclude all metrics but the ones matching a specific filter, - ## you can use a negative lookahead regex like: - ## - ^(?!foo).*$ - # - # exclude_metrics: [] - - ## @param exclude_metrics_by_labels - mapping - optional - ## A mapping of labels to exclude metrics with matching label name and their corresponding metric values. To match - ## all values of a label, set it to `true`. - ## - ## Note: Label filtering happens before `rename_labels`. - ## - ## For example, the following configuration instructs the check to exclude all metrics with - ## a label `worker` or a label `pid` with the value of either `23` or `42`. - ## - ## exclude_metrics_by_labels: - ## worker: true - ## pid: - ## - '23' - ## - '42' - # - # exclude_metrics_by_labels: {} - - ## @param exclude_labels - list of strings - optional - ## A list of labels to exclude, useful for high cardinality values like timestamps or UUIDs. - ## May be used in conjunction with `include_labels`. - ## Labels defined in `exclude_labels` will take precedence in case of overlap. - ## - ## Note: Label filtering happens before `rename_labels`. - # - # exclude_labels: [] - - ## @param include_labels - list of strings - optional - ## A list of labels to include. May be used in conjunction with `exclude_labels`. - ## Labels defined in `exclude_labels` will take precedence in case of overlap. - ## - ## Note: Label filtering happens before `rename_labels`. - # - # include_labels: [] - - ## @param rename_labels - mapping - optional - ## A mapping of label names to their new names. - # - # rename_labels: - # : - # : - - ## @param enable_health_service_check - boolean - optional - default: true - ## Whether or not to send a service check named `.openmetrics.health` which reports - ## the health of the `openmetrics_endpoint`. - # - # enable_health_service_check: true - - ## @param ignore_connection_errors - boolean - optional - default: false - ## Whether or not to ignore connection errors when scraping `openmetrics_endpoint`. - # - # ignore_connection_errors: false - - ## @param hostname_label - string - optional - ## Override the hostname for every metric submission with the value of one of its labels. - # - # hostname_label: - - ## @param hostname_format - string - optional - ## When `hostname_label` is set, this instructs the check how to format the values. The string - ## `` is replaced by the value of the label defined by `hostname_label`. - # - # hostname_format: - - ## @param collect_histogram_buckets - boolean - optional - default: true - ## Whether or not to send histogram buckets. - # - # collect_histogram_buckets: true - - ## @param non_cumulative_histogram_buckets - boolean - optional - default: false - ## Whether or not histogram buckets are non-cumulative and to come with a `lower_bound` tag. - # - # non_cumulative_histogram_buckets: false - - ## @param histogram_buckets_as_distributions - boolean - optional - default: false - ## Whether or not to send histogram buckets as Datadog distribution metrics. This implicitly - ## enables the `collect_histogram_buckets` and `non_cumulative_histogram_buckets` options. - ## - ## Learn more about distribution metrics: - ## https://docs.datadoghq.com/developers/metrics/types/?tab=distribution#metric-types - # - # histogram_buckets_as_distributions: false - - ## @param collect_counters_with_distributions - boolean - optional - default: false - ## Whether or not to also collect the observation counter metrics ending in `.sum` and `.count` - ## when sending histogram buckets as Datadog distribution metrics. This implicitly enables the - ## `histogram_buckets_as_distributions` option. - # - # collect_counters_with_distributions: false - - ## @param use_process_start_time - boolean - optional - default: false - ## Whether to enable a heuristic for reporting counter values on the first scrape. When true, - ## the first time an endpoint is scraped, check `process_start_time_seconds` to decide whether zero - ## initial value can be assumed for counters. This requires keeping metrics in memory until the entire - ## response is received. - # - # use_process_start_time: false - - ## @param share_labels - mapping - optional - ## This mapping allows for the sharing of labels across multiple metrics. The keys represent the - ## exposed metrics from which to share labels, and the values are mappings that configure the - ## sharing behavior. Each mapping must have at least one of the following keys: - ## - ## - labels - This is a list of labels to share. All labels are shared if this is not set. - ## - match - This is a list of labels to match on other metrics as a condition for sharing. - ## - values - This is a list of allowed values as a condition for sharing. - ## - ## To unconditionally share all labels of a metric, set it to `true`. - ## - ## For example, the following configuration instructs the check to apply all labels from `metric_a` - ## to all other metrics, the `node` label from `metric_b` to only those metrics that have a `pod` - ## label value that matches the `pod` label value of `metric_b`, and all labels from `metric_c` - ## to all other metrics if their value is equal to `23` or `42`. - # - # share_labels: - # metric_a: true - # metric_b: - # labels: - # - node - # match: - # - pod - # metric_c: - # values: - # - 23 - # - 42 - - ## @param cache_shared_labels - boolean - optional - default: true - ## When `share_labels` is set, it instructs the check to cache labels collected from the first payload - ## for improved performance. - ## - ## Set this to `false` to compute label sharing for every payload at the risk of potentially increased memory usage. - # - # cache_shared_labels: true - - ## @param raw_line_filters - list of strings - optional - ## A list of regular expressions used to exclude lines read from the `openmetrics_endpoint` - ## from being parsed. - # - # raw_line_filters: [] - - ## @param cache_metric_wildcards - boolean - optional - default: true - ## Whether or not to cache data from metrics that are defined by regular expressions rather - ## than the full metric name. - # - # cache_metric_wildcards: true - - ## @param telemetry - boolean - optional - default: false - ## Whether or not to submit metrics prefixed by `.telemetry.` for debugging purposes. - # - # telemetry: false - - ## @param ignore_tags - list of strings - optional - ## A list of regular expressions used to ignore tags added by Autodiscovery and entries in the `tags` option. - # - # ignore_tags: - # - - # - - # - - - ## @param proxy - mapping - optional - ## This overrides the `proxy` setting in `init_config`. - ## - ## Set HTTP or HTTPS proxies for this instance. Use the `no_proxy` list - ## to specify hosts that must bypass proxies. - ## - ## The SOCKS protocol is also supported, for example: - ## - ## socks5://user:pass@host:port - ## - ## Using the scheme `socks5` causes the DNS resolution to happen on the - ## client, rather than on the proxy server. This is in line with `curl`, - ## which uses the scheme to decide whether to do the DNS resolution on - ## the client or proxy. If you want to resolve the domains on the proxy - ## server, use `socks5h` as the scheme. - # - # proxy: - # http: http://: - # https: https://: - # no_proxy: - # - - # - - - ## @param skip_proxy - boolean - optional - default: false - ## This overrides the `skip_proxy` setting in `init_config`. - ## - ## If set to `true`, this makes the check bypass any proxy - ## settings enabled and attempt to reach services directly. - # - # skip_proxy: false - - ## @param auth_type - string - optional - default: basic - ## The type of authentication to use. The available types (and related options) are: - ## ``` - ## - basic - ## |__ username - ## |__ password - ## |__ use_legacy_auth_encoding - ## - digest - ## |__ username - ## |__ password - ## - ntlm - ## |__ ntlm_domain - ## |__ password - ## - kerberos - ## |__ kerberos_auth - ## |__ kerberos_cache - ## |__ kerberos_delegate - ## |__ kerberos_force_initiate - ## |__ kerberos_hostname - ## |__ kerberos_keytab - ## |__ kerberos_principal - ## - aws - ## |__ aws_region - ## |__ aws_host - ## |__ aws_service - ## ``` - ## The `aws` auth type relies on boto3 to automatically gather AWS credentials, for example: from `.aws/credentials`. - ## Details: https://boto3.amazonaws.com/v1/documentation/api/latest/guide/configuration.html#configuring-credentials - # - # auth_type: basic - - ## @param use_legacy_auth_encoding - boolean - optional - default: true - ## When `auth_type` is set to `basic`, this determines whether to encode as `latin1` rather than `utf-8`. - # - # use_legacy_auth_encoding: true - - ## @param username - string - optional - ## The username to use if services are behind basic or digest auth. - # - # username: - - ## @param password - string - optional - ## The password to use if services are behind basic or NTLM auth. - # - # password: - - ## @param ntlm_domain - string - optional - ## If your services use NTLM authentication, specify - ## the domain used in the check. For NTLM Auth, append - ## the username to domain, not as the `username` parameter. - # - # ntlm_domain: \ - - ## @param kerberos_auth - string - optional - default: disabled - ## If your services use Kerberos authentication, you can specify the Kerberos - ## strategy to use between: - ## - ## - required - ## - optional - ## - disabled - ## - ## See https://github.com/requests/requests-kerberos#mutual-authentication - # - # kerberos_auth: disabled - - ## @param kerberos_cache - string - optional - ## Sets the KRB5CCNAME environment variable. - ## It should point to a credential cache with a valid TGT. - # - # kerberos_cache: - - ## @param kerberos_delegate - boolean - optional - default: false - ## Set to `true` to enable Kerberos delegation of credentials to a server that requests delegation. - ## - ## See https://github.com/requests/requests-kerberos#delegation - # - # kerberos_delegate: false - - ## @param kerberos_force_initiate - boolean - optional - default: false - ## Set to `true` to preemptively initiate the Kerberos GSS exchange and - ## present a Kerberos ticket on the initial request (and all subsequent). - ## - ## See https://github.com/requests/requests-kerberos#preemptive-authentication - # - # kerberos_force_initiate: false - - ## @param kerberos_hostname - string - optional - ## Override the hostname used for the Kerberos GSS exchange if its DNS name doesn't - ## match its Kerberos hostname, for example: behind a content switch or load balancer. - ## - ## See https://github.com/requests/requests-kerberos#hostname-override - # - # kerberos_hostname: - - ## @param kerberos_principal - string - optional - ## Set an explicit principal, to force Kerberos to look for a - ## matching credential cache for the named user. - ## - ## See https://github.com/requests/requests-kerberos#explicit-principal - # - # kerberos_principal: - - ## @param kerberos_keytab - string - optional - ## Set the path to your Kerberos key tab file. - # - # kerberos_keytab: - - ## @param auth_token - mapping - optional - ## This allows for the use of authentication information from dynamic sources. - ## Both a reader and writer must be configured. - ## - ## The available readers are: - ## - ## - type: file - ## path (required): The absolute path for the file to read from. - ## pattern: A regular expression pattern with a single capture group used to find the - ## token rather than using the entire file, for example: Your secret is (.+) - ## - type: oauth - ## url (required): The token endpoint. - ## client_id (required): The client identifier. - ## client_secret (required): The client secret. - ## basic_auth: Whether the provider expects credentials to be transmitted in - ## an HTTP Basic Auth header. The default is: false - ## options: Mapping of additional options to pass to the provider, such as the audience - ## or the scope. For example: - ## options: - ## audience: https://example.com - ## scope: read:example - ## - ## The available writers are: - ## - ## - type: header - ## name (required): The name of the field, for example: Authorization - ## value: The template value, for example `Bearer `. The default is: - ## placeholder: The substring in `value` to replace with the token, defaults to: - # - # auth_token: - # reader: - # type: - # : - # : - # writer: - # type: - # : - # : - - ## @param aws_region - string - optional - ## If your services require AWS Signature Version 4 signing, set the region. - ## - ## See https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html - # - # aws_region: - - ## @param aws_host - string - optional - ## If your services require AWS Signature Version 4 signing, set the host. - ## This only needs the hostname and does not require the protocol (HTTP, HTTPS, and more). - ## For example, if connecting to https://us-east-1.amazonaws.com/, set `aws_host` to `us-east-1.amazonaws.com`. - ## - ## Note: This setting is not necessary for official integrations. - ## - ## See https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html - # - # aws_host: - - ## @param aws_service - string - optional - ## If your services require AWS Signature Version 4 signing, set the service code. For a list - ## of available service codes, see https://docs.aws.amazon.com/general/latest/gr/rande.html - ## - ## Note: This setting is not necessary for official integrations. - ## - ## See https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html - # - # aws_service: - - ## @param tls_verify - boolean - optional - default: true - ## Instructs the check to validate the TLS certificate of services. - # - # tls_verify: true - - ## @param tls_use_host_header - boolean - optional - default: false - ## If a `Host` header is set, this enables its use for SNI (matching against the TLS certificate CN or SAN). - # - # tls_use_host_header: false - - ## @param tls_ignore_warning - boolean - optional - default: false - ## If `tls_verify` is disabled, security warnings are logged by the check. - ## Disable those by setting `tls_ignore_warning` to true. - # - # tls_ignore_warning: false - - ## @param tls_cert - string - optional - ## The path to a single file in PEM format containing a certificate as well as any - ## number of CA certificates needed to establish the certificate's authenticity for - ## use when connecting to services. It may also contain an unencrypted private key to use. - # - # tls_cert: - - ## @param tls_private_key - string - optional - ## The unencrypted private key to use for `tls_cert` when connecting to services. This is - ## required if `tls_cert` is set and it does not already contain a private key. - # - # tls_private_key: - - ## @param tls_ca_cert - string - optional - ## The path to a file of concatenated CA certificates in PEM format or a directory - ## containing several CA certificates in PEM format. If a directory, the directory - ## must have been processed using the `openssl rehash` command. See: - ## https://www.openssl.org/docs/man3.2/man1/c_rehash.html - # - # tls_ca_cert: - - ## @param tls_protocols_allowed - list of strings - optional - ## The expected versions of TLS/SSL when fetching intermediate certificates. - ## Only `SSLv3`, `TLSv1.2`, `TLSv1.3` are allowed by default. The possible values are: - ## SSLv3 - ## TLSv1 - ## TLSv1.1 - ## TLSv1.2 - ## TLSv1.3 - # - # tls_protocols_allowed: - # - SSLv3 - # - TLSv1.2 - # - TLSv1.3 - - ## @param tls_ciphers - list of strings - optional - ## The list of ciphers suites to use when connecting to an endpoint. If not specified, - ## `ALL` ciphers are used. For list of ciphers see: - ## https://www.openssl.org/docs/man1.0.2/man1/ciphers.html - # - # tls_ciphers: - # - TLS_AES_256_GCM_SHA384 - # - TLS_CHACHA20_POLY1305_SHA256 - # - TLS_AES_128_GCM_SHA256 - - ## @param headers - mapping - optional - ## The headers parameter allows you to send specific headers with every request. - ## You can use it for explicitly specifying the host header or adding headers for - ## authorization purposes. - ## - ## This overrides any default headers. - # - # headers: - # Host: - # X-Auth-Token: - - ## @param extra_headers - mapping - optional - ## Additional headers to send with every request. - # - # extra_headers: - # Host: - # X-Auth-Token: - - ## @param timeout - number - optional - default: 10 - ## The timeout for accessing services. - ## - ## This overrides the `timeout` setting in `init_config`. - # - # timeout: 10 - - ## @param connect_timeout - number - optional - ## The connect timeout for accessing services. Defaults to `timeout`. - # - # connect_timeout: - - ## @param read_timeout - number - optional - ## The read timeout for accessing services. Defaults to `timeout`. - # - # read_timeout: - - ## @param request_size - number - optional - default: 16 - ## The number of kibibytes (KiB) to read from streaming HTTP responses at a time. - # - # request_size: 16 - - ## @param log_requests - boolean - optional - default: false - ## Whether or not to debug log the HTTP(S) requests made, including the method and URL. - # - # log_requests: false - - ## @param persist_connections - boolean - optional - default: false - ## Whether or not to persist cookies and use connection pooling for improved performance. - # - # persist_connections: false - - ## @param allow_redirects - boolean - optional - default: true - ## Whether or not to allow URL redirection. - # - # allow_redirects: true - - ## @param tags - list of strings - optional - ## A list of tags to attach to every metric and service check emitted by this instance. - ## - ## Learn more about tagging at https://docs.datadoghq.com/tagging - # - # tags: - # - : - # - : - - ## @param service - string - optional - ## Attach the tag `service:` to every metric, event, and service check emitted by this integration. - ## - ## Overrides any `service` defined in the `init_config` section. - # - # service: - - ## @param min_collection_interval - number - optional - default: 15 - ## This changes the collection interval of the check. For more information, see: - ## https://docs.datadoghq.com/developers/write_agent_check/#collection-interval - # - # min_collection_interval: 15 - - ## @param empty_default_hostname - boolean - optional - default: false - ## This forces the check to send metrics with no hostname. - ## - ## This is useful for cluster-level checks. - # - # empty_default_hostname: false - - ## @param metric_patterns - mapping - optional - ## A mapping of metrics to include or exclude, with each entry being a regular expression. - ## - ## Metrics defined in `exclude` will take precedence in case of overlap. - # - # metric_patterns: - # include: - # - - # exclude: - # - diff --git a/datadog_csi_driver/datadog_checks/datadog_csi_driver/data/conf.yaml.example b/datadog_csi_driver/datadog_checks/datadog_csi_driver/data/conf.yaml.example deleted file mode 100644 index a192952859c69..0000000000000 --- a/datadog_csi_driver/datadog_checks/datadog_csi_driver/data/conf.yaml.example +++ /dev/null @@ -1,610 +0,0 @@ -## All options defined here are available to all instances. -# -init_config: - - ## @param service - string - optional - ## Attach the tag `service:` to every metric, event, and service check emitted by this integration. - ## - ## Additionally, this sets the default `service` for every log source. - # - # service: - -## Every instance is scheduled independently of the others. -# -instances: - - ## @param openmetrics_endpoint - string - required - ## The URL exposing metrics in the OpenMetrics format. - # - - openmetrics_endpoint: - - ## @param raw_metric_prefix - string - optional - ## A prefix that is removed from all exposed metric names, if present. - ## All configuration options will use the prefix-less name. - # - # raw_metric_prefix: _ - - ## @param extra_metrics - (list of string or mapping) - optional - ## This list defines metrics to collect from the `openmetrics_endpoint`, in addition to - ## what the check collects by default. If the check already collects a metric, then - ## metric definitions here take precedence. Metrics may be defined in 3 ways: - ## - ## 1. If the item is a string, then it represents the exposed metric name, and - ## the sent metric name will be identical. For example: - ## ``` - ## extra_metrics: - ## - - ## - - ## ``` - ## 2. If the item is a mapping, then the keys represent the exposed metric names. - ## - ## 1. If a value is a string, then it represents the sent metric name. For example: - ## ``` - ## extra_metrics: - ## - : - ## - : - ## ``` - ## 2. If a value is a mapping, then it must have a `name` and/or `type` key. - ## The `name` represents the sent metric name, and the `type` represents how - ## the metric should be handled, overriding any type information the endpoint - ## may provide. For example: - ## ``` - ## extra_metrics: - ## - : - ## name: - ## type: - ## - : - ## name: - ## type: - ## ``` - ## The supported native types are `gauge`, `counter`, `histogram`, and `summary`. - ## - ## Note: To collect counter metrics with names ending in `_total`, specify the metric name without the `_total` - ## suffix. For example, to collect the counter metric `promhttp_metric_handler_requests_total`, specify - ## `promhttp_metric_handler_requests`. This submits to Datadog the metric name appended with `.count`. - ## For more information, see: - ## https://github.com/OpenObservability/OpenMetrics/blob/main/specification/OpenMetrics.md#suffixes - ## - ## Regular expressions may be used to match the exposed metric names, for example: - ## ``` - ## extra_metrics: - ## - ^network_(ingress|egress)_.+ - ## - .+: - ## type: gauge - ## ``` - # - # extra_metrics: - # - - # - : - # - : - # name: - # type: - - ## @param exclude_metrics - list of strings - optional - ## A list of metrics to exclude, with each entry being either - ## the exact metric name or a regular expression. - ## - ## In order to exclude all metrics but the ones matching a specific filter, - ## you can use a negative lookahead regex like: - ## - ^(?!foo).*$ - # - # exclude_metrics: [] - - ## @param exclude_metrics_by_labels - mapping - optional - ## A mapping of labels to exclude metrics with matching label name and their corresponding metric values. To match - ## all values of a label, set it to `true`. - ## - ## Note: Label filtering happens before `rename_labels`. - ## - ## For example, the following configuration instructs the check to exclude all metrics with - ## a label `worker` or a label `pid` with the value of either `23` or `42`. - ## - ## exclude_metrics_by_labels: - ## worker: true - ## pid: - ## - '23' - ## - '42' - # - # exclude_metrics_by_labels: {} - - ## @param exclude_labels - list of strings - optional - ## A list of labels to exclude, useful for high cardinality values like timestamps or UUIDs. - ## May be used in conjunction with `include_labels`. - ## Labels defined in `exclude_labels` will take precedence in case of overlap. - ## - ## Note: Label filtering happens before `rename_labels`. - # - # exclude_labels: [] - - ## @param include_labels - list of strings - optional - ## A list of labels to include. May be used in conjunction with `exclude_labels`. - ## Labels defined in `exclude_labels` will take precedence in case of overlap. - ## - ## Note: Label filtering happens before `rename_labels`. - # - # include_labels: [] - - ## @param rename_labels - mapping - optional - ## A mapping of label names to their new names. - # - # rename_labels: - # : - # : - - ## @param enable_health_service_check - boolean - optional - default: true - ## Whether or not to send a service check named `.openmetrics.health` which reports - ## the health of the `openmetrics_endpoint`. - # - # enable_health_service_check: true - - ## @param ignore_connection_errors - boolean - optional - default: false - ## Whether or not to ignore connection errors when scraping `openmetrics_endpoint`. - # - # ignore_connection_errors: false - - ## @param hostname_label - string - optional - ## Override the hostname for every metric submission with the value of one of its labels. - # - # hostname_label: - - ## @param hostname_format - string - optional - ## When `hostname_label` is set, this instructs the check how to format the values. The string - ## `` is replaced by the value of the label defined by `hostname_label`. - # - # hostname_format: - - ## @param collect_histogram_buckets - boolean - optional - default: true - ## Whether or not to send histogram buckets. - # - # collect_histogram_buckets: true - - ## @param non_cumulative_histogram_buckets - boolean - optional - default: false - ## Whether or not histogram buckets are non-cumulative and to come with a `lower_bound` tag. - # - # non_cumulative_histogram_buckets: false - - ## @param histogram_buckets_as_distributions - boolean - optional - default: false - ## Whether or not to send histogram buckets as Datadog distribution metrics. This implicitly - ## enables the `collect_histogram_buckets` and `non_cumulative_histogram_buckets` options. - ## - ## Learn more about distribution metrics: - ## https://docs.datadoghq.com/developers/metrics/types/?tab=distribution#metric-types - # - # histogram_buckets_as_distributions: false - - ## @param collect_counters_with_distributions - boolean - optional - default: false - ## Whether or not to also collect the observation counter metrics ending in `.sum` and `.count` - ## when sending histogram buckets as Datadog distribution metrics. This implicitly enables the - ## `histogram_buckets_as_distributions` option. - # - # collect_counters_with_distributions: false - - ## @param use_process_start_time - boolean - optional - default: false - ## Whether to enable a heuristic for reporting counter values on the first scrape. When true, - ## the first time an endpoint is scraped, check `process_start_time_seconds` to decide whether zero - ## initial value can be assumed for counters. This requires keeping metrics in memory until the entire - ## response is received. - # - # use_process_start_time: false - - ## @param share_labels - mapping - optional - ## This mapping allows for the sharing of labels across multiple metrics. The keys represent the - ## exposed metrics from which to share labels, and the values are mappings that configure the - ## sharing behavior. Each mapping must have at least one of the following keys: - ## - ## - labels - This is a list of labels to share. All labels are shared if this is not set. - ## - match - This is a list of labels to match on other metrics as a condition for sharing. - ## - values - This is a list of allowed values as a condition for sharing. - ## - ## To unconditionally share all labels of a metric, set it to `true`. - ## - ## For example, the following configuration instructs the check to apply all labels from `metric_a` - ## to all other metrics, the `node` label from `metric_b` to only those metrics that have a `pod` - ## label value that matches the `pod` label value of `metric_b`, and all labels from `metric_c` - ## to all other metrics if their value is equal to `23` or `42`. - # - # share_labels: - # metric_a: true - # metric_b: - # labels: - # - node - # match: - # - pod - # metric_c: - # values: - # - 23 - # - 42 - - ## @param cache_shared_labels - boolean - optional - default: true - ## When `share_labels` is set, it instructs the check to cache labels collected from the first payload - ## for improved performance. - ## - ## Set this to `false` to compute label sharing for every payload at the risk of potentially increased memory usage. - # - # cache_shared_labels: true - - ## @param raw_line_filters - list of strings - optional - ## A list of regular expressions used to exclude lines read from the `openmetrics_endpoint` - ## from being parsed. - # - # raw_line_filters: [] - - ## @param cache_metric_wildcards - boolean - optional - default: true - ## Whether or not to cache data from metrics that are defined by regular expressions rather - ## than the full metric name. - # - # cache_metric_wildcards: true - - ## @param telemetry - boolean - optional - default: false - ## Whether or not to submit metrics prefixed by `.telemetry.` for debugging purposes. - # - # telemetry: false - - ## @param ignore_tags - list of strings - optional - ## A list of regular expressions used to ignore tags added by Autodiscovery and entries in the `tags` option. - # - # ignore_tags: - # - - # - - # - - - ## @param proxy - mapping - optional - ## This overrides the `proxy` setting in `init_config`. - ## - ## Set HTTP or HTTPS proxies for this instance. Use the `no_proxy` list - ## to specify hosts that must bypass proxies. - ## - ## The SOCKS protocol is also supported, for example: - ## - ## socks5://user:pass@host:port - ## - ## Using the scheme `socks5` causes the DNS resolution to happen on the - ## client, rather than on the proxy server. This is in line with `curl`, - ## which uses the scheme to decide whether to do the DNS resolution on - ## the client or proxy. If you want to resolve the domains on the proxy - ## server, use `socks5h` as the scheme. - # - # proxy: - # http: http://: - # https: https://: - # no_proxy: - # - - # - - - ## @param skip_proxy - boolean - optional - default: false - ## This overrides the `skip_proxy` setting in `init_config`. - ## - ## If set to `true`, this makes the check bypass any proxy - ## settings enabled and attempt to reach services directly. - # - # skip_proxy: false - - ## @param auth_type - string - optional - default: basic - ## The type of authentication to use. The available types (and related options) are: - ## ``` - ## - basic - ## |__ username - ## |__ password - ## |__ use_legacy_auth_encoding - ## - digest - ## |__ username - ## |__ password - ## - ntlm - ## |__ ntlm_domain - ## |__ password - ## - kerberos - ## |__ kerberos_auth - ## |__ kerberos_cache - ## |__ kerberos_delegate - ## |__ kerberos_force_initiate - ## |__ kerberos_hostname - ## |__ kerberos_keytab - ## |__ kerberos_principal - ## - aws - ## |__ aws_region - ## |__ aws_host - ## |__ aws_service - ## ``` - ## The `aws` auth type relies on boto3 to automatically gather AWS credentials, for example: from `.aws/credentials`. - ## Details: https://boto3.amazonaws.com/v1/documentation/api/latest/guide/configuration.html#configuring-credentials - # - # auth_type: basic - - ## @param use_legacy_auth_encoding - boolean - optional - default: true - ## When `auth_type` is set to `basic`, this determines whether to encode as `latin1` rather than `utf-8`. - # - # use_legacy_auth_encoding: true - - ## @param username - string - optional - ## The username to use if services are behind basic or digest auth. - # - # username: - - ## @param password - string - optional - ## The password to use if services are behind basic or NTLM auth. - # - # password: - - ## @param ntlm_domain - string - optional - ## If your services use NTLM authentication, specify - ## the domain used in the check. For NTLM Auth, append - ## the username to domain, not as the `username` parameter. - # - # ntlm_domain: \ - - ## @param kerberos_auth - string - optional - default: disabled - ## If your services use Kerberos authentication, you can specify the Kerberos - ## strategy to use between: - ## - ## - required - ## - optional - ## - disabled - ## - ## See https://github.com/requests/requests-kerberos#mutual-authentication - # - # kerberos_auth: disabled - - ## @param kerberos_cache - string - optional - ## Sets the KRB5CCNAME environment variable. - ## It should point to a credential cache with a valid TGT. - # - # kerberos_cache: - - ## @param kerberos_delegate - boolean - optional - default: false - ## Set to `true` to enable Kerberos delegation of credentials to a server that requests delegation. - ## - ## See https://github.com/requests/requests-kerberos#delegation - # - # kerberos_delegate: false - - ## @param kerberos_force_initiate - boolean - optional - default: false - ## Set to `true` to preemptively initiate the Kerberos GSS exchange and - ## present a Kerberos ticket on the initial request (and all subsequent). - ## - ## See https://github.com/requests/requests-kerberos#preemptive-authentication - # - # kerberos_force_initiate: false - - ## @param kerberos_hostname - string - optional - ## Override the hostname used for the Kerberos GSS exchange if its DNS name doesn't - ## match its Kerberos hostname, for example: behind a content switch or load balancer. - ## - ## See https://github.com/requests/requests-kerberos#hostname-override - # - # kerberos_hostname: - - ## @param kerberos_principal - string - optional - ## Set an explicit principal, to force Kerberos to look for a - ## matching credential cache for the named user. - ## - ## See https://github.com/requests/requests-kerberos#explicit-principal - # - # kerberos_principal: - - ## @param kerberos_keytab - string - optional - ## Set the path to your Kerberos key tab file. - # - # kerberos_keytab: - - ## @param auth_token - mapping - optional - ## This allows for the use of authentication information from dynamic sources. - ## Both a reader and writer must be configured. - ## - ## The available readers are: - ## - ## - type: file - ## path (required): The absolute path for the file to read from. - ## pattern: A regular expression pattern with a single capture group used to find the - ## token rather than using the entire file, for example: Your secret is (.+) - ## - type: oauth - ## url (required): The token endpoint. - ## client_id (required): The client identifier. - ## client_secret (required): The client secret. - ## basic_auth: Whether the provider expects credentials to be transmitted in - ## an HTTP Basic Auth header. The default is: false - ## options: Mapping of additional options to pass to the provider, such as the audience - ## or the scope. For example: - ## options: - ## audience: https://example.com - ## scope: read:example - ## - ## The available writers are: - ## - ## - type: header - ## name (required): The name of the field, for example: Authorization - ## value: The template value, for example `Bearer `. The default is: - ## placeholder: The substring in `value` to replace with the token, defaults to: - # - # auth_token: - # reader: - # type: - # : - # : - # writer: - # type: - # : - # : - - ## @param aws_region - string - optional - ## If your services require AWS Signature Version 4 signing, set the region. - ## - ## See https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html - # - # aws_region: - - ## @param aws_host - string - optional - ## If your services require AWS Signature Version 4 signing, set the host. - ## This only needs the hostname and does not require the protocol (HTTP, HTTPS, and more). - ## For example, if connecting to https://us-east-1.amazonaws.com/, set `aws_host` to `us-east-1.amazonaws.com`. - ## - ## Note: This setting is not necessary for official integrations. - ## - ## See https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html - # - # aws_host: - - ## @param aws_service - string - optional - ## If your services require AWS Signature Version 4 signing, set the service code. For a list - ## of available service codes, see https://docs.aws.amazon.com/general/latest/gr/rande.html - ## - ## Note: This setting is not necessary for official integrations. - ## - ## See https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html - # - # aws_service: - - ## @param tls_verify - boolean - optional - default: true - ## Instructs the check to validate the TLS certificate of services. - # - # tls_verify: true - - ## @param tls_use_host_header - boolean - optional - default: false - ## If a `Host` header is set, this enables its use for SNI (matching against the TLS certificate CN or SAN). - # - # tls_use_host_header: false - - ## @param tls_ignore_warning - boolean - optional - default: false - ## If `tls_verify` is disabled, security warnings are logged by the check. - ## Disable those by setting `tls_ignore_warning` to true. - # - # tls_ignore_warning: false - - ## @param tls_cert - string - optional - ## The path to a single file in PEM format containing a certificate as well as any - ## number of CA certificates needed to establish the certificate's authenticity for - ## use when connecting to services. It may also contain an unencrypted private key to use. - # - # tls_cert: - - ## @param tls_private_key - string - optional - ## The unencrypted private key to use for `tls_cert` when connecting to services. This is - ## required if `tls_cert` is set and it does not already contain a private key. - # - # tls_private_key: - - ## @param tls_ca_cert - string - optional - ## The path to a file of concatenated CA certificates in PEM format or a directory - ## containing several CA certificates in PEM format. If a directory, the directory - ## must have been processed using the `openssl rehash` command. See: - ## https://www.openssl.org/docs/man3.2/man1/c_rehash.html - # - # tls_ca_cert: - - ## @param tls_protocols_allowed - list of strings - optional - ## The expected versions of TLS/SSL when fetching intermediate certificates. - ## Only `SSLv3`, `TLSv1.2`, `TLSv1.3` are allowed by default. The possible values are: - ## SSLv3 - ## TLSv1 - ## TLSv1.1 - ## TLSv1.2 - ## TLSv1.3 - # - # tls_protocols_allowed: - # - SSLv3 - # - TLSv1.2 - # - TLSv1.3 - - ## @param tls_ciphers - list of strings - optional - ## The list of ciphers suites to use when connecting to an endpoint. If not specified, - ## `ALL` ciphers are used. For list of ciphers see: - ## https://www.openssl.org/docs/man1.0.2/man1/ciphers.html - # - # tls_ciphers: - # - TLS_AES_256_GCM_SHA384 - # - TLS_CHACHA20_POLY1305_SHA256 - # - TLS_AES_128_GCM_SHA256 - - ## @param headers - mapping - optional - ## The headers parameter allows you to send specific headers with every request. - ## You can use it for explicitly specifying the host header or adding headers for - ## authorization purposes. - ## - ## This overrides any default headers. - # - # headers: - # Host: - # X-Auth-Token: - - ## @param extra_headers - mapping - optional - ## Additional headers to send with every request. - # - # extra_headers: - # Host: - # X-Auth-Token: - - ## @param timeout - number - optional - default: 10 - ## The timeout for accessing services. - ## - ## This overrides the `timeout` setting in `init_config`. - # - # timeout: 10 - - ## @param connect_timeout - number - optional - ## The connect timeout for accessing services. Defaults to `timeout`. - # - # connect_timeout: - - ## @param read_timeout - number - optional - ## The read timeout for accessing services. Defaults to `timeout`. - # - # read_timeout: - - ## @param request_size - number - optional - default: 16 - ## The number of kibibytes (KiB) to read from streaming HTTP responses at a time. - # - # request_size: 16 - - ## @param log_requests - boolean - optional - default: false - ## Whether or not to debug log the HTTP(S) requests made, including the method and URL. - # - # log_requests: false - - ## @param persist_connections - boolean - optional - default: false - ## Whether or not to persist cookies and use connection pooling for improved performance. - # - # persist_connections: false - - ## @param allow_redirects - boolean - optional - default: true - ## Whether or not to allow URL redirection. - # - # allow_redirects: true - - ## @param tags - list of strings - optional - ## A list of tags to attach to every metric and service check emitted by this instance. - ## - ## Learn more about tagging at https://docs.datadoghq.com/tagging - # - # tags: - # - : - # - : - - ## @param service - string - optional - ## Attach the tag `service:` to every metric, event, and service check emitted by this integration. - ## - ## Overrides any `service` defined in the `init_config` section. - # - # service: - - ## @param min_collection_interval - number - optional - default: 15 - ## This changes the collection interval of the check. For more information, see: - ## https://docs.datadoghq.com/developers/write_agent_check/#collection-interval - # - # min_collection_interval: 15 - - ## @param empty_default_hostname - boolean - optional - default: false - ## This forces the check to send metrics with no hostname. - ## - ## This is useful for cluster-level checks. - # - # empty_default_hostname: false - - ## @param metric_patterns - mapping - optional - ## A mapping of metrics to include or exclude, with each entry being a regular expression. - ## - ## Metrics defined in `exclude` will take precedence in case of overlap. - # - # metric_patterns: - # include: - # - - # exclude: - # - diff --git a/datadog_csi_driver/hatch.toml b/datadog_csi_driver/hatch.toml deleted file mode 100644 index fee2455000258..0000000000000 --- a/datadog_csi_driver/hatch.toml +++ /dev/null @@ -1,4 +0,0 @@ -[env.collectors.datadog-checks] - -[[envs.default.matrix]] -python = ["3.13"] diff --git a/datadog_csi_driver/images/IMAGES_README.md b/datadog_csi_driver/images/IMAGES_README.md deleted file mode 100644 index 443f3c45e3385..0000000000000 --- a/datadog_csi_driver/images/IMAGES_README.md +++ /dev/null @@ -1,41 +0,0 @@ -# Marketplace Media Carousel Guidelines - -## Using the media gallery - -Please upload images to use the media gallery. Integrations require a minimum of 3 images. Images should highlight your product, your integration, and a full image of the Datadog integration dashboard. The gallery -can hold a maximum of 8 pieces of media total, and one of these pieces of media -can be a video (guidelines and submission steps below). Images should be -added to your /images directory and referenced in the manifest.json file. - - -## Image and video requirements - -### Images - -``` -File type : .jpg or .png -File size : ~500 KB per image, with a max of 1 MB per image -File dimensions : The image must be between 1440px and 2880px width, with a 16:9 aspect ratio (for example: 1440x810) -File name : Use only letters, numbers, underscores, and hyphens -Color mode : RGB -Color profile : sRGB -Description : 300 characters maximum -``` - -### Video - -To display a video in your media gallery, please send our team the zipped file -or a link to download the video at `marketplace@datadog.com`. In addition, -please upload a thumbnail image for your video as a part of the pull request. -Once approved, we will upload the file to Vimeo and provide you with the -vimeo_id to add to your manifest.json file. Please note that the gallery can -only hold one video. - -``` -File type : MP4 H.264 -File size : Max 1 video; 1 GB maximum size -File dimensions : The aspect ratio must be exactly 16:9, and the resolution must be 1920x1080 or higher -File name : partnerName-appName.mp4 -Run time : Recommendation of 60 seconds or less -Description : 300 characters maximum -``` diff --git a/datadog_csi_driver/pyproject.toml b/datadog_csi_driver/pyproject.toml deleted file mode 100644 index 7245dd92fee68..0000000000000 --- a/datadog_csi_driver/pyproject.toml +++ /dev/null @@ -1,60 +0,0 @@ -[build-system] -requires = [ - "hatchling>=0.13.0", -] -build-backend = "hatchling.build" - -[project] -name = "datadog-datadog-csi-driver" -description = "The datadog_csi_driver check" -readme = "README.md" -license = "BSD-3-Clause" -requires-python = ">=3.12" -keywords = [ - "datadog", - "datadog agent", - "datadog check", - "datadog_csi_driver", -] -authors = [ - { name = "Datadog", email = "packages@datadoghq.com" }, -] -classifiers = [ - "Development Status :: 5 - Production/Stable", - "Intended Audience :: Developers", - "Intended Audience :: System Administrators", - "License :: OSI Approved :: BSD License", - "Private :: Do Not Upload", - "Programming Language :: Python :: 3.13", - "Topic :: System :: Monitoring", -] -dependencies = [ - "datadog-checks-base>=37.33.0", -] -dynamic = [ - "version", -] - -[project.optional-dependencies] -deps = [] - -[project.urls] -Source = "https://github.com/DataDog/integrations-core" - -[tool.hatch.version] -path = "datadog_checks/datadog_csi_driver/__about__.py" - -[tool.hatch.build.targets.sdist] -include = [ - "/datadog_checks", - "/tests", - "/manifest.json", -] - -[tool.hatch.build.targets.wheel] -include = [ - "/datadog_checks/datadog_csi_driver", -] -dev-mode-dirs = [ - ".", -] diff --git a/datadog_csi_driver/tests/__init__.py b/datadog_csi_driver/tests/__init__.py deleted file mode 100644 index c9f1f2a9882c7..0000000000000 --- a/datadog_csi_driver/tests/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# (C) Datadog, Inc. 2025-present -# All rights reserved -# Licensed under a 3-clause BSD style license (see LICENSE) diff --git a/datadog_csi_driver/tests/common.py b/datadog_csi_driver/tests/common.py deleted file mode 100644 index dc0a225f41f64..0000000000000 --- a/datadog_csi_driver/tests/common.py +++ /dev/null @@ -1,30 +0,0 @@ -# (C) Datadog, Inc. 2025-present -# All rights reserved -# Licensed under a 3-clause BSD style license (see LICENSE) -import os - -from datadog_checks.dev import get_docker_hostname, get_here - -HERE = get_here() -HOST = get_docker_hostname() -PORT = 5000 - - -def get_fixture_path(filename): - return os.path.join(HERE, 'fixtures', filename) - - -MOCKED_INSTANCE = { - "openmetrics_endpoint": f"http://{HOST}:{PORT}/metrics", -} - -COMPOSE_FILE = os.path.join(HERE, 'docker', 'docker-compose.yaml') - -NAMESPACE = 'datadog.csi_driver' - -METRICS = [ - 'node_publish_volume_attempts.count', - 'node_unpublish_volume_attempts.count', -] - -METRICS_MOCK = [f'{NAMESPACE}.{m}' for m in METRICS] diff --git a/datadog_csi_driver/tests/conftest.py b/datadog_csi_driver/tests/conftest.py deleted file mode 100644 index a8eaddbffbac2..0000000000000 --- a/datadog_csi_driver/tests/conftest.py +++ /dev/null @@ -1,29 +0,0 @@ -# (C) Datadog, Inc. 2025-present -# All rights reserved -# Licensed under a 3-clause BSD style license (see LICENSE) -import copy - -import pytest - -from datadog_checks.dev import docker_run -from datadog_checks.dev.conditions import CheckDockerLogs, CheckEndpoints - -from . import common - - -@pytest.fixture(scope='session') -def dd_environment(): - compose_file = common.COMPOSE_FILE - conditions = [ - CheckDockerLogs(identifier='caddy', patterns=['server running']), - CheckEndpoints(common.MOCKED_INSTANCE["openmetrics_endpoint"]), - ] - with docker_run(compose_file, conditions=conditions): - yield { - 'instances': [common.MOCKED_INSTANCE], - } - - -@pytest.fixture -def instance(): - return copy.deepcopy(common.MOCKED_INSTANCE) diff --git a/datadog_csi_driver/tests/docker/Caddyfile b/datadog_csi_driver/tests/docker/Caddyfile deleted file mode 100644 index 88b8eae20b0be..0000000000000 --- a/datadog_csi_driver/tests/docker/Caddyfile +++ /dev/null @@ -1,4 +0,0 @@ -:5000 { - root * /metrics - file_server -} \ No newline at end of file diff --git a/datadog_csi_driver/tests/docker/docker-compose.yaml b/datadog_csi_driver/tests/docker/docker-compose.yaml deleted file mode 100644 index dc438c7641c1d..0000000000000 --- a/datadog_csi_driver/tests/docker/docker-compose.yaml +++ /dev/null @@ -1,10 +0,0 @@ -services: - - caddy: - image: caddy:2.7 - container_name: caddy - ports: - - "5000:5000" - volumes: - - ./Caddyfile:/etc/caddy/Caddyfile - - ../fixtures/metrics.txt:/metrics/metrics \ No newline at end of file diff --git a/datadog_csi_driver/tests/fixtures/metrics.txt b/datadog_csi_driver/tests/fixtures/metrics.txt deleted file mode 100644 index 9105a0e3fd13e..0000000000000 --- a/datadog_csi_driver/tests/fixtures/metrics.txt +++ /dev/null @@ -1,7 +0,0 @@ -# HELP datadog_csi_driver_node_publish_volume_attempts Counts the number of publish volume requests received by the csi node server -# TYPE datadog_csi_driver_node_publish_volume_attempts counter -datadog_csi_driver_node_publish_volume_attempts{path="/var/run/datadog",status="success",type="DSDSocketDirectory"} 6 - -# HELP datadog_csi_driver_node_unpublish_volume_attempts Counts the number of unpublish volume requests received by the csi node server -# TYPE datadog_csi_driver_node_unpublish_volume_attempts counter -datadog_csi_driver_node_unpublish_volume_attempts{path="/var/run/datadog",status="success",type="DSDSocketDirectory"} 6 diff --git a/datadog_csi_driver/tests/test_unit.py b/datadog_csi_driver/tests/test_unit.py deleted file mode 100644 index 42ff4ff491b01..0000000000000 --- a/datadog_csi_driver/tests/test_unit.py +++ /dev/null @@ -1,28 +0,0 @@ -# (C) Datadog, Inc. 2025-present -# All rights reserved -# Licensed under a 3-clause BSD style license (see LICENSE) - -from datadog_checks.datadog_csi_driver import DatadogCSIDriverCheck -from datadog_checks.dev.utils import get_metadata_metrics - -from .common import METRICS_MOCK, NAMESPACE, get_fixture_path - - -def test_check(dd_run_check, aggregator, instance, mock_http_response): - mock_http_response(file_path=get_fixture_path('metrics.txt')) - check = DatadogCSIDriverCheck(NAMESPACE, {}, [instance]) - dd_run_check(check) - - for metric in METRICS_MOCK: - aggregator.assert_metric(metric) - aggregator.assert_metric_has_tags( - metric, - [ - 'status:success', - 'path:/var/run/datadog', - 'type:DSDSocketDirectory', - ], - ) - - aggregator.assert_all_metrics_covered() - aggregator.assert_metrics_using_metadata(get_metadata_metrics()) From 7119f3347079c1df7d9560169c00c64507eac0a2 Mon Sep 17 00:00:00 2001 From: apiazza-dd <120594144+apiazza-dd@users.noreply.github.com> Date: Thu, 21 May 2026 07:27:47 -0400 Subject: [PATCH 4/6] turn on public docs (#23789) * turn on public docs * change key --- anthropic_compliance_logs/manifest.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/anthropic_compliance_logs/manifest.json b/anthropic_compliance_logs/manifest.json index 5a939fe542252..f74d4b3be14de 100644 --- a/anthropic_compliance_logs/manifest.json +++ b/anthropic_compliance_logs/manifest.json @@ -3,14 +3,14 @@ "app_uuid": "eafbb640-db8c-4ab5-94db-6bc2b80a071d", "app_id": "anthropic-compliance-logs", "owner": "saas-integrations", - "display_on_public_website": false, + "display_on_public_website": true, "tile": { "overview": "README.md#Overview", "configuration": "README.md#Setup", "support": "README.md#Troubleshooting", "changelog": "CHANGELOG.md", "description": "Collect compliance logs from Claude for security monitoring and SIEM use cases.", - "title": "Claude Compliance Logs", + "title": "Claude Compliance", "media": [], "classifier_tags": [ "Category::AI/ML", @@ -39,7 +39,7 @@ "Claude Compliance Logs Overview": "assets/dashboards/claude_compliance_logs_overview.json" }, "monitors": { - "Claude Compliance Log Ingestion Has Stopped": "assets/monitors/claude_compliance_logs_no_data.json" + "Anthropic Compliance Log Ingestion Has Stopped": "assets/monitors/claude_compliance_logs_no_data.json" }, "saved_views": { "All Claude Compliance Logs": "assets/saved_views/all_claude_compliance_logs.json", From 967373d6b1be5f03832e56db3ef63aea8e7b94e8 Mon Sep 17 00:00:00 2001 From: Elia Camposilvan <25326494+EliaECoyote@users.noreply.github.com> Date: Thu, 21 May 2026 14:58:58 +0200 Subject: [PATCH 5/6] [SEC-31850][k9] OCSF facets: add type: integer (#23785) --- .../assets/logs/azure.activedirectory.yaml | 4 ++++ cisco_duo/assets/logs/cisco-duo.yaml | 4 ++++ cisco_umbrella_dns/assets/logs/cisco-umbrella-dns.yaml | 4 ++++ lastpass/assets/logs/lastpass.yaml | 4 ++++ ssh_check/assets/logs/sshd.yaml | 4 ++++ tomcat/assets/logs/tomcat.yaml | 5 +++++ zeek/assets/logs/zeek.yaml | 5 +++++ 7 files changed, 30 insertions(+) diff --git a/azure_active_directory/assets/logs/azure.activedirectory.yaml b/azure_active_directory/assets/logs/azure.activedirectory.yaml index a72ddd882dc9c..e8050796da873 100644 --- a/azure_active_directory/assets/logs/azure.activedirectory.yaml +++ b/azure_active_directory/assets/logs/azure.activedirectory.yaml @@ -162,6 +162,7 @@ facets: name: Activity ID path: ocsf.activity_id source: log + type: integer - groups: - OCSF name: Activity Name @@ -172,6 +173,7 @@ facets: name: Category ID path: ocsf.category_uid source: log + type: integer - groups: - OCSF name: Category @@ -182,6 +184,7 @@ facets: name: Class ID path: ocsf.class_uid source: log + type: integer - groups: - OCSF name: Class @@ -212,6 +215,7 @@ facets: name: Status ID path: ocsf.status_id source: log + type: integer pipeline: type: pipeline name: Azure Active Directory diff --git a/cisco_duo/assets/logs/cisco-duo.yaml b/cisco_duo/assets/logs/cisco-duo.yaml index 411465bc21476..7e52916e808c1 100644 --- a/cisco_duo/assets/logs/cisco-duo.yaml +++ b/cisco_duo/assets/logs/cisco-duo.yaml @@ -35,6 +35,7 @@ facets: name: Activity ID path: ocsf.activity_id source: log + type: integer - groups: - OCSF name: Activity Name @@ -45,6 +46,7 @@ facets: name: Category ID path: ocsf.category_uid source: log + type: integer - groups: - OCSF name: Category @@ -55,6 +57,7 @@ facets: name: Class ID path: ocsf.class_uid source: log + type: integer - groups: - OCSF name: Class @@ -110,6 +113,7 @@ facets: name: Status ID path: ocsf.status_id source: log + type: integer pipeline: type: pipeline name: Cisco Duo diff --git a/cisco_umbrella_dns/assets/logs/cisco-umbrella-dns.yaml b/cisco_umbrella_dns/assets/logs/cisco-umbrella-dns.yaml index 85e9bf03d5947..6f339b32852c2 100644 --- a/cisco_umbrella_dns/assets/logs/cisco-umbrella-dns.yaml +++ b/cisco_umbrella_dns/assets/logs/cisco-umbrella-dns.yaml @@ -190,11 +190,13 @@ facets: name: Activity ID path: ocsf.activity_id source: log + type: integer - groups: - OCSF name: Category ID path: ocsf.category_uid source: log + type: integer - groups: - OCSF name: Category @@ -205,6 +207,7 @@ facets: name: Class ID path: ocsf.class_uid source: log + type: integer - groups: - OCSF name: Class @@ -230,6 +233,7 @@ facets: name: Status ID path: ocsf.status_id source: log + type: integer - groups: - OCSF name: Request URL String diff --git a/lastpass/assets/logs/lastpass.yaml b/lastpass/assets/logs/lastpass.yaml index 3d933739d4c58..2bf642583016c 100644 --- a/lastpass/assets/logs/lastpass.yaml +++ b/lastpass/assets/logs/lastpass.yaml @@ -59,6 +59,7 @@ facets: name: Activity ID path: ocsf.activity_id source: log + type: integer - groups: - OCSF name: Activity Name @@ -69,6 +70,7 @@ facets: name: Category ID path: ocsf.category_uid source: log + type: integer - groups: - OCSF name: Category @@ -79,6 +81,7 @@ facets: name: Class ID path: ocsf.class_uid source: log + type: integer - groups: - OCSF name: Class @@ -119,6 +122,7 @@ facets: name: Status ID path: ocsf.status_id source: log + type: integer pipeline: type: pipeline name: LastPass diff --git a/ssh_check/assets/logs/sshd.yaml b/ssh_check/assets/logs/sshd.yaml index 5c5641b0c860f..c0187b323e04e 100644 --- a/ssh_check/assets/logs/sshd.yaml +++ b/ssh_check/assets/logs/sshd.yaml @@ -28,11 +28,13 @@ facets: name: Activity ID path: ocsf.activity_id source: log + type: integer - groups: - OCSF name: Category ID path: ocsf.category_uid source: log + type: integer - groups: - OCSF name: Category @@ -43,6 +45,7 @@ facets: name: Class ID path: ocsf.class_uid source: log + type: integer - groups: - OCSF name: Class @@ -68,6 +71,7 @@ facets: name: Status ID path: ocsf.status_id source: log + type: integer pipeline: type: pipeline name: Sshd diff --git a/tomcat/assets/logs/tomcat.yaml b/tomcat/assets/logs/tomcat.yaml index 81edd36eb15cc..c0fc2f4369468 100644 --- a/tomcat/assets/logs/tomcat.yaml +++ b/tomcat/assets/logs/tomcat.yaml @@ -87,11 +87,13 @@ facets: name: Activity ID path: ocsf.activity_id source: log + type: integer - groups: - OCSF name: Category ID path: ocsf.category_uid source: log + type: integer - groups: - OCSF name: Category @@ -102,6 +104,7 @@ facets: name: Class ID path: ocsf.class_uid source: log + type: integer - groups: - OCSF name: Class @@ -122,6 +125,7 @@ facets: name: Status ID path: ocsf.status_id source: log + type: integer - groups: - OCSF name: Severity @@ -132,6 +136,7 @@ facets: name: Severity ID path: ocsf.severity_id source: log + type: integer - groups: - OCSF name: Request URL String diff --git a/zeek/assets/logs/zeek.yaml b/zeek/assets/logs/zeek.yaml index bbce300a8559b..2d9b92b9d76d4 100644 --- a/zeek/assets/logs/zeek.yaml +++ b/zeek/assets/logs/zeek.yaml @@ -395,6 +395,7 @@ facets: name: Activity ID path: ocsf.activity_id source: log + type: integer - groups: - OCSF name: Activity Name @@ -405,6 +406,7 @@ facets: name: Category ID path: ocsf.category_uid source: log + type: integer - groups: - OCSF name: Category @@ -415,6 +417,7 @@ facets: name: Class ID path: ocsf.class_uid source: log + type: integer - groups: - OCSF name: Class @@ -430,6 +433,7 @@ facets: name: Severity ID path: ocsf.severity_id source: log + type: integer - groups: - OCSF name: Status @@ -440,6 +444,7 @@ facets: name: Status ID path: ocsf.status_id source: log + type: integer - groups: - OCSF name: Source IP Address From 656fac7566be6e340bb467d4ed573e79116045ac Mon Sep 17 00:00:00 2001 From: Juanpe Araque Date: Thu, 21 May 2026 15:24:09 +0100 Subject: [PATCH 6/6] Add missing envoy.vhost.vcluster.upstream_rq_time.99_5percentile to metadata.csv (#23770) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add missing envoy.vhost.vcluster.upstream_rq_time.99_5percentile to metadata.csv * Add changelog entry for #23770 * Remove changelog entry (metadata-only change) * Exercise Envoy listener immediately before E2E check scrape Add a function-scoped exercise_envoy fixture that issues HTTP requests to the listener right before each E2E test reads /stats. Without this, the time between env setup (where the conftest's requests previously lived) and the agent's check invocation can span multiple of Envoy's 5s flush windows, by which point the histogram interval values have been reset to nan and the parser silently drops them. Also temporarily drop the metadata entry for envoy.vhost.vcluster.upstream_rq_time.99_5percentile to confirm CI now reliably catches missing metadata. * Restore conftest warm-up requests for integration tests The integration test (test_check) relies on Envoy having processed traffic before the check runs to assert metrics like envoy.cluster.ext_authz.error.count. Keep the dd_environment warm-up requests for that and have exercise_envoy re-fire just before each E2E scrape. * Use exercise_envoy fixture for integration tests too Move the Envoy listener warm-up out of dd_environment and into the function-scoped exercise_envoy fixture so it's shared by both the integration tests (which previously relied on a side-effect inside dd_environment) and the E2E tests. Single source of truth for "make sure Envoy has traffic before this test runs." * Wait for an Envoy stats flush after exercising the listener Firing the requests immediately before the agent's scrape isn't enough — Envoy only rolls samples into the histogram interval view at each 5s flush, and the parser drops percentiles whose interval value is nan. Sleep 6s so the scrape lands after the flush that captured the samples but before the next empty flush resets them. * Add envoy.vhost.vcluster.upstream_rq_time.99_5percentile to metadata.csv Envoy 1.14+ emits a 99.5th percentile by default for all histograms, including vhost.vcluster.upstream_rq_time. The other upstream_rq_time families (cluster, cluster.external, etc.) already carry this entry; this one was overlooked when those were added. * Drive continuous traffic for one full Envoy flush interval The previous single burst + 6s sleep relied on Envoy's flush cycle aligning with the test's request time. While that landed in the safe window in practice, the alignment isn't designed — it depends on docker_run timing happening to be a multiple of the flush interval. Spreading requests across the window removes that dependency: the most recent completed flush always has samples, so the interval percentiles are never reset to nan. * Temporarily remove 99_5percentile metadata to validate continuous-load fixture * Derive exercise_envoy timings from a flush-interval constant * Restore envoy.vhost.vcluster.upstream_rq_time.99_5percentile in metadata.csv * Document safe-scrape budget of exercise_envoy * Move exercise_envoy to a background thread Replace the synchronous loop+sleep fixture with a threading.Thread + Event so requests keep firing through the entire test, including while the agent's check is in flight. This removes the finite "safe scrape window" the previous approach relied on — every flush window during the test, including those that close mid-scrape, now has samples. Also drop the 99_5percentile metadata entry temporarily to validate the fixture continues to reliably trigger emission on master CI. * Restore envoy.vhost.vcluster.upstream_rq_time.99_5percentile in metadata.csv --- envoy/metadata.csv | 1 + envoy/tests/conftest.py | 45 ++++++++++++++++++++++++-- envoy/tests/legacy/test_e2e.py | 2 +- envoy/tests/legacy/test_integration.py | 6 +++- envoy/tests/test_e2e.py | 2 +- envoy/tests/test_integration.py | 2 +- 6 files changed, 51 insertions(+), 7 deletions(-) diff --git a/envoy/metadata.csv b/envoy/metadata.csv index 08f9b8e42e8a0..a11fdd89d5532 100644 --- a/envoy/metadata.csv +++ b/envoy/metadata.csv @@ -801,6 +801,7 @@ envoy.vhost.vcluster.upstream_rq_time.75percentile,gauge,,millisecond,,[Legacy] envoy.vhost.vcluster.upstream_rq_time.90percentile,gauge,,millisecond,,[Legacy] Request time milliseconds 90-percentile,-1,envoy,, envoy.vhost.vcluster.upstream_rq_time.95percentile,gauge,,millisecond,,[Legacy] Request time milliseconds 95-percentile,-1,envoy,, envoy.vhost.vcluster.upstream_rq_time.99percentile,gauge,,millisecond,,[Legacy] Request time milliseconds 99-percentile,-1,envoy,, +envoy.vhost.vcluster.upstream_rq_time.99_5percentile,gauge,,millisecond,,[Legacy] Request time milliseconds 99.5-percentile,-1,envoy,, envoy.vhost.vcluster.upstream_rq_time.99_9percentile,gauge,,millisecond,,[Legacy] Request time milliseconds 99.9-percentile,-1,envoy,, envoy.vhost.vcluster.upstream_rq_time.100percentile,gauge,,millisecond,,[Legacy] Request time milliseconds 100-percentile,-1,envoy,, envoy.http.dynamodb.operation.upstream_rq_time.0percentile,gauge,,millisecond,,[Legacy] Time spent on operation_name tag 0-percentile,-1,envoy,, diff --git a/envoy/tests/conftest.py b/envoy/tests/conftest.py index f74c4a32de930..02d584ecb4351 100644 --- a/envoy/tests/conftest.py +++ b/envoy/tests/conftest.py @@ -3,6 +3,8 @@ # Licensed under a 3-clause BSD style license (see LICENSE) import copy import os +import threading +import time import pytest import requests @@ -13,6 +15,13 @@ from .common import DEFAULT_INSTANCE, DOCKER_DIR, FIXTURE_DIR, HOST, URL from .legacy.common import FLAVOR, INSTANCES +# Envoy's default stats_flush_interval (seconds). The exercise_envoy +# fixture drives traffic for one full interval so the most recent +# completed flush window always has samples; if Envoy's default changes +# (or we ever set the interval explicitly in the test bootstrap config), +# update this constant and the fixture timings follow. +ENVOY_STATS_FLUSH_INTERVAL = 5 + @pytest.fixture(scope='session') def fixture_path(): @@ -35,12 +44,42 @@ def dd_environment(): attempts=5, attempts_wait=10, ): - # Exercising envoy a bit will trigger extra metrics - requests.get('http://{}:8000/service/1'.format(HOST)) - requests.get('http://{}:8000/service/2'.format(HOST)) yield instance +@pytest.fixture +def exercise_envoy(): + # Drive continuous traffic through Envoy's listener for the entire + # lifetime of the test. A background thread keeps firing requests + # until the fixture tears down, so every flush window — including + # those that close while the agent's check is in flight — has + # samples. Envoy's text /stats endpoint reports per-interval + # quantile values that get recomputed on every flush; an empty + # flush resets the interval percentiles to nan (see + # hist_approx_quantile in libcircllhist), which the parser would + # then filter out. + stop = threading.Event() + + def fire_loop(): + while not stop.is_set(): + try: + requests.get('http://{}:8000/service/1'.format(HOST)) + requests.get('http://{}:8000/service/2'.format(HOST)) + except requests.RequestException: + pass + stop.wait(ENVOY_STATS_FLUSH_INTERVAL / 10) + + thread = threading.Thread(target=fire_loop, daemon=True) + thread.start() + # Wait one full flush interval so the first non-empty flush rolls + # samples into the interval percentile view before the test body + # starts scraping. + time.sleep(ENVOY_STATS_FLUSH_INTERVAL + 1) + yield + stop.set() + thread.join(timeout=2) + + @pytest.fixture def check(): return lambda instance: Envoy('envoy', {}, [instance]) diff --git a/envoy/tests/legacy/test_e2e.py b/envoy/tests/legacy/test_e2e.py index cd2b6041f0762..0a2dc2f8c4b63 100644 --- a/envoy/tests/legacy/test_e2e.py +++ b/envoy/tests/legacy/test_e2e.py @@ -282,7 +282,7 @@ ] -def test_e2e(dd_agent_check): +def test_e2e(dd_agent_check, exercise_envoy): instance = {"stats_url": "http://{}:8001/stats".format(HOST)} aggregator = dd_agent_check(instance, rate=True) for metric in METRICS: diff --git a/envoy/tests/legacy/test_integration.py b/envoy/tests/legacy/test_integration.py index f50eb7a46e059..60d6942df21eb 100644 --- a/envoy/tests/legacy/test_integration.py +++ b/envoy/tests/legacy/test_integration.py @@ -12,7 +12,11 @@ CHECK_NAME = 'envoy' UNIQUE_METRICS = EXT_AUTHZ_METRICS + RBAC_METRICS -pytestmark = [pytest.mark.integration, pytest.mark.usefixtures('dd_environment'), pytest.mark.flaky] +pytestmark = [ + pytest.mark.integration, + pytest.mark.usefixtures('dd_environment', 'exercise_envoy'), + pytest.mark.flaky, +] def test_success(aggregator, check, dd_run_check): diff --git a/envoy/tests/test_e2e.py b/envoy/tests/test_e2e.py index d8270321e7148..69839ea093cd7 100644 --- a/envoy/tests/test_e2e.py +++ b/envoy/tests/test_e2e.py @@ -21,7 +21,7 @@ @pytest.mark.e2e -def test_e2e(dd_agent_check): +def test_e2e(dd_agent_check, exercise_envoy): aggregator = dd_agent_check(DEFAULT_INSTANCE, rate=True) for metric in PROMETHEUS_METRICS + LOCAL_RATE_LIMIT_METRICS + CONNECTION_LIMIT_METRICS + TLS_INSPECTOR_METRICS: diff --git a/envoy/tests/test_integration.py b/envoy/tests/test_integration.py index 4302ccb502e94..40f26db186439 100644 --- a/envoy/tests/test_integration.py +++ b/envoy/tests/test_integration.py @@ -22,7 +22,7 @@ pytestmark = [ requires_new_environment, pytest.mark.integration, - pytest.mark.usefixtures('dd_environment'), + pytest.mark.usefixtures('dd_environment', 'exercise_envoy'), pytest.mark.flaky, ]