Major expansion of supported integrations - #58
Open
hdm wants to merge 2 commits into
Open
Conversation
hdm
force-pushed
the
experiment-auto-port
branch
from
August 17, 2026 03:52
fbaa4ab to
accaa09
Compare
hdm
force-pushed
the
experiment-auto-port
branch
from
August 18, 2026 03:07
40a2aeb to
0ba249a
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds 62 integrations (44 → 106), and builds the test and documentation infrastructure needed to trust them. Along the way it fixes a set of defects that had shipped silently — several integrations in the existing catalog could never have worked.
What's new
62 integrations, bringing the catalog to 106 (101 inbound, 3 internal, 2 outbound).
Full list
absoluteadguard-homearuba-clearpassasimilybigfixbitdefender-gravityzonebmc-discoverycheckmk-rawcisco-secure-endpointcybereasoncyberwatchextrahopfleet-osqueryforemanforescout-counteractforescout-eyeinspectfrontline-vmglpigreenbonegreenbone-scanhome-assistanticinga2illumio-coreinfobloxitopjumpcloudkennalansweeperlibrenmsmikrotik-routerosnautobotnetdatanetdisconozomi-networksntopngnutanix-prismocs-inventoryopen-auditopennms-horizonopenwrtopnsensepalo-alto-device-securityphpipampiholeportainerpuppetdbquest-kaceredhat-insightsslurpitsophos-centralsynology-dsmtactical-rmmtp-link-omadatrellix-epotrend-vision-onetruenasubiquiti-unifi-protectubiquiti-unifi-site-managerunraiduptycsworkspace-one-uemzabbixTest infrastructure
There was no test gate before this PR — the only CI job regenerated the catalog. Three harnesses now exist:
tests/run.pyscan.runzero.gztests/run_containers.pytests/run_live.py.env, with per-integration match rulesThe 17 containerized integrations are marked
beta; the rest arealpha.Authentication and pagination, each confirmed against the vendor's own documentation:
carbon-blackcould not authenticate against a real tenant.X-Auth-Tokenmust be<API Secret Key>/<API ID>, and the Org Key belongs only in the URL path — it was being used as the header's second component, and no API-ID parameter was declared at all. Adding one is a breaking config change, called out at the top of that README.ivanti_neuronssent the raw token response body as a Bearer credential instead of theaccess_tokenfield inside it, and had three further aborts (None - 1on an absent@odata.count, directdata['value']access, no guard on a missing@odata.nextLink). Its paging bound was alsolen < count - 1, which silently dropped the final page of every walk.bitsightre-fetched page one indefinitely. Both loops passedparams=while following thelinks.nextcursor, and the HTTP helper replaces the query string rather than merging it.frontline-vmhad already hit and documented this exact trap. Reverting the fix now trips theunique_idsinvariant, which makes the duplicate fetch visible rather than merely changing a count.Run-aborting bugs — Starlark has no exception handling, so the following errors interrupted
mainbefore they were addressed:parse_time()on an unparseable value aborts the script. Checking the return value does not help; it never returns. Values are now shape-checked with a regex first.runzero-task-synchad the same class of bug viagzip_decompresson a pre-gzip task, which silently stopped every subsequent task from ever syncing.networkInterfaces=[None]aborted the run in 13 integrations plusboilerplate.drataconcatenated a string with thetypebuiltin, so the first device carrying a compliance-check type Drata added later took down the entire import.Documentation
Every integration README now carries
## Asset identityand## Future— 106 of 107 (boilerplateis a template and correctly has neither).## Asset identityis a decision record derived from the code, not aspiration: what the foreign ID is built from, whether it is stable and tenant-unique, and why thematchBehaviorfollows. Where the code and the governing rule disagree, the README says so rather than papering over it. Notable honest findings:ubiquiti-unifi-networkuses a MAC as its foreign ID while discarding UniFi's stable per-site id;wazuhcomposes a recycled ordinal with a cluster-node-derived prefix that flips on rebalance;ghostkeys on repository name while fetching and discardingrepo_id;cyberint'sdomain.replace(".","-")is non-injective, sofoo.example.comandfoo-example.commerge.Conventions established
maturity—alpha/beta/stable, surfaced indocs/integrations.json.version— sequential integer, replacing the date-likeYYMMDD00that read confusingly next tominVersion.deviceType— set only where the source carries genuine form-factor signal, using runZero's canonical vocabulary. 24 integrations were deliberately left unset because their API has no such field; an invented type is worse than none, since it overrides fingerprinting with a guess."type": "secret".Verification
Plus the platform-side compat gate, which parses every CONFIG, compiles against the engine builtins and asserts a top-level
main:All four are green as of this description.