Skip to content

OCPBUGS-98102: Add validations Azure Dualstack#10677

Open
sadasu wants to merge 2 commits into
openshift:mainfrom
sadasu:dualstack-fixes
Open

OCPBUGS-98102: Add validations Azure Dualstack#10677
sadasu wants to merge 2 commits into
openshift:mainfrom
sadasu:dualstack-fixes

Conversation

@sadasu

@sadasu sadasu commented Jul 8, 2026

Copy link
Copy Markdown
Contributor
  1. Azure requires IPv6 subnets to have /64 address prefix. That implies that VPCs need to be created with address prefixes larger than /64. Azure recommends /56 CIDR while creating dualstack IPv6 VPCs. This fix adds a validation that ensures the network configuration in the install-config is validated for this condition.
  2. Another validation to prevent ipv6 only installs

Fix includes unit tests for both validations.

Summary by CodeRabbit

Summary by CodeRabbit

  • Bug Fixes

    • Improved Azure networking configuration validation for dual-stack installs with stricter IPv6 CIDR rules.
    • Added checks to reject unsupported single-stack IPv6 setups and enforce valid dual-stack IPv6 requirements and prefix alignment.
    • Validation errors are now more specific to the exact machine network entry that is invalid.
  • Tests

    • Expanded automated coverage for IPv6/dual-stack networking scenarios, including missing and malformed CIDR cases.

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

Pipeline controller notification
This repo is configured to use the pipeline controller. Second-stage tests will be triggered either automatically or after lgtm label is added, depending on the repository configuration. The pipeline controller will automatically detect which contexts are required and will utilize /test Prow commands to trigger the second stage.

For optional jobs, comment /test ? to see a list of all defined jobs. To trigger manually all jobs from second stage use /pipeline required command.

This repository is configured in: LGTM mode

@coderabbitai

coderabbitai Bot commented Jul 8, 2026

Copy link
Copy Markdown
📝 Walkthrough

Walkthrough

Azure platform validation now checks machine-network IPv6 CIDRs for single-stack and dual-stack constraints, including required IPv6 presence and permitted prefix lengths. Tests add per-case InstallConfig inputs and cover valid and invalid networking configurations. TLS tests strengthen private-key round-trip checks.

Changes

Azure IPv6 validation

Layer / File(s) Summary
Machine-network validation
pkg/types/azure/validation/platform.go
ValidatePlatform aggregates checks for IPv6 presence, nibble-boundary prefixes, and dual-stack prefix restrictions.
Machine-network validation tests
pkg/types/azure/validation/platform_test.go
Adds table-driven cases for missing networks, invalid prefixes, valid dual-stack CIDRs, and indexed aggregated errors.

TLS test updates

Layer / File(s) Summary
Private-key round-trip tests
pkg/asset/tls/utils_test.go
Adds PKCS#8 equality checks, guarded assertions, and a lint directive for the test package.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Suggested labels: verified

