• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Azure / karpenter-provider-azure / 38790432322
95%
main: 95%

Build:
Build:
LAST BUILD BRANCH: sakwa/localdns-forward-health-knobs
DEFAULT BRANCH: main
Ran 15 Oct 2026 07:19PM UTC
Jobs 1
Files 199
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

15 Oct 2026 05:35PM UTC coverage: 94.827% (-0.07%) from 94.892%
38790432322

Pull #2005

github

kwaksaewon
feat(localdns): expose forward plugin health knobs on AKSNodeClass

LocalDNS forward-plugin health knobs are carried end to end by the platform —
the hcp proto has them, AgentBaker renders both directives into the Corefile
(health_check <duration> [no_rec], failfast_all_unhealthy_upstreams), and the
NAP getNodeBootstrapping model now maps them. Karpenter was the last gap: an
AKSNodeClass author had no way to set either, so for NAP-provisioned pools the
knobs were unreachable in practice.

Add failfastAllUnhealthyUpstreams and healthCheck (duration, noRec) to
LocalDNSZoneOverride, carry them through the swagger contract into
convertLocalDNSZoneOverrideToModel, and regenerate the CRDs and clients.

Motivating case: an upstream DNS outage where localDNS kept forwarding at dead
servers and prevented them from recovering. Failing fast is what stops localDNS
amplifying an upstream outage.

Notes for reviewers:

- domain is deliberately not exposed. The forward plugin accepts it and
  AgentBaker renders it, but it is reserved in the control plane's
  LocalDNSHealthCheck, so there is no field to convert it into.

- Neither knob is zone-restricted. AgentBaker renders both on whatever zone
  carries them, and the control plane applies no zone rule; serve_stale_policy
  right below them in the same template does carry a root-zone guard, so the
  absence is a per-knob decision made where they are rendered, not an oversight.
  The cluster.local hazard is documented on the field instead.

- duration uses karpv1.NillableDuration to match cacheDuration and
  serveStaleDuration on the same struct. The shared pattern excludes sub-second
  values, so 500ms cannot be expressed here even though CoreDNS accepts it.
  Called out in the field doc.

- A zero NillableDuration marshals to the string "Never" rather than being
  omitted, so has(self.healthCheck.duration) is true even when the author set
  nothing. The XValidation rule tests for "Never" explicitly; without that
  ... (continued)
Pull Request #2005: feat(localdns): expose forward plugin health knobs on AKSNodeClass

29 of 90 new or added lines in 4 files covered. (32.22%)

1 existing line in 1 file now uncovered.

81120 of 85545 relevant lines covered (94.83%)

0.95 hits per line

Uncovered Changes

Lines Coverage ∆ File
41
15.82
-5.36% pkg/provisionclients/models/local_dns_override.go
14
0.0
pkg/provisionclients/models/local_dns_health_check.go
6
74.84
-0.03% pkg/apis/v1beta1/zz_generated.deepcopy.go

Coverage Regressions

Lines Coverage ∆ File
1
98.66
0.0% pkg/controllers/nodeclass/status/staticvalidation.go
Jobs
ID Job ID Ran Files Coverage
1 38790432322.1 15 Oct 2026 07:19PM UTC 199
94.83
GitHub Action Run
Source Files on build 38790432322
  • Tree
  • List 199
  • Changed 4
  • Source Changed 0
  • Coverage Changed 4
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Pull Request #2005
  • PR Base - main (#38666205972)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc