Skip to content

CORENET-6714: Enable Network Observability on Day 0#2752

Open
OlivierCazade wants to merge 3 commits intoopenshift:masterfrom
OlivierCazade:day0
Open

CORENET-6714: Enable Network Observability on Day 0#2752
OlivierCazade wants to merge 3 commits intoopenshift:masterfrom
OlivierCazade:day0

Conversation

@OlivierCazade
Copy link

@OlivierCazade OlivierCazade commented Mar 10, 2026

config/v1: add installNetworkObservability field for day-0 installation

Summary

This PR adds the installNetworkObservability field to the Network CRD (config.openshift.io/v1) to support automatic installation of the Network Observability operator during cluster creation.

Changes

  • Add InstallNetworkObservability string field to NetworkSpec
  • Field defaults to Enable (when omitted), enabling network observability by default
  • When explicitly set to Disable, automatic installation is skipped

Behavior

When omitted or set to Enable, the Network Observability operator and FlowCollector are deployed at bootstrap time, providing immediate network visibility for troubleshooting packet drops, latencies, and DNS tracking.

When explicitly set to Disable, no automatic installation occurs (though the operator can still be installed manually post-installation).

Related

/cc @stleerh

Add InstallNetworkObservability field to NetworkSpec to support
automatic installation of the Network Observability operator during
cluster creation. When omitted or set to true, the operator and
FlowCollector are deployed at bootstrap time, enabling immediate
network visibility for troubleshooting packet drops, latencies,
and DNS tracking.

When explicitly set to false, no automatic installation occurs
(the operator can still be installed manually post-installation).

This treats network observability as integral networking infrastructure,
making it available by default rather than as a separate optional
component.
@openshift-ci-robot
Copy link

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

@openshift-ci-robot openshift-ci-robot added the jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. label Mar 10, 2026
@openshift-ci openshift-ci bot requested a review from stleerh March 10, 2026 10:20
@openshift-ci-robot
Copy link

openshift-ci-robot commented Mar 10, 2026

@OlivierCazade: This pull request references CORENET-6714 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the story to target the "4.22.0" version, but no target version was set.

Details

In response to this:

config/v1: add installNetworkObservability field for day-0 installation

Summary

This PR adds the installNetworkObservability field to the Network CRD (config.openshift.io/v1) to support automatic installation of the Network Observability operator during cluster creation.

Changes

  • Add InstallNetworkObservability boolean field to NetworkSpec
  • Field defaults to true (when omitted), enabling network observability by default
  • When explicitly set to false, automatic installation is skipped

Behavior

When omitted or set to true, the Network Observability operator and FlowCollector are deployed at bootstrap time, providing immediate network visibility for troubleshooting packet drops, latencies, and DNS tracking.

When explicitly set to false, no automatic installation occurs (though the operator can still be installed manually post-installation).

This change treats network observability as integral networking infrastructure rather than an optional add-on component.

Related

/cc @stleerh

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.

@openshift-ci
Copy link
Contributor

openshift-ci bot commented Mar 10, 2026

Hello @OlivierCazade! Some important instructions when contributing to openshift/api:
API design plays an important part in the user experience of OpenShift and as such API PRs are subject to a high level of scrutiny to ensure they follow our best practices. If you haven't already done so, please review the OpenShift API Conventions and ensure that your proposed changes are compliant. Following these conventions will help expedite the api review process for your PR.

@qodo-code-review
Copy link

Review Summary by Qodo

Add InstallNetworkObservability field for day-0 network observability

✨ Enhancement

Grey Divider

Walkthroughs

Description
• Add InstallNetworkObservability optional boolean field to NetworkSpec
• Field enables network observability by default when omitted or true
• Update generated code and CRD manifests for new field
• Support day-0 automatic Network Observability operator deployment
Diagram
flowchart LR
  NetworkSpec["NetworkSpec CRD"] -- "adds field" --> InstallNetworkObservability["InstallNetworkObservability: *bool"]
  InstallNetworkObservability -- "enables by default" --> NetworkObservability["Network Observability Operator"]
  NetworkObservability -- "deploys at bootstrap" --> FlowCollector["FlowCollector"]
Loading

Grey Divider

File Changes

1. config/v1/types_network.go ✨ Enhancement +6/-0

Add InstallNetworkObservability field to NetworkSpec

• Add InstallNetworkObservability optional pointer-to-bool field to NetworkSpec struct
• Field includes documentation explaining default behavior when omitted or set to true
• Marked as optional with +optional tag

config/v1/types_network.go


2. config/v1/zz_generated.deepcopy.go Code generation +5/-0

Generate deepcopy for InstallNetworkObservability field

• Add deep copy logic for new InstallNetworkObservability pointer field
• Handles nil checks and pointer dereferencing for proper copying

config/v1/zz_generated.deepcopy.go


3. config/v1/zz_generated.swagger_doc_generated.go 📝 Documentation +8/-7

Add swagger documentation for new field

• Add swagger documentation entry for installNetworkObservability field
• Update map alignment for consistency with other NetworkSpec fields

config/v1/zz_generated.swagger_doc_generated.go


View more (4)
4. openapi/generated_openapi/zz_generated.openapi.go Code generation +7/-0

Generate OpenAPI schema for new field

• Add OpenAPI schema definition for installNetworkObservability field
• Define field as boolean type with appropriate description

openapi/generated_openapi/zz_generated.openapi.go


5. config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_networks.crd.yaml ⚙️ Configuration changes +5/-0

Update CRD manifest with new field

• Add installNetworkObservability field to CRD manifest with boolean type
• Include field description matching source code documentation

config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_networks.crd.yaml


6. config/v1/zz_generated.featuregated-crd-manifests/networks.config.openshift.io/AAA_ungated.yaml ⚙️ Configuration changes +5/-0

Update feature-gated CRD manifest

• Add installNetworkObservability field to feature-gated CRD manifest
• Maintain consistency with primary CRD manifest

config/v1/zz_generated.featuregated-crd-manifests/networks.config.openshift.io/AAA_ungated.yaml


7. payload-manifests/crds/0000_10_config-operator_01_networks.crd.yaml ⚙️ Configuration changes +5/-0

Update payload CRD manifest

• Add installNetworkObservability field to payload CRD manifest
• Ensure consistency across all CRD manifest variants

payload-manifests/crds/0000_10_config-operator_01_networks.crd.yaml


Grey Divider

Qodo Logo

@qodo-code-review
Copy link

qodo-code-review bot commented Mar 10, 2026

Code Review by Qodo

🐞 Bugs (2) 📘 Rule violations (1) 📎 Requirement gaps (0)

Grey Divider


Action required

1. InstallNetworkObservability not feature-gated 📘 Rule violation ✓ Correctness
Description
A new field was added to the stable config.openshift.io/v1 NetworkSpec without
+openshift:enable:FeatureGate=.... This makes the field unconditionally available on a stable v1
API, violating the requirement to gate new stable fields for controlled rollout.
Code

config/v1/types_network.go[R90-94]

+	// InstallNetworkObservability is an optional field that enables network observability
+	// when omitted or set to true.  If the field is set to false, it does nothing.
+	//
+	// +optional
+	InstallNetworkObservability *bool `json:"installNetworkObservability,omitempty"`
Evidence
PR Compliance ID 3 requires any new field added to a stable v1 API to be introduced behind a
FeatureGate using +openshift:enable:FeatureGate=.... The added InstallNetworkObservability field
in NetworkSpec has only +optional and no FeatureGate marker, and it also appears in the
AAA_ungated.yaml featuregated CRD manifest, indicating it is not gated.

AGENTS.md
config/v1/types_network.go[90-94]
config/v1/zz_generated.featuregated-crd-manifests/networks.config.openshift.io/AAA_ungated.yaml[116-120]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
A new field (`InstallNetworkObservability`) was added to the stable `config.openshift.io/v1` `NetworkSpec` without being gated by `+openshift:enable:FeatureGate=...`, which violates the requirement that new fields on stable v1 APIs must be behind a FeatureGate.
## Issue Context
This field currently appears in the ungated CRD manifest (`AAA_ungated.yaml`), meaning it is exposed unconditionally.
## Fix Focus Areas
- config/v1/types_network.go[90-94]
- config/v1/zz_generated.featuregated-crd-manifests/networks.config.openshift.io/AAA_ungated.yaml[116-120]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. OpenAPI JSON out of sync 🐞 Bug ✓ Correctness
Description
The PR adds installNetworkObservability to the generated OpenAPI Go definitions, but the checked-in
openapi/openapi.json still lacks the field under NetworkSpec, so OpenAPI consumers won’t see it and
hack/verify-openapi.sh would diff-fail.
Code

openapi/generated_openapi/zz_generated.openapi.go[R17030-17036]

+					"installNetworkObservability": {
+						SchemaProps: spec.SchemaProps{
+							Description: "InstallNetworkObservability is an optional field that enables network observability when omitted or set to true.  If the field is set to false, it does nothing.",
+							Type:        []string{"boolean"},
+							Format:      "",
+						},
+					},
Evidence
The OpenAPI Go schema now includes installNetworkObservability, while the committed
openapi/openapi.json NetworkSpec schema does not list that property. The repo’s verify script
explicitly diffs regenerated openapi.json against the committed one, so leaving it stale is a
concrete breakage.

openapi/generated_openapi/zz_generated.openapi.go[17023-17039]
openapi/openapi.json[8988-9034]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The PR updates `openapi/generated_openapi/zz_generated.openapi.go` to include the new `installNetworkObservability` field, but `openapi/openapi.json` is not updated and still lacks the field under `NetworkSpec`. This breaks consistency and will fail `hack/verify-openapi.sh`, and any tooling consuming `openapi/openapi.json` will miss the field.
### Issue Context
`hack/verify-openapi.sh` regenerates OpenAPI artifacts and diffs them against the committed versions.
### Fix Focus Areas
- openapi/openapi.json[8986-9034]
- hack/update-openapi.sh[9-13]
- hack/verify-openapi.sh[5-9]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Remediation recommended

3. Default true not encoded🐞 Bug ✓ Correctness
Description
NetworkSpec.InstallNetworkObservability is documented as enabled “when omitted”, but neither the CRD
schema nor OpenAPI schema sets a default; omitted values remain absent/nil and clients won’t observe
a default-true value unless every consumer implements nil-as-true explicitly.
Code

config/v1/types_network.go[R90-94]

+	// InstallNetworkObservability is an optional field that enables network observability
+	// when omitted or set to true.  If the field is set to false, it does nothing.
+	//
+	// +optional
+	InstallNetworkObservability *bool `json:"installNetworkObservability,omitempty"`
Evidence
The Go type is a *bool pointer with no kubebuilder default marker, and the generated CRD property is
only type: boolean (no default: true). This contradicts the in-code documentation that says
omitted behaves like true; other APIs in this repo use +kubebuilder:default=... when a default is
intended.

config/v1/types_network.go[90-95]
config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_networks.crd.yaml[115-119]
openapi/generated_openapi/zz_generated.openapi.go[17030-17036]
config/v1/types_infrastructure.go[99-111]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`InstallNetworkObservability` is documented as enabled when omitted, but the CRD/OpenAPI schemas do not specify `default: true`. As a result, API clients will see the field as absent/nil when omitted, which contradicts the documented “omitted == true” behavior unless every consumer implements nil-as-true.
### Issue Context
This repo already uses `+kubebuilder:default=...` markers to encode defaults into generated CRDs/OpenAPI for other fields.
### Fix Focus Areas
- config/v1/types_network.go[90-94]
- config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_networks.crd.yaml[115-119]
- openapi/generated_openapi/zz_generated.openapi.go[17030-17036]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

ⓘ The new review experience is currently in Beta. Learn more

Grey Divider

Qodo Logo

@openshift-ci openshift-ci bot added the size/S Denotes a PR that changes 10-29 lines, ignoring generated files. label Mar 10, 2026
@coderabbitai
Copy link

coderabbitai bot commented Mar 10, 2026

📝 Walkthrough

Walkthrough

Adds a new optional field InstallNetworkObservability (*string) to NetworkSpec in config/v1/types_network.go and adds installNetworkObservability to the Network CRD (payload-manifests/crds/0000_10_config-operator_01_networks.crd.yaml). The Go type validation lists allowed values "", "Enable", and "Disable". The CRD schema defines the field as a string with an enum containing "", "True", and "False", includes a description, and places the field before networkDiagnostics.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately describes the main change: adding the installNetworkObservability field to enable automatic Network Observability operator installation during day 0 cluster creation.
Description check ✅ Passed The description clearly relates to the changeset, explaining the new installNetworkObservability field, its behavior when enabled/disabled, and its purpose for day-0 installation.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Stable And Deterministic Test Names ✅ Passed This PR does not introduce or modify any Ginkgo test files. The changes are limited to adding a new field InstallNetworkObservability to the NetworkSpec type in config/v1/types_network.go and updating the corresponding Network CRD schema in payload-manifests/crds/0000_10_config-operator_01_networks.crd.yaml. Since no Ginkgo test files (those containing It(), Describe(), Context(), etc.) are modified in this PR, the custom check for stable and deterministic test names is not applicable.
Test Structure And Quality ✅ Passed The custom check for Ginkgo test code quality is not applicable to this PR as only type definitions and CRD schema files were modified, with no test files added or modified.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

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.5.0)

Error: build linters: unable to load custom analyzer "kubeapilinter": tools/_output/bin/kube-api-linter.so, plugin: not implemented
The command is terminated due to an error: build linters: unable to load custom analyzer "kubeapilinter": tools/_output/bin/kube-api-linter.so, plugin: not implemented


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
Copy link
Contributor

openshift-ci bot commented Mar 10, 2026

[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 deads2k 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

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

🧹 Nitpick comments (2)
payload-manifests/crds/0000_10_config-operator_01_networks.crd.yaml (1)

115-119: Keep description in sync with Go type and apply same clarity improvement.

The CRD schema correctly reflects the Go type. The description has the same ambiguity issue noted in the Go file—"it does nothing" should be clarified to "automatic installation is skipped."

Ensure this description stays synchronized with any documentation changes made to config/v1/types_network.go.

📝 Suggested description improvement
               installNetworkObservability:
                 description: |-
-                  InstallNetworkObservability is an optional field that enables network observability
-                  when omitted or set to true.  If the field is set to false, it does nothing.
+                  InstallNetworkObservability is an optional field that enables automatic installation
+                  of network observability when omitted or set to true. If the field is set to false,
+                  automatic installation is skipped (the operator may still be installed manually post-installation).
+                  This field is immutable after installation.
                 type: boolean
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@payload-manifests/crds/0000_10_config-operator_01_networks.crd.yaml` around
lines 115 - 119, Update the CRD description for the installNetworkObservability
field so it matches the Go type and the clearer wording used in
config/v1/types_network.go: replace "it does nothing" with "automatic
installation is skipped" and ensure the sentence indicates the field is optional
and defaults to true when omitted; target the installNetworkObservability field
description in the CRD and keep this text synchronized with the corresponding
struct/comment in config/v1/types_network.go.
config/v1/types_network.go (1)

90-94: Clarify documentation wording and consider adding immutability notice.

Two suggestions for the field documentation:

  1. The phrase "it does nothing" is ambiguous. Consider clarifying to: "If the field is set to false, automatic installation of network observability is skipped."

  2. Based on the PR objective (Day 0 enablement), if this field is intended to be immutable after installation like other fields in NetworkSpec (e.g., ClusterNetwork, ServiceNetwork, NetworkType), the documentation should explicitly state this.

📝 Suggested documentation improvement
-	// InstallNetworkObservability is an optional field that enables network observability
-	// when omitted or set to true.  If the field is set to false, it does nothing.
+	// InstallNetworkObservability is an optional field that enables automatic installation
+	// of network observability when omitted or set to true. If the field is set to false,
+	// automatic installation is skipped (the operator may still be installed manually post-installation).
+	// This field is immutable after installation.
 	//
 	// +optional
 	InstallNetworkObservability *bool `json:"installNetworkObservability,omitempty"`
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@config/v1/types_network.go` around lines 90 - 94, Update the
InstallNetworkObservability field comment to remove ambiguity and, if intended
to be immutable after initial installation like other NetworkSpec fields,
explicitly state that; specifically, change the sentence "If the field is set to
false, it does nothing." to "If the field is set to false, automatic
installation of network observability is skipped." and add a second sentence
such as "This field is immutable after initial installation (Day 0) similarly to
ClusterNetwork, ServiceNetwork, and NetworkType." Ensure the comment sits above
the InstallNetworkObservability *bool field in NetworkSpec and references
consistency with ClusterNetwork, ServiceNetwork, and NetworkType.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@config/v1/types_network.go`:
- Around line 90-94: Update the InstallNetworkObservability field comment to
remove ambiguity and, if intended to be immutable after initial installation
like other NetworkSpec fields, explicitly state that; specifically, change the
sentence "If the field is set to false, it does nothing." to "If the field is
set to false, automatic installation of network observability is skipped." and
add a second sentence such as "This field is immutable after initial
installation (Day 0) similarly to ClusterNetwork, ServiceNetwork, and
NetworkType." Ensure the comment sits above the InstallNetworkObservability
*bool field in NetworkSpec and references consistency with ClusterNetwork,
ServiceNetwork, and NetworkType.

In `@payload-manifests/crds/0000_10_config-operator_01_networks.crd.yaml`:
- Around line 115-119: Update the CRD description for the
installNetworkObservability field so it matches the Go type and the clearer
wording used in config/v1/types_network.go: replace "it does nothing" with
"automatic installation is skipped" and ensure the sentence indicates the field
is optional and defaults to true when omitted; target the
installNetworkObservability field description in the CRD and keep this text
synchronized with the corresponding struct/comment in
config/v1/types_network.go.

ℹ️ Review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Pro

Run ID: f66427af-5dad-4322-a130-036759f2a2b3

📥 Commits

Reviewing files that changed from the base of the PR and between 7127010 and b430b07.

⛔ Files ignored due to path filters (5)
  • config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_networks.crd.yaml is excluded by !**/zz_generated.crd-manifests/*
  • config/v1/zz_generated.deepcopy.go is excluded by !**/zz_generated*
  • config/v1/zz_generated.featuregated-crd-manifests/networks.config.openshift.io/AAA_ungated.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • config/v1/zz_generated.swagger_doc_generated.go is excluded by !**/zz_generated*
  • openapi/generated_openapi/zz_generated.openapi.go is excluded by !openapi/**, !**/zz_generated*
📒 Files selected for processing (2)
  • config/v1/types_network.go
  • payload-manifests/crds/0000_10_config-operator_01_networks.crd.yaml

Comment on lines +90 to +94
// InstallNetworkObservability is an optional field that enables network observability
// when omitted or set to true. If the field is set to false, it does nothing.
//
// +optional
InstallNetworkObservability *bool `json:"installNetworkObservability,omitempty"`

Choose a reason for hiding this comment

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

Action required

1. installnetworkobservability not feature-gated 📘 Rule violation ✓ Correctness

A new field was added to the stable config.openshift.io/v1 NetworkSpec without
+openshift:enable:FeatureGate=.... This makes the field unconditionally available on a stable v1
API, violating the requirement to gate new stable fields for controlled rollout.
Agent Prompt
## Issue description
A new field (`InstallNetworkObservability`) was added to the stable `config.openshift.io/v1` `NetworkSpec` without being gated by `+openshift:enable:FeatureGate=...`, which violates the requirement that new fields on stable v1 APIs must be behind a FeatureGate.

## Issue Context
This field currently appears in the ungated CRD manifest (`AAA_ungated.yaml`), meaning it is exposed unconditionally.

## Fix Focus Areas
- config/v1/types_network.go[90-94]
- config/v1/zz_generated.featuregated-crd-manifests/networks.config.openshift.io/AAA_ungated.yaml[116-120]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Comment on lines +17030 to +17036
"installNetworkObservability": {
SchemaProps: spec.SchemaProps{
Description: "InstallNetworkObservability is an optional field that enables network observability when omitted or set to true. If the field is set to false, it does nothing.",
Type: []string{"boolean"},
Format: "",
},
},

Choose a reason for hiding this comment

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

Action required

2. Openapi json out of sync 🐞 Bug ✓ Correctness

The PR adds installNetworkObservability to the generated OpenAPI Go definitions, but the checked-in
openapi/openapi.json still lacks the field under NetworkSpec, so OpenAPI consumers won’t see it and
hack/verify-openapi.sh would diff-fail.
Agent Prompt
### Issue description
The PR updates `openapi/generated_openapi/zz_generated.openapi.go` to include the new `installNetworkObservability` field, but `openapi/openapi.json` is not updated and still lacks the field under `NetworkSpec`. This breaks consistency and will fail `hack/verify-openapi.sh`, and any tooling consuming `openapi/openapi.json` will miss the field.

### Issue Context
`hack/verify-openapi.sh` regenerates OpenAPI artifacts and diffs them against the committed versions.

### Fix Focus Areas
- openapi/openapi.json[8986-9034]
- hack/update-openapi.sh[9-13]
- hack/verify-openapi.sh[5-9]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

@openshift-ci openshift-ci bot added size/M Denotes a PR that changes 30-99 lines, ignoring generated files. and removed size/S Denotes a PR that changes 10-29 lines, ignoring generated files. labels Mar 10, 2026
@openshift-ci-robot
Copy link

openshift-ci-robot commented Mar 10, 2026

@OlivierCazade: This pull request references CORENET-6714 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the story to target the "4.22.0" version, but no target version was set.

Details

In response to this:

config/v1: add installNetworkObservability field for day-0 installation

Summary

This PR adds the installNetworkObservability field to the Network CRD (config.openshift.io/v1) to support automatic installation of the Network Observability operator during cluster creation.

Changes

  • Add InstallNetworkObservability boolean field to NetworkSpec
  • Field defaults to Enable (when omitted), enabling network observability by default
  • When explicitly set to Disable, automatic installation is skipped

Behavior

When omitted or set to true, the Network Observability operator and FlowCollector are deployed at bootstrap time, providing immediate network visibility for troubleshooting packet drops, latencies, and DNS tracking.

When explicitly set to false, no automatic installation occurs (though the operator can still be installed manually post-installation).

This change treats network observability as integral networking infrastructure rather than an optional add-on component.

Related

/cc @stleerh

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.

@openshift-ci-robot
Copy link

openshift-ci-robot commented Mar 10, 2026

@OlivierCazade: This pull request references CORENET-6714 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the story to target the "4.22.0" version, but no target version was set.

Details

In response to this:

config/v1: add installNetworkObservability field for day-0 installation

Summary

This PR adds the installNetworkObservability field to the Network CRD (config.openshift.io/v1) to support automatic installation of the Network Observability operator during cluster creation.

Changes

  • Add InstallNetworkObservability boolean field to NetworkSpec
  • Field defaults to Enable (when omitted), enabling network observability by default
  • When explicitly set to Disable, automatic installation is skipped

Behavior

When omitted or set to Enable, the Network Observability operator and FlowCollector are deployed at bootstrap time, providing immediate network visibility for troubleshooting packet drops, latencies, and DNS tracking.

When explicitly set to Disable, no automatic installation occurs (though the operator can still be installed manually post-installation).

This change treats network observability as integral networking infrastructure rather than an optional add-on component.

Related

/cc @stleerh

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.

@openshift-ci-robot
Copy link

openshift-ci-robot commented Mar 10, 2026

@OlivierCazade: This pull request references CORENET-6714 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the story to target the "4.22.0" version, but no target version was set.

Details

In response to this:

config/v1: add installNetworkObservability field for day-0 installation

Summary

This PR adds the installNetworkObservability field to the Network CRD (config.openshift.io/v1) to support automatic installation of the Network Observability operator during cluster creation.

Changes

  • Add InstallNetworkObservability boolean field to NetworkSpec
  • Field defaults to Enable (when omitted), enabling network observability by default
  • When explicitly set to Disable, automatic installation is skipped

Behavior

When omitted or set to Enable, the Network Observability operator and FlowCollector are deployed at bootstrap time, providing immediate network visibility for troubleshooting packet drops, latencies, and DNS tracking.

When explicitly set to Disable, no automatic installation occurs (though the operator can still be installed manually post-installation).

Related

/cc @stleerh

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.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

🧹 Nitpick comments (1)
payload-manifests/crds/0000_10_config-operator_01_networks.crd.yaml (1)

116-123: Description casing doesn't match enum values, and wording is ambiguous.

Two issues with the description:

  1. The description uses lowercase "enable" and "disable" but the enum values are CamelCase "Enable" and "Disable". This could confuse users when setting the field.

  2. The phrase "it does nothing" is ambiguous. Based on the PR objectives, when set to "Disable", automatic installation is skipped. Consider clarifying to "network observability is not automatically installed" or similar.

  3. Minor inconsistency: The existing networkDiagnostics.mode field (line 144) uses "Disabled" (past tense), while this field uses "Disable" (present tense). Consider aligning with the existing pattern for consistency.

📝 Suggested description improvement
               description: |-
-                installNetworkObservability is an optional field that enables network observability
-                when omitted or set to enable.  If the field is set to disable, it does nothing.
-                Valid values are "", "Enable", "Disable".
+                installNetworkObservability is an optional field that controls automatic installation
+                of the Network Observability operator during cluster creation.
+                When omitted or set to "Enable", network observability is automatically installed.
+                When set to "Disable", automatic installation is skipped (manual installation remains possible).
+                Valid values are "", "Enable", "Disable".
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@payload-manifests/crds/0000_10_config-operator_01_networks.crd.yaml` around
lines 116 - 123, The description for the installNetworkObservability field is
inconsistent with its enum and ambiguous; update the description for
installNetworkObservability to use the same casing as the enum values ("Enable",
"Disable"), clearly state the behavior for each value (e.g., when set to
"Enable" or omitted it enables automatic installation, when set to "Disable"
network observability is not automatically installed), and consider aligning
wording with the existing networkDiagnostics.mode choice (e.g., use "Disabled"
vs "Disable") for consistency across the CRD.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@payload-manifests/crds/0000_10_config-operator_01_networks.crd.yaml`:
- Around line 116-123: The description for the installNetworkObservability field
is inconsistent with its enum and ambiguous; update the description for
installNetworkObservability to use the same casing as the enum values ("Enable",
"Disable"), clearly state the behavior for each value (e.g., when set to
"Enable" or omitted it enables automatic installation, when set to "Disable"
network observability is not automatically installed), and consider aligning
wording with the existing networkDiagnostics.mode choice (e.g., use "Disabled"
vs "Disable") for consistency across the CRD.

ℹ️ Review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Pro

Run ID: f88d5b2c-e676-465b-b05d-b0d40c189d2f

📥 Commits

Reviewing files that changed from the base of the PR and between b430b07 and fcc26dc.

⛔ Files ignored due to path filters (5)
  • config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_networks.crd.yaml is excluded by !**/zz_generated.crd-manifests/*
  • config/v1/zz_generated.deepcopy.go is excluded by !**/zz_generated*
  • config/v1/zz_generated.featuregated-crd-manifests/networks.config.openshift.io/AAA_ungated.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • config/v1/zz_generated.swagger_doc_generated.go is excluded by !**/zz_generated*
  • openapi/generated_openapi/zz_generated.openapi.go is excluded by !openapi/**, !**/zz_generated*
📒 Files selected for processing (2)
  • config/v1/types_network.go
  • payload-manifests/crds/0000_10_config-operator_01_networks.crd.yaml
🚧 Files skipped from review as they are similar to previous changes (1)
  • config/v1/types_network.go

@openshift-ci-robot
Copy link

openshift-ci-robot commented Mar 10, 2026

@OlivierCazade: This pull request references CORENET-6714 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the story to target the "4.22.0" version, but no target version was set.

Details

In response to this:

config/v1: add installNetworkObservability field for day-0 installation

Summary

This PR adds the installNetworkObservability field to the Network CRD (config.openshift.io/v1) to support automatic installation of the Network Observability operator during cluster creation.

Changes

  • Add InstallNetworkObservability string field to NetworkSpec
  • Field defaults to Enable (when omitted), enabling network observability by default
  • When explicitly set to Disable, automatic installation is skipped

Behavior

When omitted or set to Enable, the Network Observability operator and FlowCollector are deployed at bootstrap time, providing immediate network visibility for troubleshooting packet drops, latencies, and DNS tracking.

When explicitly set to Disable, no automatic installation occurs (though the operator can still be installed manually post-installation).

Related

/cc @stleerh

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.

// Valid values are "", "Enable", "Disable".
// +kubebuilder:validation:Enum:="";Enable;Disable
// +optional
InstallNetworkObservability *string `json:"installNetworkObservability,omitempty"`
Copy link

Choose a reason for hiding this comment

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

"Disable" is misleading, because it is not disabling Network Observability; it does nothing. In the Enhancement Proposal, it uses the term "not enable" to mean it doesn't enable Network Observability.

What about using the values "true", "false" and ""? "false" would imply that it would not install Network Observability.

Copy link
Contributor

Choose a reason for hiding this comment

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

We strongly discourage the use of booleans in OpenShift APIs because fields that start as booleans often evolve to need more than true || false as allowed values.

We prefer the use of enums that have meaningful values to end-users. I agree that installNetworkObservability: Enable | Disable is not very clear to an end user.

I did a quick read of the EP - do you envision there ever needing to be a way for customers to apply any custom configuration for the day 0 network observability enablement?

Copy link

Choose a reason for hiding this comment

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

Choosing common 'boolean' values like true/false, yes/no, and 0/1 is easier to remember than some arbitrary dual values like enable/disable. If I try to come up with another term besides "disable", they all sound bad like "null" or "no-op". I like yes/no as well, but it will have the same concerns you raised.

For day 0, the answer is no. Customers will likely need to make changes on day 2. Even if that were to change somewhere down the line, we would still want this knob to enable it separately. That's already the case for many features, which typically have an attribute named enable under the particular feature.

The bottom line is whether the attribute and the value are meaningful to the user, not the just the value itself. enable/disable by itself is no more clearer than true/false. It has to be associated with the attribute installNetworkObservability to determine whether it's clear or not. So ask yourself, "Is it clear what installNetworkObservability means when it is true or false?" My answer is yes, and that's because the attribute has a verb in there. If the attribute was NetworkObservability, then the values like enable is much better than true.

Copy link
Contributor

Choose a reason for hiding this comment

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

For day 0, the answer is no. Customers will likely need to make changes on day 2. Even if that were to change somewhere down the line, we would still want this knob to enable it separately. That's already the case for many features, which typically have an attribute named enable under the particular feature

Good to know. The reason I asked is because if we were intending to enable some kind of custom configuration as part of day 0 installation, a simple enablement field may result in a slightly "clunkier" configuration experience in the future by having separate fields for stating installation intent and then custom configuration.

If you were intending to do day 0 custom configuration, I'd have suggested a structure more along the lines of:

networkObservability:
  installationPolicy: Install | DoNotInstall | InstallWithCustomization
  installWithCustomization:
    # customizable fields here

(note: naming is just for an example and not necessarily exactly what I would expect).

I also think that having a nested structure now is generally better for future flexibility rather than locking yourself into having multiple co-located *NetworkObservability fields in the future. In my experience, that starts to get confusing for end-users.

The bottom line is whether the attribute and the value are meaningful to the user, not the just the value itself. enable/disable by itself is no more clearer than true/false. It has to be associated with the attribute installNetworkObservability to determine whether it's clear or not. So ask yourself, "Is it clear what installNetworkObservability means when it is true or false?" My answer is yes, and that's because the attribute has a verb in there. If the attribute was NetworkObservability, then the values like enable is much better than true.

Sure. So what happens if in the future you'd like to add a different way to specify the installation of the network observability feature beyond pure yes/no semantics?

Something like:

networkObservabilityInstallationPolicy: Install | DoNotInstall

gives you more flexibility in the future to add new values that are descriptive beyond True | False.

All this being said, if you folks feel strongly that true/false semantics provide the best experience for the end-user then 👍

@everettraven
Copy link
Contributor

@OlivierCazade All new fields must be feature gated and go through the standard feature promotion process. Please add a new feature gate, disabled by default, and gate this new field.

More information on adding a new feature gate can be found here: https://github.com/openshift/api?tab=readme-ov-file#adding-new-featuregates

More information on adding a new field behind a feature gate can be found here: https://github.com/openshift/api?tab=readme-ov-file#adding-new-fields

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@config/v1/types_network.go`:
- Around line 89-95: This new InstallNetworkObservability field must be
introduced behind a feature gate: add a dedicated feature gate (e.g.,
"InstallNetworkObservability") and update the API gating so the field is
effectively disabled by default—annotate the InstallNetworkObservability field
in types_network.go to indicate it is feature-gated, add the feature name to the
repository's feature gate registry per FEATURE_GATES.md, enforce
admission/validation logic that rejects or ignores this field unless the gate is
enabled (update the relevant validation/strategy and any defaulting logic), and
add/update tests documenting the gate behavior so the field only takes effect
when the feature gate is explicitly enabled.
- Around line 90-95: The field InstallNetworkObservability has a mismatch
between its comment and its kubebuilder enum: the code comment lists
"Enable"/"Disable" but the annotation enforces "", "True", "False"; update the
comment to reflect the actual enum values (e.g., "Valid values are \"\",
\"True\", \"False\"") and clarify that an omitted value is treated as enabled if
desired; reference the InstallNetworkObservability field and the
kubebuilder:validation:Enum annotation to make the comment consistent with the
enforced values.

In `@payload-manifests/crds/0000_10_config-operator_01_networks.crd.yaml`:
- Around line 115-124: The documentation for the installNetworkObservability CRD
field is out of sync with its enum: update the description in the
installNetworkObservability field to list the actual allowed enum values ("",
"True", "False") or alternatively change the enum to match the existing text;
locate the installNetworkObservability definition and make the description and
enum consistent (preferably change the description to "Valid values are \"\",
\"True\", \"False\"").

ℹ️ Review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Pro

Run ID: f2be5a44-6b34-41a6-a126-6eb3f5c4f667

📥 Commits

Reviewing files that changed from the base of the PR and between fcc26dc and 71a5fef.

⛔ Files ignored due to path filters (2)
  • config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_networks.crd.yaml is excluded by !**/zz_generated.crd-manifests/*
  • config/v1/zz_generated.featuregated-crd-manifests/networks.config.openshift.io/AAA_ungated.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
📒 Files selected for processing (2)
  • config/v1/types_network.go
  • payload-manifests/crds/0000_10_config-operator_01_networks.crd.yaml

Comment on lines +89 to +95

// installNetworkObservability is an optional field that enables network observability
// when omitted or set to enable. If the field is set to disable, it does nothing.
// Valid values are "", "Enable", "Disable".
// +kubebuilder:validation:Enum:="";True;False
// +optional
InstallNetworkObservability *string `json:"installNetworkObservability,omitempty"`
Copy link

@coderabbitai coderabbitai bot Mar 11, 2026

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion | 🟠 Major

New field should be gated by a feature gate.

Per reviewer everettraven's comment on this PR, new fields in OpenShift APIs should be introduced behind a feature gate (disabled by default) and go through the standard feature promotion process. This ensures the field can be safely introduced and tested before becoming generally available.

The repository has guidance on adding feature gates and gating fields.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@config/v1/types_network.go` around lines 89 - 95, This new
InstallNetworkObservability field must be introduced behind a feature gate: add
a dedicated feature gate (e.g., "InstallNetworkObservability") and update the
API gating so the field is effectively disabled by default—annotate the
InstallNetworkObservability field in types_network.go to indicate it is
feature-gated, add the feature name to the repository's feature gate registry
per FEATURE_GATES.md, enforce admission/validation logic that rejects or ignores
this field unless the gate is enabled (update the relevant validation/strategy
and any defaulting logic), and add/update tests documenting the gate behavior so
the field only takes effect when the feature gate is explicitly enabled.

Copy link
Contributor

Choose a reason for hiding this comment

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

This is correct and needs to be done. This cannot just go straight to GA.

Choose a reason for hiding this comment

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

Code Implementation 🛠️

Implementation: Update the installNetworkObservability field to be explicitly marked as feature-gated, and correct the kubebuilder enum validation to match the documented/implemented values ("", Enable, Disable).

Suggested change
// installNetworkObservability is an optional field that enables network observability
// when omitted or set to enable. If the field is set to disable, it does nothing.
// Valid values are "", "Enable", "Disable".
// +kubebuilder:validation:Enum:="";True;False
// +optional
InstallNetworkObservability *string `json:"installNetworkObservability,omitempty"`
// installNetworkObservability is an optional field that enables network observability
// when omitted or set to Enable. If the field is set to Disable, it does nothing.
// Valid values are "", "Enable", "Disable".
//
// This field is feature-gated and must not take effect unless the corresponding
// feature gate is enabled.
// +openshift:enable:FeatureGate=InstallNetworkObservability
// +kubebuilder:validation:Enum:="";Enable;Disable
// +optional
InstallNetworkObservability *string `json:"installNetworkObservability,omitempty"`

See review comment here

Copy link

Choose a reason for hiding this comment

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

@everettraven, thank you for confirming — agreed completely. Here's a concrete breakdown of what needs to be done to properly gate this field:

Required changes to introduce the feature gate

1. Register the new feature gate in features/features.go

Add an exported variable similar to how other gates are registered. A gate declaration in features/features.go should use newFeatureGate(...) chained with metadata such as reportProblemsToJiraComponent(...), contactPerson(...), productScope(...), enhancementPR(...), and enableIn(configv1.TechPreviewNoUpgrade), followed by mustRegister(). For example:

// FeatureGateInstallNetworkObservability enables automatic installation of
// the Network Observability operator during cluster bootstrap.
var FeatureGateInstallNetworkObservability = newFeatureGate("InstallNetworkObservability").
    reportProblemsToJiraComponent("Network Observability").
    contactPerson("OlivierCazade").
    productScope(ocpSpecific).
    enhancementPR("https://github.com/openshift/enhancements/pull/1908").
    enableIn(configv1.TechPreviewNoUpgrade).
    mustRegister()

2. Annotate the field in config/v1/types_network.go

Add the +openshift:enable:FeatureGate marker to the field so the CRD generation tooling gates it properly:

// installNetworkObservability is an optional field that enables network observability
// when omitted or set to True. If the field is set to False, it does nothing.
// Valid values are "", "True", "False".
// +openshift:enable:FeatureGate=InstallNetworkObservability
// +kubebuilder:validation:Enum="";True;False
// +optional
InstallNetworkObservability *string `json:"installNetworkObservability,omitempty"`

3. Update features.md with a new table row documenting the gate.

4. Re-run code generation to update:

  • config/v1/zz_generated.featuregated-crd-manifests.yaml
  • The per-gate CRD variant files under config/v1/zz_generated.featuregated-crd-manifests/networks.config.openshift.io/
  • payload-manifests/crds/ (the gated CRD payload variant)

Note: There is also a mismatch in the current diff — the +kubebuilder:validation:Enum marker lists "";True;False while the comment above it documents "", "Enable", "Disable". These need to be reconciled before merging.

Good reference PRs for this pattern: #2587 (adding a feature gate for a new CRD) and #2590 (gating an existing field with +openshift:enable:FeatureGate=).

Copy link

Choose a reason for hiding this comment

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

Skipped: comment is from another GitHub bot.

Comment on lines +90 to +95
// installNetworkObservability is an optional field that enables network observability
// when omitted or set to enable. If the field is set to disable, it does nothing.
// Valid values are "", "Enable", "Disable".
// +kubebuilder:validation:Enum:="";True;False
// +optional
InstallNetworkObservability *string `json:"installNetworkObservability,omitempty"`
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

Description does not match enum values.

Same issue as the CRD: the comment on lines 90-92 documents "Enable", "Disable" but the kubebuilder annotation on line 93 enforces True, False. The description must be updated to match the actual enum values.

📝 Proposed fix to align comment with enum
-	// installNetworkObservability is an optional field that enables network observability
-	// when omitted or set to enable.  If the field is set to disable, it does nothing.
-	// Valid values are "", "Enable", "Disable".
+	// installNetworkObservability is an optional field that enables network observability
+	// when omitted or set to True.  If the field is set to False, it does nothing.
+	// Valid values are "", "True", "False".
 	// +kubebuilder:validation:Enum:="";True;False
 	// +optional
 	InstallNetworkObservability *string `json:"installNetworkObservability,omitempty"`
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@config/v1/types_network.go` around lines 90 - 95, The field
InstallNetworkObservability has a mismatch between its comment and its
kubebuilder enum: the code comment lists "Enable"/"Disable" but the annotation
enforces "", "True", "False"; update the comment to reflect the actual enum
values (e.g., "Valid values are \"\", \"True\", \"False\"") and clarify that an
omitted value is treated as enabled if desired; reference the
InstallNetworkObservability field and the kubebuilder:validation:Enum annotation
to make the comment consistent with the enforced values.

Comment on lines +115 to +124
installNetworkObservability:
description: |-
installNetworkObservability is an optional field that enables network observability
when omitted or set to enable. If the field is set to disable, it does nothing.
Valid values are "", "Enable", "Disable".
enum:
- ""
- "True"
- "False"
type: string
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

Description does not match enum values.

The description on lines 117-119 states valid values are "", "Enable", "Disable", but the actual enum on lines 120-123 enforces "", "True", "False". This appears to be a leftover from before the commit that "Changed enum from Enable/Disable to True/False".

Users will receive validation errors if they follow the documented values.

📝 Proposed fix to align description with enum
              installNetworkObservability:
                description: |-
                  installNetworkObservability is an optional field that enables network observability
-                 when omitted or set to enable.  If the field is set to disable, it does nothing.
-                 Valid values are "", "Enable", "Disable".
+                 when omitted or set to True.  If the field is set to False, it does nothing.
+                 Valid values are "", "True", "False".
                enum:
                - ""
                - "True"
                - "False"
                type: string
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@payload-manifests/crds/0000_10_config-operator_01_networks.crd.yaml` around
lines 115 - 124, The documentation for the installNetworkObservability CRD field
is out of sync with its enum: update the description in the
installNetworkObservability field to list the actual allowed enum values ("",
"True", "False") or alternatively change the enum to match the existing text;
locate the installNetworkObservability definition and make the description and
enum consistent (preferably change the description to "Valid values are \"\",
\"True\", \"False\"").

@openshift-ci
Copy link
Contributor

openshift-ci bot commented Mar 11, 2026

@OlivierCazade: all tests passed!

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

jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. size/M Denotes a PR that changes 30-99 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants