Define dataflows for community-owned integrations (batch 2, individually-maintained tiles) - #3097
Define dataflows for community-owned integrations (batch 2, individually-maintained tiles)#3097philjlee wants to merge 1 commit into
Conversation
Add assets/dataflows.yaml to 10 community-maintained integration tiles that ship no Agent check, each owned by individual maintainers with no @DataDog/... team CODEOWNER. Each entry is derived mechanically: a metadata.csv with at least one metric row yields a metrics dataflow, an assets/logs/ pipeline yields a logs dataflow. Dataflow IDs are <app_id from manifest.json>-<data_type>. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
CI note:
|
| PR | Files | Dirs already drifting on master |
run / Validate |
|---|---|---|---|
| #3094 | 4 | 2 (gatekeeper, kepler) |
fail |
| #3095 | 24 | 6 | fail |
| #3096 | 43 | 16 | fail |
| #3097 | 10 | 0 | pass |
#3097 is the natural control: same generator, same file shape, zero drifting directories, and run / Validate is green. That isolates the failure to pre-existing drift rather than to anything about dataflows.yaml.
Two further confirmations:
-
The string
dataflowdoes not appear anywhere in the validation output of the failing runs. (It appears 5 times in each log, all ingit fetchbranch-listing noise.) No validator names adataflows.yamlfile. The failing steps are only "Validate default configuration files" and "Validate configuration models". -
masteremits the identical errors. The lastValidate repositoryrun onmaster— run 30528431295 at9c197fe, the exact SHA these branches are based on — already reports, verbatim:##[error]File `conf.yaml.example` is not in sync, run "ddev validate config kepler -s" ##[error]File `defaults.py` is not in sync, run "ddev validate models gatekeeper -s" ##[error]File `instance.py` is not in sync, run "ddev validate models gatekeeper -s"That master run has 182
is not in syncerrors across 39 integration directories, and 10 of the last 10Validate repositoryruns onmasterfailed. Because PRs run withTARGET=changed, touching any of those 39 directories pulls the drift into scope.
This PR adds one new file per directory and changes nothing that ddev validate config/models inspects. Fixing the repo-wide codegen drift is out of scope here.
Jira: TXP-277
What
Adds
assets/dataflows.yamlto 10 integrations (11 dataflow entries: 8metrics, 3logs).This is batch 2 of the integrations-extras dataflows backfill. Batch 1 is #3093 (74 Datadog-team-owned integrations). The two batches touch disjoint directories and are both based on
master, so they are independent and will not conflict.Selection criteria
An integration is in scope for this PR if all of the following hold, computed from the repo at
9c197fe:manifest.json(the dataflows validator hard-requires one).assets/dataflows.yaml.metadata.csvwith at least one data row, and/or a log pipeline underassets/logs/. Nodata_typewas ever guessed..github/CODEOWNERSresolves<dir>/assets/dataflows.yaml(last-match-wins) to an owner set containing no@DataDog/...team.fluxcd/traefik(README-only, disabled in APW).Then, within that set of 81, this PR takes the cluster with individually-maintained tiles: These paths are owned only by individual GitHub handles or personal email addresses, and the integration ships no Agent check — it is a tile-only listing.
Content
Every file follows the uniform template already used by the 14 pre-existing files in this repo:
idismanifest.json'sapp_idplus-<data_type>. That is the mechanical rule the 17 existing entries follow 17/17 — not the directory name. For all 81 integrations in batch 2 the two happen to coincide after slugification, butapp_idis the authority.metadata.csvrows produce ametricsentry, anassets/logs/pipeline produces alogsentry, and integrations with both get both (metrics first).Integrations in this PR
apache-apisixapolloartiecontrastsecurityfederatoraigigamonloadrunner_professionalmongodb_atlasnomadtykCoverage
Assuming batch 1 (#3093) merges, coverage of
assets/dataflows.yamlacross the 260 integration directories in this repo moves:masterBatch 1 + batch 2 together complete the entire mechanical bucket — every integration in the repo with an unambiguous local
data_typesignal.Ownership — please read
None of the directories in this PR have a
@DataDog/...team CODEOWNER; they resolve to third-party organizations, vendor support aliases, or individual community maintainers.Per #2925 ("Define dataflows for saas-integrations") and consistent repo practice, external CODEOWNERS approval is not required to merge here —
mastercarries no branch ruleset requiring it, and Datadog employees routinely land mechanical sweeps across community-owned directories (#2810, #2829, #2878, #2957, #3000). #2925 in particular created 13 of the 14 existingdataflows.yamlfiles and was approved only by Datadog reviewers.That said, this PR is intentionally a draft so that no review request has been sent to any external maintainer yet. Marking it ready will fan review requests out to the owners listed in the table above. That should be a deliberate decision, not a side effect.
Validation
These files were validated by running the real upstream validator, not by static inspection.
DataflowsValidationHandlerfromddoghq/dd-source@main(domains/integrationscatalog/libs/catalogassetslib/dataflows_validation_handler.go) was executed viago test -overlay, with only the COBS-backed dataflows client and the deployment handler stubbed out. The validation code path itself is byte-for-byte upstream — the handler file was diffed againstddoghq/dd-source@mainand is identical, including the current 14-valuevalidDataTypeslist (federated_sql_queriesincluded).Results:
master+ batch 1 (Define dataflows for Datadog-owned integrations (batch 1) #3093) + all of batch 2: 169 files, 187 dataflow IDs, 0 failures — which is what proves dataflow ID uniqueness holds globally, across both batches and the pre-existing files. (HandleLibraryenforces "only one app can provide a dataflow".)The harness was negative-tested first, and correctly rejects all of: missing
always_on; adata_typeoutside the enum; anidviolating^[a-z0-9-]+$; anidshorter than 3 characters; a file with neitherprovidesnoruses; a.ymlextension; a missingmanifest.json; and the same dataflow ID provided by two apps. A known-good baseline file is accepted. So a pass here means something.APW also posts a
validate-dataflowsstatus check on extras PRs, so there will be pre-merge feedback from the pipeline itself as well.CI note —
run / Validateredness is pre-existingThe
run / Validatejob is already failing onmasterand has been for at least the last 10 runs of that workflow. Concrete evidence at the exact SHA this branch is based on:master@9c197fe2c9ff8864d1fe84274298818aac67853f, jobrun / Validatefailed at "Validate default configuration files" and "Validate configuration models", with 182is not in syncerrors spanning 39 integration directories.Because the workflow runs with
TARGET=changedon PRs, touching a directory pulls that pre-existing drift into this PR's scope even though this PR only adds a new file and changes nothing thatddev validate config/modelsinspects. None of the directories in this PR appear in that pre-existing failure list. This is unrelated to dataflows and is not something this PR attempts to fix.Deferred, not in scope
Nothing was dropped from this PR for an ambiguous
data_type— every integration in the batch-2 set mapped cleanly tometricsand/orlogs. What remains unaddressed repo-wide after batch 1 + batch 2 (91 directories) is the research bucket, which needs schema decisions rather than scripting:rumvalue invalidDataTypes, so no legal file can be written.cfssl,cybersixgill_actionable_alerts,go_pprof_scraper,isdown,reboot_required) — service checks map to nodata_type.events+direction: outboundis the least-bad fit but has not been ratified by anyone.manifest.json(aerospike_enterprise,scamalytics,warpstream, plusfluxcd/traefikwhich are README-only and explicitly disabled in APW) — the validator requires a manifest.Related: #3093 (batch 1), #2925 (the original dataflows PR for saas-integrations).
🤖 Generated with Claude Code
Addendum: merge-gating, measured
Two things worth stating precisely, since the "can Datadog land this on community-owned directories?" question is the only real objection to this batch.
1.
devflow/mergegatewill show "N approvals missing". It is advisory, not a required check. Six of the twenty most recently merged PRs in this repo merged while mergegate was pending or failed:failure(1 issue: CODEOWNERS missing) and was merged ~15 hours later regardless.1 pending: 11 approvals missing.billable_onlyfilter to analytics metrics (default: True) #3024, Pre-sort map keys inside list items in _tests.yaml fixtures #3027, Feat/re prometheus endpoint gauges and dbkeys deprecation #3078, Bump ping to 1.0.3 #3081 likewise merged with mergegate stillin_progress.2. There is now a direct precedent for the solely-externally-owned case, not just the co-owned one. #2925 (the original dataflows PR) only ever touched directories that already carried a
@DataDog/...team, so it did not settle the harder case that this batch is made of. #3022 does: it modified/cloudzero/, whose CODEOWNERS line is nine external individuals and no Datadog team, and it was approved byWyrine,sarah-witt, andsteveny91— none of them CloudZero owners — then merged.reviewDecisionwasAPPROVED, which GitHub would not report if CODEOWNERS review were enforced.What is enforced on
masteris GitHub's ordinary "at least one approving review" rule, satisfied by any reviewer with write access. The practical requirement for this PR is therefore one Datadog approval, not sign-off from the maintainers in the table above.Caveat, stated honestly:
GET /repos/DataDog/integrations-extras/branches/master/protectionreturns 404 for non-admin tokens, so the classic branch-protection config could not be read directly. The conclusions above are inferred from ruleset queries (only an org-level tag ruleset exists;rules/branches/masteris empty) and from the merge behaviour of 20 recent PRs. Someone with admin access can confirm.None of this changes the fact that this PR is a draft and no external maintainer has been notified. Marking it ready is what sends the review requests, and that should stay a deliberate step.