🚥 Pre-merge checks | ✅ 15
✅ Passed checks (15 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: adding Azure dual-stack validation.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
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 No Ginkgo titles were added; the changed tests use static, deterministic t.Run names and contain no dynamic values.
Test Structure And Quality ✅ Passed PASS: The changed tests are isolated table-driven unit tests; no cluster waits, cleanup gaps, or Ginkgo patterns, and they match existing repo style.
Microshift Test Compatibility ✅ Passed Only unit tests changed; no Ginkgo e2e specs or MicroShift-unsupported APIs/features were added.
Single Node Openshift (Sno) Test Compatibility ✅ Passed No new Ginkgo e2e tests were added; the changed files are standard Go unit tests using testing, with no multi-node or HA assumptions.
Topology-Aware Scheduling Compatibility ✅ Passed PASS: The actual diff only changes TLS tests; no deployments, replicas, affinities, nodeSelectors, or topology-aware scheduling logic were introduced.
Ote Binary Stdout Contract ✅ Passed No process-level stdout writes or suite setup were added in the changed files; the edits are library validation and standard unit tests only.
Ipv6 And Disconnected Network Test Compatibility ✅ Passed No new Ginkgo e2e tests were added; the changed tests are plain unit tests with no external connectivity or IPv6-host URL issues.
No-Weak-Crypto ✅ Passed PASS: Touched code uses only standard RSA/ECDSA/X.509 test helpers and Azure CIDR validation; no weak primitives or unsafe secret comparisons found.
Container-Privileges ✅ Passed Only pkg/asset/tls/utils_test.go changed; no K8s/container manifests or privilege flags (privileged, hostPID/Network/IPC, allowPrivilegeEscalation, SYS_ADMIN) were added.
No-Sensitive-Data-In-Logs ✅ Passed No new logging calls or sensitive-data dumps were added; the touched code only emits validation errors and test assertions.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 golangci-lint (2.12.2)

Error: can't load config: unsupported version of the configuration: "" See https://golangci-lint.run/docs/product/migration-guide for migration instructions
The command is terminated due to an error: can't load config: unsupported version of the configuration: "" See https://golangci-lint.run/docs/product/migration-guide for migration instructions


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

@openshift-ci
openshift-ci Bot requested review from jhixson74 and patrickdillon July 8, 2026 21:13
@sadasu
sadasu force-pushed the dualstack-fixes branch from 0ed1493 to eae6033 Compare July 8, 2026 21:15
@sadasu

sadasu commented Jul 8, 2026

Copy link
Copy Markdown
Contributor Author

/test e2e-azure-ovn-dualstack-ipv6-primary-techpreview

@sadasu

sadasu commented Jul 8, 2026

Copy link
Copy Markdown
Contributor Author

/test

@sadasu

sadasu commented Jul 8, 2026

Copy link
Copy Markdown
Contributor Author

/test e2e-aws-ovn-dualstack-ipv6-primary-techpreview

@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

🧹 Nitpick comments (1)
pkg/validation/network/dualstack.go (1)

24-29: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Redundant CIDR re-parsing.

machineNetwork is already an ipnet.IPNet (embeds net.IPNet). Stringifying it and re-parsing via net.ParseCIDR to get back ip/ipNet is unnecessary work and an avoidable second failure path — the fields are already directly accessible.

♻️ Proposed simplification
-	for i, machineNetwork := range machineNetworks {
-		ip, ipNet, err := net.ParseCIDR(machineNetwork.String())
-		if err != nil {
-			// Skip invalid CIDRs - they'll be caught by other validation
-			continue
-		}
-
-		if ip.To4() != nil {
+	for i, machineNetwork := range machineNetworks {
+		if machineNetwork.IP.To4() != nil {
 			hasIPv4 = true
 		} else {
-			// IPv6 address
-			prefixLen, _ := ipNet.Mask.Size()
-			if prefixLen == 64 {
+			// IPv6 address
+			prefixLen, _ := machineNetwork.Mask.Size()
+			if prefixLen >= 64 {
 				ipv6Slash64Indices = append(ipv6Slash64Indices, i)
 			}
 		}
 	}
🤖 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 `@pkg/validation/network/dualstack.go` around lines 24 - 29, The dual-stack
validation logic is unnecessarily re-parsing each machine network CIDR in the
machineNetwork loop, which creates redundant work and a second failure path.
Update the validation code in the dual-stack path to use the existing
ipnet.IPNet fields directly from machineNetwork instead of calling String() and
net.ParseCIDR, and remove the now-unneeded ip/ipNet reparse handling while
preserving the invalid-CIDR skip behavior.
🤖 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 `@pkg/validation/network/dualstack.go`:
- Around line 13-54: The dual-stack CIDR validation wiring is duplicated across
the AWS and Azure platform validators, so move the shared “build []ipnet.IPNet
from ic.MachineNetwork and call ValidateDualStackIPv6CIDR under the networking
path” logic into a single helper in dualstack.go, such as
ValidateDualStackIPv6CIDRFromInstallConfig, and have both platform-specific
validation entrypoints call that helper instead of re-implementing it. Keep the
existing ValidateDualStackIPv6CIDR function as the core checker, and make the
new helper own the InstallConfig-to-networks conversion and fldPath construction
so future platforms can reuse it without copy-paste.
- Around line 34-39: The dual-stack IPv6 prefix check in the validation logic
only matches exact /64 networks, so longer IPv6 prefixes still slip through.
Update the prefix-length condition in the dual-stack validator that uses
ipNet.Mask.Size() so it rejects any IPv6 prefix at or above /64, and add a test
case covering a longer IPv6 prefix (for example in the dualstack validation
tests) to verify it is caught.

---

Nitpick comments:
In `@pkg/validation/network/dualstack.go`:
- Around line 24-29: The dual-stack validation logic is unnecessarily re-parsing
each machine network CIDR in the machineNetwork loop, which creates redundant
work and a second failure path. Update the validation code in the dual-stack
path to use the existing ipnet.IPNet fields directly from machineNetwork instead
of calling String() and net.ParseCIDR, and remove the now-unneeded ip/ipNet
reparse handling while preserving the invalid-CIDR skip behavior.
🪄 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: 5a5c29f4-e879-4dba-afb4-0f71c251ed55

📥 Commits

Reviewing files that changed from the base of the PR and between bb68686 and 0ed1493.

📒 Files selected for processing (6)
  • pkg/types/aws/validation/platform.go
  • pkg/types/aws/validation/platform_test.go
  • pkg/types/azure/validation/platform.go
  • pkg/types/azure/validation/platform_test.go
  • pkg/types/validation/installconfig.go
  • pkg/validation/network/dualstack.go

Comment thread pkg/validation/network/dualstack.go Outdated
Comment thread pkg/validation/network/dualstack.go Outdated
@sadasu sadasu changed the title Add validation to prevent /64 machine networks for Dualstack OCPBUGS-98102: Add validation to prevent /64 machine networks for Dualstack Jul 8, 2026
@openshift-ci-robot openshift-ci-robot added jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. jira/valid-bug Indicates that a referenced Jira bug is valid for the branch this PR is targeting. labels Jul 8, 2026
@openshift-ci-robot

Copy link
Copy Markdown
Contributor

@sadasu: This pull request references Jira Issue OCPBUGS-98102, which is valid. The bug has been moved to the POST state.

3 validation(s) were run on this bug
  • bug is open, matching expected state (open)
  • bug target version (5.0.0) matches configured target version for branch (5.0.0)
  • bug is in the state New, which is one of the valid states (NEW, ASSIGNED, POST)

The bug has been updated to refer to the pull request using the external bug tracker.

Details

In response to this:

AWS and Azure require IPv6 subnets to have /64 address prefix. That implies that VPCs need to be created with address prefixes larger than /64. AWS and Azure recommend /56 CIDR while creating dualstack IPv6 VPCs. This fix adds a validation that ensures the network configuration in the install-config is validated for this condition. Fix includes unit tests.

Summary by CodeRabbit

  • Bug Fixes
  • Improved network validation for cloud installs to catch invalid IPv6 CIDR settings in dual-stack configurations.
  • Added clearer error reporting for machine network entries using unsupported IPv6 /64 ranges when IPv4 is also configured.
  • Applied the new validation across AWS and Azure install flows to help prevent incorrect network setups.

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 openshift-eng/jira-lifecycle-plugin repository.

@sadasu
sadasu force-pushed the dualstack-fixes branch from eae6033 to 91cbdfd Compare July 8, 2026 21:42
@openshift-ci-robot

Copy link
Copy Markdown
Contributor

@sadasu: This pull request references Jira Issue OCPBUGS-98102, which is valid.

3 validation(s) were run on this bug
  • bug is open, matching expected state (open)
  • bug target version (5.0.0) matches configured target version for branch (5.0.0)
  • bug is in the state POST, which is one of the valid states (NEW, ASSIGNED, POST)
Details

In response to this:

AWS and Azure require IPv6 subnets to have /64 address prefix. That implies that VPCs need to be created with address prefixes larger than /64. AWS and Azure recommend /56 CIDR while creating dualstack IPv6 VPCs. This fix adds a validation that ensures the network configuration in the install-config is validated for this condition. Fix includes unit tests.

Summary by CodeRabbit

  • Bug Fixes
  • Strengthened cloud platform network validation with dual-stack IPv6 CIDR checks to reject machine network IPv6 prefixes of /64 or longer when dual-stack is configured.
  • Improved and standardized validation error reporting for invalid IPv6 CIDR settings, applied across both AWS and Azure install flows.
  • Tests
  • Expanded test coverage for valid and invalid dual-stack IPv6 CIDR combinations.

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 openshift-eng/jira-lifecycle-plugin 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 (2)
pkg/validation/network/dualstack.go (2)

1-71: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

No dedicated unit test file for this new validation package.

This is new logic under pkg/validation/network/ with no accompanying dualstack_test.go in the reviewed files/stack layers. Coverage currently comes only indirectly through AWS/Azure platform tests. As per coding guidelines, {cmd,data,pkg}/**/*.go: "All code under ./cmd/..., ./data/..., and ./pkg/... must have unit tests." Direct tests here would also make it easier to cover edge cases (e.g. multiple invalid IPv6 entries, IPv4-only/IPv6-only single-stack, malformed CIDRs) without needing to route through platform-specific test suites.

Do you want me to draft a dualstack_test.go covering these cases?

🤖 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 `@pkg/validation/network/dualstack.go` around lines 1 - 71, This new validation
logic in ValidateDualStackIPv6CIDR and
ValidateDualStackIPv6CIDRFromInstallConfig needs direct unit test coverage. Add
a dualstack_test.go under the same package to exercise dual-stack IPv4+IPv6
rejection for /64-or-longer IPv6 CIDRs, single-stack IPv4-only and IPv6-only
acceptance, malformed CIDR handling, and multiple invalid IPv6 entries. Also
verify the InstallConfig wrapper path in
ValidateDualStackIPv6CIDRFromInstallConfig so the helper’s extraction behavior
is covered without relying on platform tests.

Source: Coding guidelines


25-41: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Avoid redundant string round-trip through net.ParseCIDR.

ipnet.IPNet embeds net.IPNet directly, so machineNetwork.IP and machineNetwork.Mask are already accessible without formatting to a string and re-parsing. The current code calls .String() then net.ParseCIDR() for every entry, which is wasted work and adds a needless (currently harmless) parse-failure path that silently skips entries.

♻️ Proposed refactor
-	for i, machineNetwork := range machineNetworks {
-		ip, ipNet, err := net.ParseCIDR(machineNetwork.String())
-		if err != nil {
-			// Skip invalid CIDRs - they'll be caught by other validation
-			continue
-		}
-
-		if ip.To4() != nil {
+	for i, machineNetwork := range machineNetworks {
+		if machineNetwork.IP.To4() != nil {
 			hasIPv4 = true
 		} else {
 			// IPv6 address - reject /64 or longer prefixes (cannot be split)
-			prefixLen, _ := ipNet.Mask.Size()
+			prefixLen, _ := machineNetwork.Mask.Size()
 			if prefixLen >= 64 {
 				ipv6TooLongIndices = append(ipv6TooLongIndices, i)
 			}
 		}
 	}

Note: the net import can then be dropped if unused elsewhere in the file.

🤖 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 `@pkg/validation/network/dualstack.go` around lines 25 - 41, The dual-stack
validation loop in `machineNetworks` is doing an unnecessary
`String()`/`net.ParseCIDR()` round-trip for each `machineNetwork`, which adds
extra work and a silent skip path. Update the logic in the loop to read directly
from the existing `machineNetwork.IP` and `machineNetwork.Mask` fields, using
`Mask.Size()` and `To4()` as needed, so the validation operates on the parsed
CIDR object itself. If `net` is no longer referenced elsewhere in
`dualstack.go`, remove that import as part of the refactor.
🤖 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 `@pkg/validation/network/dualstack.go`:
- Around line 1-71: This new validation logic in ValidateDualStackIPv6CIDR and
ValidateDualStackIPv6CIDRFromInstallConfig needs direct unit test coverage. Add
a dualstack_test.go under the same package to exercise dual-stack IPv4+IPv6
rejection for /64-or-longer IPv6 CIDRs, single-stack IPv4-only and IPv6-only
acceptance, malformed CIDR handling, and multiple invalid IPv6 entries. Also
verify the InstallConfig wrapper path in
ValidateDualStackIPv6CIDRFromInstallConfig so the helper’s extraction behavior
is covered without relying on platform tests.
- Around line 25-41: The dual-stack validation loop in `machineNetworks` is
doing an unnecessary `String()`/`net.ParseCIDR()` round-trip for each
`machineNetwork`, which adds extra work and a silent skip path. Update the logic
in the loop to read directly from the existing `machineNetwork.IP` and
`machineNetwork.Mask` fields, using `Mask.Size()` and `To4()` as needed, so the
validation operates on the parsed CIDR object itself. If `net` is no longer
referenced elsewhere in `dualstack.go`, remove that import as part of the
refactor.

ℹ️ Review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Enterprise

Run ID: 31a9d595-8bf2-4813-be3a-b0df867b809f

📥 Commits

Reviewing files that changed from the base of the PR and between eae6033 and 91cbdfd.

📒 Files selected for processing (6)
  • pkg/types/aws/validation/platform.go
  • pkg/types/aws/validation/platform_test.go
  • pkg/types/azure/validation/platform.go
  • pkg/types/azure/validation/platform_test.go
  • pkg/types/validation/installconfig.go
  • pkg/validation/network/dualstack.go
🚧 Files skipped from review as they are similar to previous changes (4)
  • pkg/types/validation/installconfig.go
  • pkg/types/aws/validation/platform.go
  • pkg/types/aws/validation/platform_test.go
  • pkg/types/azure/validation/platform_test.go

Comment thread pkg/validation/network/dualstack.go Outdated
Comment on lines +43 to +46
// Report error only if dual-stack (both IPv4 and IPv6 present) and IPv6 uses /64 or longer
if hasIPv4 && len(ipv6TooLongIndices) > 0 {
for _, i := range ipv6TooLongIndices {
allErrs = append(allErrs, field.Invalid(

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This validation will break our scenario: AWS BYO dual-stack subnets. Specifically, if the user defines subnet CIDRs as machine networks:

machineNetwork:
- cidr: 10.0.128.0/20           # subnet 0
- cidr: 10.0.144.0/20           # subnet 1
- cidr: 2001:db8:1234:1a00::/64 # subnet 0
- cidr: 2001:db8:1234:1a01::/64 # subnet 1

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Yeah. I am conflicted about this and still thinking through this. Allowing this for AWS and disallowing for Azure seems weird but that is what we might end up with.

expected: `^\Qnetworking.machineNetwork[1].cidr: Invalid value: "fd00::/65": IPv6 CIDR with /64 or longer prefix cannot be used in dual-stack configurations. Use a larger prefix (recommended /56) that can be split into multiple subnets\E$`,
},
{
name: "invalid dual-stack with multiple IPv6 /64",

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Following above comment, dual-stack with [multiple|one] IPv6 /64 is a valid use case in AWS, specifically, BYO dualstack subnets.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Comment thread pkg/types/aws/validation/platform_test.go Outdated
},
},
{
name: "valid IPv6 /64 without dual-stack",

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I think this should be an invalid case because IPv4 cluster should not define IPv6 machine networks (even though the installer allows it).

We can remove this case for now?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I added a validation for preventing single stack ipv6 installs and added an appropriate test.

@sadasu
sadasu force-pushed the dualstack-fixes branch from 91cbdfd to e6bdd74 Compare July 8, 2026 23:29
@sadasu

sadasu commented Jul 8, 2026

Copy link
Copy Markdown
Contributor Author

/test e2e-azure-ovn-dualstack-ipv6-primary-techpreview

@sadasu
sadasu force-pushed the dualstack-fixes branch from e6bdd74 to c27fc5d Compare July 9, 2026 00:05
@sadasu

sadasu commented Jul 9, 2026

Copy link
Copy Markdown
Contributor Author

/test e2e-azure-ovn-dualstack-ipv6-primary-techpreview

@sadasu
sadasu force-pushed the dualstack-fixes branch from c27fc5d to 6ffb3e4 Compare July 9, 2026 03:08
@sadasu

sadasu commented Jul 9, 2026

Copy link
Copy Markdown
Contributor Author

/test e2e-azure-ovn-dualstack-ipv6-primary-techpreview

@sadasu

sadasu commented Jul 9, 2026

Copy link
Copy Markdown
Contributor Author

Test results show the new validation catching errors in the install-config early instead of CAPZ webhook rejecting it later:

level=error msg=failed to fetch Master Machines: failed to load asset "Install Config": failed to create install config: invalid "install-config.yaml" file: networking.machineNetwork[1].cidr: Invalid value: "fd00::/64": IPv6 CIDR with /64 or longer prefix cannot be used in dual-stack configurations. Use a larger prefix (recommended /56) that can be split into multiple subnets

@rna-afk rna-afk left a comment

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.

/approve

Comment thread pkg/validation/network/dualstack.go Outdated
@openshift-ci openshift-ci Bot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Jul 9, 2026
@sadasu sadasu changed the title OCPBUGS-98102: Add validation to prevent /64 machine networks for Dualstack OCPBUGS-98102: Add validations Azure Dualstack Jul 9, 2026
@openshift-ci-robot

Copy link
Copy Markdown
Contributor

@sadasu: This pull request references Jira Issue OCPBUGS-98102, which is valid.

3 validation(s) were run on this bug
  • bug is open, matching expected state (open)
  • bug target version (5.0.0) matches configured target version for branch (5.0.0)
  • bug is in the state POST, which is one of the valid states (NEW, ASSIGNED, POST)

The bug has been updated to refer to the pull request using the external bug tracker.

Details

In response to this:

  1. Azure requires IPv6 subnets to have /64 address prefix. That implies that VPCs need to be created with address prefixes larger than /64. Azure recommends /56 CIDR while creating dualstack IPv6 VPCs. This fix adds a validation that ensures the network configuration in the install-config is validated for this condition.
  2. Another validation to prevent ipv6 only installs

Fix includes unit tests for both validations.

Summary by CodeRabbit

  • Bug Fixes
  • Improved network configuration validation for Azure installs by checking IPv6 CIDR ranges in dual-stack setups.
  • Added clearer validation feedback when IPv6 CIDRs use unsupported sizes, including field-specific error messages.
  • Expanded test coverage for valid and invalid IPv6 networking scenarios, including dual-stack configurations.

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 openshift-eng/jira-lifecycle-plugin repository.

Comment thread pkg/validation/network/dualstack.go Outdated
Comment thread pkg/validation/network/dualstack.go Outdated
@tthvo

tthvo commented Jul 10, 2026

Copy link
Copy Markdown
Member

/test e2e-azure-ovn-dualstack-ipv6-primary-techpreview

@sadasu
sadasu force-pushed the dualstack-fixes branch from 6ffb3e4 to 53fe126 Compare July 10, 2026 19:01
@sadasu

sadasu commented Jul 10, 2026

Copy link
Copy Markdown
Contributor Author

/test e2e-azure-ovn-dualstack-ipv6-primary-techpreview

@sadasu
sadasu force-pushed the dualstack-fixes branch 3 times, most recently from 8716027 to 9e8b6a5 Compare July 10, 2026 21:49
@sadasu

sadasu commented Jul 10, 2026

Copy link
Copy Markdown
Contributor Author

/test e2e-azure-ovn-dualstack-ipv6-primary-techpreview

@sadasu
sadasu force-pushed the dualstack-fixes branch from 9e8b6a5 to 43c43c0 Compare July 10, 2026 23:13
@openshift-ci

openshift-ci Bot commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: rna-afk

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

The pull request process is described 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

@sadasu

sadasu commented Jul 10, 2026

Copy link
Copy Markdown
Contributor Author

/test e2e-azure-ovn-dualstack-ipv6-primary-techpreview

@sadasu

sadasu commented Jul 13, 2026

Copy link
Copy Markdown
Contributor Author

/test verify-deps

@sadasu

sadasu commented Jul 13, 2026

Copy link
Copy Markdown
Contributor Author

/verified by CI and unit tests.

@openshift-ci-robot openshift-ci-robot added the verified Signifies that the PR passed pre-merge verification criteria label Jul 13, 2026
@openshift-ci-robot

Copy link
Copy Markdown
Contributor

@sadasu: This PR has been marked as verified by CI and unit tests..

Details

In response to this:

/verified by CI and unit tests.

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 openshift-eng/jira-lifecycle-plugin repository.

Comment thread pkg/types/azure/validation/platform.go
@sadasu

sadasu commented Jul 13, 2026

Copy link
Copy Markdown
Contributor Author

@coderabbitai resume

@coderabbitai

coderabbitai Bot commented Jul 13, 2026

Copy link
Copy Markdown
✅ Action performed

Reviews resumed.

@openshift-ci-robot

Copy link
Copy Markdown
Contributor

@sadasu: This pull request references Jira Issue OCPBUGS-98102, which is valid.

3 validation(s) were run on this bug
  • bug is open, matching expected state (open)
  • bug target version (5.0.0) matches configured target version for branch (5.0.0)
  • bug is in the state POST, which is one of the valid states (NEW, ASSIGNED, POST)
Details

In response to this:

  1. Azure requires IPv6 subnets to have /64 address prefix. That implies that VPCs need to be created with address prefixes larger than /64. Azure recommends /56 CIDR while creating dualstack IPv6 VPCs. This fix adds a validation that ensures the network configuration in the install-config is validated for this condition.
  2. Another validation to prevent ipv6 only installs

Fix includes unit tests for both validations.

Summary by CodeRabbit

Summary by CodeRabbit

  • Bug Fixes

  • Improved Azure network configuration validation for dual-stack installs with additional IPv6 CIDR checks.

  • Added stricter enforcement to prevent invalid dual-stack IPv6 prefix sizes and alignment issues, returning more targeted validation feedback.

  • Expanded automated test coverage for IPv6 and dual-stack networking scenarios, including missing and invalid configuration cases.

  • Tests

  • Updated validation tests to cover new IPv6 networking CIDR validation behaviors.

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 openshift-eng/jira-lifecycle-plugin 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.

Actionable comments posted: 2

🧹 Nitpick comments (2)
pkg/asset/tls/utils_test.go (1)

44-55: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Verify key material, not only its concrete type.

The round-trip test passes if parsing returns a different valid RSA/ECDSA key of the same type. Compare the decoded key’s material or a canonical serialized representation with the original key.

🤖 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 `@pkg/asset/tls/utils_test.go` around lines 44 - 55, Update the round-trip
assertions in the test case around PrivateKeyToPem and PemToPrivateKey to
compare the decoded key’s actual material with the original key, using a
canonical serialization or equivalent key-value comparison in addition to
assert.IsType. Preserve the existing generation, PEM conversion, and error
assertions.
pkg/types/azure/validation/platform_test.go (1)

294-411: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Minor coverage gap for DualStackIPv6Primary.

The dual-stack "missing IPv6" case (lines 329-343) only exercises network.DualStackIPv4Primary; DualStackIPv6Primary (tested separately at line 250 without an ic) never goes through the new CIDR checks. Since both values are treated identically by isDualStack, risk is low, but an explicit case would close the gap.

🤖 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 `@pkg/types/azure/validation/platform_test.go` around lines 294 - 411, Add an
explicit “dual-stack enabled but missing IPv6” table case using
network.DualStackIPv6Primary in the validation tests, with an IPv4-only machine
network and the same expected required-IPv6 error as the DualStackIPv4Primary
case. Ensure this exercises the CIDR validation path with an InstallConfig.
🤖 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 `@pkg/asset/tls/utils_test.go`:
- Around line 44-55: In the test loop around tc.genFunc, PrivateKeyToPem, and
PemToPrivateKey, replace setup-related assert.NoError and assert.NotEmpty calls
with require equivalents so failures stop the subtest before round-trip checks
continue. Apply the same change to similar cases below, while retaining assert
for the final decoded key type checks.

In `@pkg/types/azure/validation/platform.go`:
- Around line 200-203: Remove the len(machineNetworks) == 0 early-return
validation block from the platform validation helper, including its
field.Required error append. Allow empty machineNetwork values to fall through
to the existing installconfig.go validation, while preserving the Azure
dual-stack CIDR checks that follow.

---

Nitpick comments:
In `@pkg/asset/tls/utils_test.go`:
- Around line 44-55: Update the round-trip assertions in the test case around
PrivateKeyToPem and PemToPrivateKey to compare the decoded key’s actual material
with the original key, using a canonical serialization or equivalent key-value
comparison in addition to assert.IsType. Preserve the existing generation, PEM
conversion, and error assertions.

In `@pkg/types/azure/validation/platform_test.go`:
- Around line 294-411: Add an explicit “dual-stack enabled but missing IPv6”
table case using network.DualStackIPv6Primary in the validation tests, with an
IPv4-only machine network and the same expected required-IPv6 error as the
DualStackIPv4Primary case. Ensure this exercises the CIDR validation path with
an InstallConfig.
🪄 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: ec5acc76-04d0-4777-b83a-23bd659b62ad

📥 Commits

Reviewing files that changed from the base of the PR and between e6bdd74 and 43c43c0.

📒 Files selected for processing (3)
  • pkg/asset/tls/utils_test.go
  • pkg/types/azure/validation/platform.go
  • pkg/types/azure/validation/platform_test.go

@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.

Caution

Inline review comments failed to post. This is likely due to GitHub's internal server error or limits when posting large numbers of comments. If you are seeing this consistently it is likely a permissions issue. Please check "Moderation" -> "Code review limits" under your organization settings.

Actionable comments posted: 2

🧹 Nitpick comments (2)
pkg/asset/tls/utils_test.go (1)

44-55: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Verify key material, not only its concrete type.

The round-trip test passes if parsing returns a different valid RSA/ECDSA key of the same type. Compare the decoded key’s material or a canonical serialized representation with the original key.

🤖 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 `@pkg/asset/tls/utils_test.go` around lines 44 - 55, Update the round-trip
assertions in the test case around PrivateKeyToPem and PemToPrivateKey to
compare the decoded key’s actual material with the original key, using a
canonical serialization or equivalent key-value comparison in addition to
assert.IsType. Preserve the existing generation, PEM conversion, and error
assertions.
pkg/types/azure/validation/platform_test.go (1)

294-411: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Minor coverage gap for DualStackIPv6Primary.

The dual-stack "missing IPv6" case (lines 329-343) only exercises network.DualStackIPv4Primary; DualStackIPv6Primary (tested separately at line 250 without an ic) never goes through the new CIDR checks. Since both values are treated identically by isDualStack, risk is low, but an explicit case would close the gap.

🤖 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 `@pkg/types/azure/validation/platform_test.go` around lines 294 - 411, Add an
explicit “dual-stack enabled but missing IPv6” table case using
network.DualStackIPv6Primary in the validation tests, with an IPv4-only machine
network and the same expected required-IPv6 error as the DualStackIPv4Primary
case. Ensure this exercises the CIDR validation path with an InstallConfig.
🤖 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 `@pkg/asset/tls/utils_test.go`:
- Around line 44-55: In the test loop around tc.genFunc, PrivateKeyToPem, and
PemToPrivateKey, replace setup-related assert.NoError and assert.NotEmpty calls
with require equivalents so failures stop the subtest before round-trip checks
continue. Apply the same change to similar cases below, while retaining assert
for the final decoded key type checks.

In `@pkg/types/azure/validation/platform.go`:
- Around line 200-203: Remove the len(machineNetworks) == 0 early-return
validation block from the platform validation helper, including its
field.Required error append. Allow empty machineNetwork values to fall through
to the existing installconfig.go validation, while preserving the Azure
dual-stack CIDR checks that follow.

---

Nitpick comments:
In `@pkg/asset/tls/utils_test.go`:
- Around line 44-55: Update the round-trip assertions in the test case around
PrivateKeyToPem and PemToPrivateKey to compare the decoded key’s actual material
with the original key, using a canonical serialization or equivalent key-value
comparison in addition to assert.IsType. Preserve the existing generation, PEM
conversion, and error assertions.

In `@pkg/types/azure/validation/platform_test.go`:
- Around line 294-411: Add an explicit “dual-stack enabled but missing IPv6”
table case using network.DualStackIPv6Primary in the validation tests, with an
IPv4-only machine network and the same expected required-IPv6 error as the
DualStackIPv4Primary case. Ensure this exercises the CIDR validation path with
an InstallConfig.
🪄 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: ec5acc76-04d0-4777-b83a-23bd659b62ad

📥 Commits

Reviewing files that changed from the base of the PR and between e6bdd74 and 43c43c0.

📒 Files selected for processing (3)
  • pkg/asset/tls/utils_test.go
  • pkg/types/azure/validation/platform.go
  • pkg/types/azure/validation/platform_test.go
🛑 Comments failed to post (2)
pkg/asset/tls/utils_test.go (1)

44-55: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Inspect the test file structure and relevant lines.
wc -l pkg/asset/tls/utils_test.go
cat -n pkg/asset/tls/utils_test.go | sed -n '1,180p'

Repository: openshift/installer

Length of output: 3639


Use require for setup assertions here. assert.NoError and assert.NotEmpty let the test keep going after a failed key-generation or PEM-encoding step, which can cascade into misleading failures in the round-trip checks. Switch the setup checks in this block and the similar cases below to require.*, and keep assert for the final type checks.

🤖 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 `@pkg/asset/tls/utils_test.go` around lines 44 - 55, In the test loop around
tc.genFunc, PrivateKeyToPem, and PemToPrivateKey, replace setup-related
assert.NoError and assert.NotEmpty calls with require equivalents so failures
stop the subtest before round-trip checks continue. Apply the same change to
similar cases below, while retaining assert for the final decoded key type
checks.

Source: Path instructions

pkg/types/azure/validation/platform.go (1)

200-203: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Inspect the relevant validation functions and surrounding context.
grep -RIn --line-number --context=3 "cannot proceed with no machine networks specified\|at least one machine network is required\|validateDualStackIPv6CIDRFromInstallConfig\|ValidatePlatform" pkg/types/azure/validation pkg/types/validation | sed -n '1,220p'

Repository: openshift/installer

Length of output: 10440


🏁 Script executed:

#!/bin/bash
set -euo pipefail

grep -RIn --line-number --context=3 \
  "cannot proceed with no machine networks specified\|at least one machine network is required\|validateDualStackIPv6CIDRFromInstallConfig\|ValidatePlatform" \
  pkg/types/azure/validation pkg/types/validation | sed -n '1,240p'

Repository: openshift/installer

Length of output: 10440


Drop the duplicate empty machineNetwork check.

pkg/types/validation/installconfig.go already adds networking.machineNetwork: Required value: at least one machine network is required for an empty list, and this platform-level return adds a second near-identical error on the same field. Let the empty slice fall through and keep this helper focused on the Azure dual-stack CIDR checks below.

🤖 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 `@pkg/types/azure/validation/platform.go` around lines 200 - 203, Remove the
len(machineNetworks) == 0 early-return validation block from the platform
validation helper, including its field.Required error append. Allow empty
machineNetwork values to fall through to the existing installconfig.go
validation, while preserving the Azure dual-stack CIDR checks that follow.

Comment thread pkg/types/azure/validation/platform.go Outdated
Comment thread pkg/types/azure/validation/platform.go
Comment thread pkg/types/azure/validation/platform.go Outdated
@rna-afk

rna-afk commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

/test e2e-azure-ovn-dualstack-ipv6-primary-techpreview

sadasu added 2 commits July 24, 2026 20:58
… length

Azure requires IPv6 subnets to have /64 address prefix. That
implies that IPv6 VPCs need to be created with address prefixes
larger than /64.
Azure recommends /56 CIDR while creating dualstack VPCs.
This fix adds a validation that ensures the network configuration
in the install-config is validated for this condition.
Fix also includes unit tests.
@sadasu
sadasu force-pushed the dualstack-fixes branch from 43c43c0 to 9462cd0 Compare July 25, 2026 00:59
@openshift-ci-robot openshift-ci-robot removed the verified Signifies that the PR passed pre-merge verification criteria label Jul 25, 2026
@sadasu

sadasu commented Jul 25, 2026

Copy link
Copy Markdown
Contributor Author

/test e2e-azure-ovn-dualstack-ipv6-primary-techpreview

@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: 1

🧹 Nitpick comments (1)
pkg/types/azure/validation/platform.go (1)

232-232: 🎯 Functional Correctness | 🔵 Trivial | 💤 Low value

Discarded Mask.Size() validity flag.

net.IPMask.Size() returns (0, 0) when the mask isn't in canonical (ones-then-zeros) form; the second return value is discarded here. A non-canonical mask would silently be treated as /0 (passes both the >=64 and %4 checks), bypassing validation. In practice ipnet.IPNet values are populated via CIDR parsing which always yields a canonical mask, so this is a defensive nit rather than a live bug.

🤖 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 `@pkg/types/azure/validation/platform.go` at line 232, Preserve the validity
result from machineNetwork.Mask.Size() in the surrounding platform validation
logic, and reject or otherwise fail validation when the mask is non-canonical
instead of treating the returned prefix length as /0. Keep the existing
prefix-length checks for valid canonical masks.
🤖 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 `@pkg/asset/tls/utils_test.go`:
- Around line 91-96: Update the RSA and EC subtests around PrivateKeyToPem to
construct PEM data directly using x509.MarshalPKCS1PrivateKey with an “RSA
PRIVATE KEY” block and x509.MarshalECPrivateKey with an “EC PRIVATE KEY” block.
Retain PrivateKeyToPem only in the PKCS#8 test case, then continue decoding each
PEM value through PemToPrivateKey.

---

Nitpick comments:
In `@pkg/types/azure/validation/platform.go`:
- Line 232: Preserve the validity result from machineNetwork.Mask.Size() in the
surrounding platform validation logic, and reject or otherwise fail validation
when the mask is non-canonical instead of treating the returned prefix length as
/0. Keep the existing prefix-length checks for valid canonical masks.
🪄 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: 95855a5f-dd25-4368-ae7b-f857863f12a5

📥 Commits

Reviewing files that changed from the base of the PR and between 43c43c0 and 9462cd0.

📒 Files selected for processing (3)
  • pkg/asset/tls/utils_test.go
  • pkg/types/azure/validation/platform.go
  • pkg/types/azure/validation/platform_test.go
🚧 Files skipped from review as they are similar to previous changes (1)
  • pkg/types/azure/validation/platform_test.go

Comment on lines 91 to 96
pemBytes, pemErr := PrivateKeyToPem(key)
assert.NoError(t, pemErr)
if !assert.NoError(t, pemErr) {
return
}

decoded, err := PemToPrivateKey(pemBytes)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Inspect the relevant test file and surrounding lines.
git ls-files 'pkg/asset/tls/utils_test.go'
wc -l pkg/asset/tls/utils_test.go
cat -n pkg/asset/tls/utils_test.go | sed -n '1,170p'

Repository: openshift/installer

Length of output: 4474


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Inspect the implementation behind the test helpers.
ast-grep outline pkg/asset/tls/utils.go --view expanded
printf '\n---\n'
cat -n pkg/asset/tls/utils.go | sed -n '1,220p'

Repository: openshift/installer

Length of output: 4478


🏁 Script executed:

#!/bin/bash
set -euo pipefail

ast-grep outline pkg/asset/tls/utils.go --view expanded
printf '\n---\n'
cat -n pkg/asset/tls/utils.go | sed -n '1,220p'

Repository: openshift/installer

Length of output: 4478


Use explicit RSA and EC PEM encodings in these subtests. The RSA and EC cases still go through PrivateKeyToPem, so they only exercise the PKCS#8 PRIVATE KEY path. Marshal RSA with x509.MarshalPKCS1PrivateKey and EC with x509.MarshalECPrivateKey, and encode them as RSA PRIVATE KEY / EC PRIVATE KEY; keep PrivateKeyToPem for the PKCS#8 case.

🤖 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 `@pkg/asset/tls/utils_test.go` around lines 91 - 96, Update the RSA and EC
subtests around PrivateKeyToPem to construct PEM data directly using
x509.MarshalPKCS1PrivateKey with an “RSA PRIVATE KEY” block and
x509.MarshalECPrivateKey with an “EC PRIVATE KEY” block. Retain PrivateKeyToPem
only in the PKCS#8 test case, then continue decoding each PEM value through
PemToPrivateKey.

@openshift-ci

openshift-ci Bot commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

@sadasu: The following tests failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name Commit Details Required Rerun command
ci/prow/e2e-azure-ovn-dualstack-ipv6-primary-techpreview 9462cd0 link false /test e2e-azure-ovn-dualstack-ipv6-primary-techpreview
ci/prow/azure-private 9462cd0 link false /test azure-private
ci/prow/azure-ovn-marketplace-images 9462cd0 link false /test azure-ovn-marketplace-images

Full PR test history. Your PR dashboard.

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. I understand the commands that are listed here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved Indicates a PR has been approved by an approver from all required OWNERS files. jira/valid-bug Indicates that a referenced Jira bug is valid for the branch this PR is targeting. jira/valid-reference Indicates that this PR references a valid Jira ticket of any type.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants