Skip to content

Add interval and Infoblox maxResults to ExternalDNS CR#483

Open
sanjaytripathi97 wants to merge 2 commits into
openshift:mainfrom
sanjaytripathi97:add-infoblox-max-results-and-interval
Open

Add interval and Infoblox maxResults to ExternalDNS CR#483
sanjaytripathi97 wants to merge 2 commits into
openshift:mainfrom
sanjaytripathi97:add-infoblox-max-results-and-interval

Conversation

@sanjaytripathi97

Copy link
Copy Markdown

Related issue

Customers integrating OpenShift External DNS Operator with Infoblox require two external-dns flags that were not exposed through the ExternalDNS CR:

  • --interval — controls how often external-dns synchronizes DNS records (reduces load on Infoblox)
  • --infoblox-max-results — sets the _max_results WAPI query parameter, required for Infoblox grids with thousands of DNS records.

Without these, operator-managed deployments only received a fixed set of hardcoded args. Manual patches to the Deployment were reverted on reconcile because the operator owns and reconciles container args.

This blocked successful Infoblox integration in enterprise environments and forced workarounds such as removing ownerReference from the Deployment (operator-unmanaged), which is unsupported and fragile.

With this PR, Expose both settings declaratively via the ExternalDNS CR and wire them through the operator deployment builder.

New CR fields

CR field external-dns flag Scope
spec.interval --interval All providers
spec.provider.infoblox.maxResults --infoblox-max-results Infoblox only
Both fields are optional. When omitted, external-dns uses its defaults (1 minute sync interval; no _max_results on WAPI requests).

@coderabbitai

coderabbitai Bot commented Jun 1, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@sanjaytripathi97, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 43 minutes and 11 seconds. Learn how PR review limits work.

Your organization has used up its prepaid credits, and credit purchases are no longer available. Enable the review add-on in the billing tab to keep reviews running — you're only billed for reviews past your plan's rate limits ($0.25/file).

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based credits.

🚦 How do rate limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan refill rate.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, the refill rate gradually slows as usage increases. The highest same-day bursts are limited more strictly.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Central YAML (inherited)

Review profile: CHILL

Plan: Enterprise

Run ID: e32c8862-f9c2-4080-a604-bdd362bb09d7

📥 Commits

Reviewing files that changed from the base of the PR and between fc8963e and ecd0951.

⛔ Files ignored due to path filters (1)
  • api/v1beta1/zz_generated.deepcopy.go is excluded by !**/zz_generated*
📒 Files selected for processing (8)
  • api/v1beta1/externaldns_types.go
  • config/crd/bases/externaldns.olm.openshift.io_externaldnses.yaml
  • config/samples/infoblox/operator_v1beta1_infoblox_openshift.yaml
  • docs/usage.md
  • pkg/operator/controller/externaldns/pod.go
  • pkg/operator/controller/externaldns/pod_interval_test.go
  • test/e2e/infoblox.go
  • test/e2e/infoblox_sync_options_test.go
📝 Walkthrough

Walkthrough

Two optional fields are added to the ExternalDNS API: spec.interval (type metav1.Duration, default 1m, constrained to 10s–24h) on ExternalDNSSpec, and spec.provider.infoblox.maxResults (type int, default 0, range 0–10000) on ExternalDNSInfobloxProviderOptions. The CRD YAML schema is updated to reflect both fields with defaults and validation rules. The pod container-args builder gains conditional logic to append --interval= and --infoblox-max-results= flags. New unit tests cover both zero-value and set-value cases, and a new e2e test verifies the flags appear in the operand Deployment's container args. The Infoblox sample YAML and usage documentation are updated with examples.


Important

Pre-merge checks failed

Please resolve all errors before merging. Addressing warnings is optional.

❌ Failed checks (1 error, 1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Ote Binary Stdout Contract ❌ Error The PR modifies test/e2e/infoblox.go, which contains fmt.Printf/Println calls in trustGridTLSCert() that execute during TestMain() (process-level code). These non-JSON stdout writes corrupt the OTE... Redirect fmt output to os.Stderr in trustGridTLSCert() by changing fmt.Printf/Println to use a custom io.Writer or prepending fmt output to standard error streams to preserve JSON stdout contract.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Test Structure And Quality ❓ Inconclusive The custom check targets Ginkgo test code (It/BeforeEach/AfterEach patterns), but the PR introduces standard Go testing.T tests without Ginkgo. Unable to apply Ginkgo-specific quality criteria to n... Clarify whether the check should apply to standard testing.T tests or if it's limited to Ginkgo-based tests. If the intent is to review all test code quality, existing review comments cite two critical issues in infoblox_sync_options_tes...
✅ Passed checks (12 passed)
Check name Status Explanation
Title check ✅ Passed The title directly and clearly summarizes the main changes: adding interval and Infoblox maxResults fields to the ExternalDNS custom resource.
Description check ✅ Passed The description is comprehensive and directly related to the changeset, explaining the business problem, solution, and detailing the new CR fields and their purposes.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Stable And Deterministic Test Names ✅ Passed PR adds only standard Go testing.T tests (TestIntervalArg, TestInfobloxMaxResultsArg, TestExternalDNSInfobloxSyncOptions) with static, deterministic names. No Ginkgo tests (It, Describe, Context, W...
Microshift Test Compatibility ✅ Passed Custom check does not apply: PR adds standard Go tests (testing.T), not Ginkgo e2e tests (It/Describe/Context/When). Check is specifically for Ginkgo-style tests.
Single Node Openshift (Sno) Test Compatibility ✅ Passed The custom check is not applicable. The PR adds two test files, but neither uses Ginkgo syntax (It(), Describe(), Context(), etc.). Both are standard Go tests: pod_interval_test.go is a unit test;...
Topology-Aware Scheduling Compatibility ✅ Passed PR only adds CLI flag configuration fields and pod builder logic; no scheduling constraints (affinity, topology spread, strict anti-affinity, PDBs, or control-plane selectors) are introduced.
Ipv6 And Disconnected Network Test Compatibility ✅ Passed The new e2e test uses Go's standard testing package, not Ginkgo framework. Check precondition "when Ginkgo e2e tests are added" is not met. Additionally, no IPv4 hardcoding or external connectivity...
No-Weak-Crypto ✅ Passed PR introduces only configuration fields (Interval metav1.Duration, MaxResults int) and command-line flag generation. No weak crypto algorithms (MD5, SHA1, DES, RC4, 3DES, Blowfish, ECB), custom cry...
Container-Privileges ✅ Passed PR adds interval and maxResults configuration fields without introducing any container privilege escalations. Security context remains hardened: privileged=false, runAsNonRoot=true, allowPrivilegeE...
No-Sensitive-Data-In-Logs ✅ Passed The PR adds Interval and MaxResults fields which are timing/count configs (non-sensitive). Credentials remain in environment variables with SecretKeyRef, not in logged container args.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@openshift-ci

openshift-ci Bot commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign miciah for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@openshift-ci openshift-ci Bot added the needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. label Jun 1, 2026
@openshift-ci

openshift-ci Bot commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

Hi @sanjaytripathi97. Thanks for your PR.

I'm waiting for a openshift member to verify that this patch is reasonable to test. If it is, they should reply with /ok-to-test on its own line. Until that is done, I will not automatically test new commits in this PR, but the usual testing commands by org members will still work.

Regular contributors should join the org to skip this step.

Once the patch is verified, the new status will be reflected by the ok-to-test label.

I understand the commands that are listed here.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
docs/usage.md (1)

213-214: 💤 Low value

Consider clarifying that interval applies to all providers.

The interval field is provider-agnostic and can be used with AWS, GCP, Azure, BlueCat, and Infoblox. Currently it's only documented in the Infoblox example, which may give the impression it's Infoblox-specific. Consider adding a brief note such as "optional, applies to all providers" or showing it in another provider example.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/usage.md` around lines 213 - 214, Clarify that the interval field is
provider-agnostic by updating the docs: add a short note next to the existing
"interval: 5m" line (or in a shared config section) stating "optional, applies
to all providers (AWS, GCP, Azure, BlueCat, Infoblox)" and/or show the same
interval comment in at least one other provider example so readers don't assume
it's Infoblox-specific; update the text around the example to reference the
global nature of the interval setting and ensure the symbol "interval" and
provider names AWS, GCP, Azure, BlueCat, Infoblox are mentioned.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@docs/usage.md`:
- Around line 213-214: Clarify that the interval field is provider-agnostic by
updating the docs: add a short note next to the existing "interval: 5m" line (or
in a shared config section) stating "optional, applies to all providers (AWS,
GCP, Azure, BlueCat, Infoblox)" and/or show the same interval comment in at
least one other provider example so readers don't assume it's Infoblox-specific;
update the text around the example to reference the global nature of the
interval setting and ensure the symbol "interval" and provider names AWS, GCP,
Azure, BlueCat, Infoblox are mentioned.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Central YAML (inherited)

Review profile: CHILL

Plan: Enterprise

Run ID: 2b2c06bf-7b29-4061-b5b4-9062bd77b002

📥 Commits

Reviewing files that changed from the base of the PR and between f97b82d and 8d02f77.

⛔ Files ignored due to path filters (2)
  • api/v1alpha1/zz_generated.deepcopy.go is excluded by !**/zz_generated*
  • api/v1beta1/zz_generated.deepcopy.go is excluded by !**/zz_generated*
📒 Files selected for processing (8)
  • api/v1alpha1/externaldns_types.go
  • api/v1beta1/externaldns_types.go
  • api/v1beta1/externaldns_webhook.go
  • config/crd/bases/externaldns.olm.openshift.io_externaldnses.yaml
  • config/samples/infoblox/operator_v1beta1_infoblox_openshift.yaml
  • docs/usage.md
  • pkg/operator/controller/externaldns/pod.go
  • pkg/operator/controller/externaldns/pod_interval_test.go

@theiratenate

Copy link
Copy Markdown

@alebedev87 @grzpiotrowski Please review when you can. We have some developers looking to use CNAME records in our root domain and need the max results added to resolve their plight.

@alebedev87

Copy link
Copy Markdown
Contributor

@theiratenate, @sanjaytripathi97 : https://redhat.atlassian.net/browse/RFE-6781 is not accepted yet. But I think it would be easier to do so if the PR will be in a ready state. Let me have a look.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We don't need updates in alpha version, only beta update is enough.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed, I've reverted all v1alpha1 changes. The new fields (spec.interval and spec.provider.infoblox.maxResults) are only added to v1beta1, and the CRD schema is regenerated for the storage version accordingly.

Comment on lines +105 to +110
// Interval specifies the interval between two consecutive synchronizations
// performed by ExternalDNS. When omitted, ExternalDNS uses its default
// interval of 1 minute.
//
// +kubebuilder:validation:Optional
// +optional

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Default value as long as minimum and maximum values should be set the CRD. This will enable early validation without saving the state in the server. The default value should be the same at the current default to not change the existing behavior.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done. spec.interval now has CRD-level validation:

  • default:1m (matches external-dns default)
  • minimum: 10s
  • maximum: 24h

The operator passes --interval only when the value is greater than zero. With the CRD default of 1m, new resources get the same behavior as external-dns today without requiring users to set the field explicitly.

Comment thread api/v1beta1/externaldns_types.go Outdated
Comment on lines +377 to +379
// +kubebuilder:validation:Optional
// +kubebuilder:validation:Minimum=1
// +optional

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similar comment, we need to set the default which is the same as the current used one and we need to think of what the maximum value can be reasonable for the max results.

Overall, I had small reservations about exposing max_results because the problems related to the need to customize this parameter are supposed to be fixed with pagination which is built-in in the webhook implementation. However I can see that the webhook implementation does suppose max_results parameter too, so this field will make sense in the future too (when we'll migrate to the webhook provider for Infoblox).

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done. spec.provider.infoblox.maxResults now has CRD-level validation:

  • default: 0 (current behavior _max_results is not sent to WAPI)
  • minimum: 0
  • maximum: 10000

The operator only adds --infoblox-max-results when the value is greater than zero, so existing Infoblox deployments are unchanged unless the user opts in.

I agree this field will remain useful even after a potential move to the Infoblox webhook provider, since that implementation also supports max_results. This gives customers a supported way to configure it today via the ExternalDNS CR.

Comment thread api/v1beta1/externaldns_webhook.go Outdated
Comment on lines +76 to +77
r.validateInterval(),
r.validateInfobloxMaxResults(),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We prefer CRD validation over webhook because it's earlier in the life cycle of the CR.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed I've removed validateInterval() and validateInfobloxMaxResults() from the webhook. Validation for both fields is now handled entirely via CRD schema defaults and bounds, so invalid values are rejected earlier without relying on the admission webhook.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unit test is a good start but we will need some e2e test scenarios to back up this change. You can find the e2e tests in test/e2e/ (from the root of repository).

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added test/e2e/infoblox_sync_options_test.go with TestExternalDNSInfobloxSyncOptions. The test:

  1. Creates an Infoblox ExternalDNS CR with interval and maxResults set
  2. Waits for the operand deployment to become available
  3. Verifies the external-dns container args include --interval=... and --infoblox-max-results=...

The test is skipped unless the e2e suite runs against the Infoblox provider. Unit tests in pod_interval_test.go continue to cover the deployment arg builder logic, let me know if this is fine.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@test/e2e/infoblox_sync_options_test.go`:
- Around line 81-94: The code at the end of the container validation loop
returns true, nil unconditionally at line 94, even if no external-dns container
was found and validated. To prevent false-positive test passes, introduce a
boolean flag before the loop to track whether an external-dns container was
found. Set this flag to true after successfully validating a container that has
a name starting with "external-dns" and contains both the intervalArg and
maxResultsArg arguments. At the end of the function, check this flag and return
false if no matching external-dns container was ever found and validated,
ensuring the test fails when expected containers are missing.
- Around line 57-59: The defer cleanup block in the test is ignoring the error
returned from common.KubeClient.Delete(context.TODO(), &extDNS) by using the
underscore operator, which violates the coding guideline of never ignoring error
returns and can hide leaked Custom Resources. Replace the underscore with a
proper error variable and handle the error appropriately by either logging it or
asserting that the deletion should succeed, rather than discarding the error.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Central YAML (inherited)

Review profile: CHILL

Plan: Enterprise

Run ID: 914281a1-313e-4627-bee0-d63885c658f7

📥 Commits

Reviewing files that changed from the base of the PR and between 8d02f77 and fc8963e.

⛔ Files ignored due to path filters (1)
  • api/v1beta1/zz_generated.deepcopy.go is excluded by !**/zz_generated*
📒 Files selected for processing (6)
  • api/v1beta1/externaldns_types.go
  • config/crd/bases/externaldns.olm.openshift.io_externaldnses.yaml
  • pkg/operator/controller/externaldns/pod.go
  • pkg/operator/controller/externaldns/pod_interval_test.go
  • test/e2e/infoblox.go
  • test/e2e/infoblox_sync_options_test.go
🚧 Files skipped from review as they are similar to previous changes (3)
  • pkg/operator/controller/externaldns/pod.go
  • pkg/operator/controller/externaldns/pod_interval_test.go
  • config/crd/bases/externaldns.olm.openshift.io_externaldnses.yaml

Comment on lines +57 to +59
defer func() {
_ = common.KubeClient.Delete(context.TODO(), &extDNS)
}()

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Handle cleanup delete failures instead of discarding them.

Line 58 drops the delete error, which can hide leaked CRs and make later e2e runs flaky.

Suggested fix
 import (
 	"context"
 	"fmt"
 	"strings"
 	"testing"
 	"time"

 	"github.com/openshift/external-dns-operator/test/common"

 	appsv1 "k8s.io/api/apps/v1"
+	apierrors "k8s.io/apimachinery/pkg/api/errors"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/apimachinery/pkg/types"
 	"k8s.io/apimachinery/pkg/util/wait"
 )
@@
 	defer func() {
-		_ = common.KubeClient.Delete(context.TODO(), &extDNS)
+		if err := common.KubeClient.Delete(context.TODO(), &extDNS); err != nil && !apierrors.IsNotFound(err) {
+			t.Errorf("failed to delete external DNS %q: %v", testInfobloxSyncExtDNSName, err)
+		}
 	}()

As per coding guidelines, **/*.go: "Never ignore error returns".

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@test/e2e/infoblox_sync_options_test.go` around lines 57 - 59, The defer
cleanup block in the test is ignoring the error returned from
common.KubeClient.Delete(context.TODO(), &extDNS) by using the underscore
operator, which violates the coding guideline of never ignoring error returns
and can hide leaked Custom Resources. Replace the underscore with a proper error
variable and handle the error appropriately by either logging it or asserting
that the deletion should succeed, rather than discarding the error.

Source: Coding guidelines

Comment on lines +81 to +94
for _, container := range deployment.Spec.Template.Spec.Containers {
if !strings.HasPrefix(container.Name, "external-dns") {
continue
}
if !containsArg(container.Args, intervalArg) {
t.Logf("container %s is missing %q in args: %v", container.Name, intervalArg, container.Args)
return false, nil
}
if !containsArg(container.Args, maxResultsArg) {
t.Logf("container %s is missing %q in args: %v", container.Name, maxResultsArg, container.Args)
return false, nil
}
}
return true, nil

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Fail when no external-dns container is found to avoid false-positive passes.

Line 94 returns success even if the loop never validates any container args (e.g., name mismatch), so this test can pass without checking the new flags.

Suggested fix
 		intervalArg := fmt.Sprintf("--interval=%s", syncInterval.Duration.String())
 		maxResultsArg := fmt.Sprintf("--infoblox-max-results=%d", testInfobloxMaxResults)
+		foundExternalDNSContainer := false
 		for _, container := range deployment.Spec.Template.Spec.Containers {
 			if !strings.HasPrefix(container.Name, "external-dns") {
 				continue
 			}
+			foundExternalDNSContainer = true
 			if !containsArg(container.Args, intervalArg) {
 				t.Logf("container %s is missing %q in args: %v", container.Name, intervalArg, container.Args)
 				return false, nil
 			}
 			if !containsArg(container.Args, maxResultsArg) {
 				t.Logf("container %s is missing %q in args: %v", container.Name, maxResultsArg, container.Args)
 				return false, nil
 			}
 		}
+		if !foundExternalDNSContainer {
+			t.Log("external-dns container not found in deployment")
+			return false, nil
+		}
 		return true, nil
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@test/e2e/infoblox_sync_options_test.go` around lines 81 - 94, The code at the
end of the container validation loop returns true, nil unconditionally at line
94, even if no external-dns container was found and validated. To prevent
false-positive test passes, introduce a boolean flag before the loop to track
whether an external-dns container was found. Set this flag to true after
successfully validating a container that has a name starting with "external-dns"
and contains both the intervalArg and maxResultsArg arguments. At the end of the
function, check this flag and return false if no matching external-dns container
was ever found and validated, ensuring the test fails when expected containers
are missing.

Sanjay Tripathi added 2 commits June 22, 2026 14:47
Expose sync interval and Infoblox WAPI pagination settings in the
ExternalDNS API so operator-managed deployments can integrate with large
Infoblox grids without manual deployment patches.
Revert v1alpha1 API changes, move validation to CRD defaults and bounds,
remove webhook validators, and add an Infoblox e2e test for operand args.
@sanjaytripathi97 sanjaytripathi97 force-pushed the add-infoblox-max-results-and-interval branch from fc8963e to ecd0951 Compare June 22, 2026 09:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants