Skip to content
This repository was archived by the owner on Sep 9, 2026. It is now read-only.

MGMT-23735: add PublicIP CRD type definitions - #188

Merged
openshift-merge-bot[bot] merged 6 commits into
osac-project:mainfrom
akshaynadkarni:mgmt-23734-publicip-support
Apr 20, 2026
Merged

openshift-merge-bot[bot] merged 6 commits into
osac-project:mainfrom
akshaynadkarni:mgmt-23734-publicip-support

Conversation

@akshaynadkarni

@akshaynadkarni akshaynadkarni commented Apr 17, 2026

Copy link
Copy Markdown
Contributor

Summary

MGMT-23735: Define the PublicIP Custom Resource Definition in osac-operator.

Adds the complete PublicIP CRD type hierarchy:

  • Spec: pool (required, immutable via CEL self == oldSelf, MinLength=1) and computeInstance (optional, MinLength=1)
  • Status: phase, state, address, desiredConfigVersion, jobs (reuses shared JobStatus), conditions
  • Phase enum: Progressing, Failed, Ready, Deleting
  • State enum: Pending, Allocated, Attached, Releasing, Failed
  • Condition helpers: GetPublicIPStatusCondition / SetPublicIPStatusCondition (package-level functions, matching PublicIPPool pattern)
  • Print columns: Pool, Address, State, Phase, Age for oc get publicips
  • Generated artifacts: DeepCopy methods, CRD YAML with OpenAPI schema, enum constraints, and CEL validation
  • Kustomization: PublicIP CRD registered in config/crd/kustomization.yaml

Testing

$ make generate && make manifests
# Both exit 0, CRD YAML generated at config/crd/bases/osac.openshift.io_publicips.yaml

$ go test ./api/v1alpha1/ -v -count=1
Ran 49 of 49 Specs in 0.001 seconds
SUCCESS! -- 49 Passed | 0 Failed | 0 Pending | 0 Skipped

$ make build
# Exit 0

$ grep "self == oldSelf" config/crd/bases/osac.openshift.io_publicips.yaml
# CEL immutability rule present on spec.pool

$ grep -c "additionalPrinterColumns" config/crd/bases/osac.openshift.io_publicips.yaml
1
# Five print columns: Pool, Address, State, Phase, Age

Related PRs

Ticket

MGMT-23735


Assisted-by: Cursor/Claude

Summary by CodeRabbit

  • New Features

    • Added PublicIP custom resource to manage public IPs with lifecycle phases (Progressing, Ready, Failed, Deleting) and states (Pending, Allocated, Attached, Releasing, Failed).
    • CRD includes immutability for pool, optional computeInstance for attachment, status fields (address, desired config version, jobs, conditions) and additional printer columns.
    • New "ConfigurationApplied" status condition and helpers for setting/getting conditions.
  • Tests

    • Added unit tests validating spec, enums, name retrieval, and status condition behavior.

@openshift-ci-robot

openshift-ci-robot commented Apr 17, 2026

Copy link
Copy Markdown

@akshaynadkarni: This pull request references MGMT-23735 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 "5.0.0" version, but no target version was set.

Details

In response to this:

Summary

MGMT-23735: Define the PublicIP Custom Resource Definition in osac-operator.

Adds the complete PublicIP CRD type hierarchy:

  • Spec: pool (required, immutable via CEL self == oldSelf, MinLength=1) and computeInstance (optional, MinLength=1)
  • Status: phase, state, address, desiredConfigVersion, jobs (reuses shared JobStatus), conditions
  • Phase enum: Progressing, Failed, Ready, Deleting
  • State enum: Pending, Allocated, Attached, Releasing, Failed
  • Condition helpers: GetPublicIPStatusCondition / SetPublicIPStatusCondition (package-level functions, matching PublicIPPool pattern)
  • Print columns: Pool, Address, State, Phase, Age for oc get publicips
  • Generated artifacts: DeepCopy methods, CRD YAML with OpenAPI schema, enum constraints, and CEL validation
  • Kustomization: PublicIP CRD registered in config/crd/kustomization.yaml

Testing

$ make generate && make manifests
# Both exit 0, CRD YAML generated at config/crd/bases/osac.openshift.io_publicips.yaml

$ go test ./api/v1alpha1/ -v -count=1
Ran 49 of 49 Specs in 0.001 seconds
SUCCESS! -- 49 Passed | 0 Failed | 0 Pending | 0 Skipped

$ make build
# Exit 0

$ grep "self == oldSelf" config/crd/bases/osac.openshift.io_publicips.yaml
# CEL immutability rule present on spec.pool

$ grep -c "additionalPrinterColumns" config/crd/bases/osac.openshift.io_publicips.yaml
1
# Five print columns: Pool, Address, State, Phase, Age

Related PRs

  • fulfillment-service proto PR (Phase 1): PublicIP type and service proto definitions

Ticket

MGMT-23735


Assisted-by: Cursor/Claude

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

openshift-ci Bot commented Apr 17, 2026

Copy link
Copy Markdown

Skipping CI for Draft Pull Request.
If you want CI signal for your change, please convert it to an actual PR.
You can still manually trigger a test run with /test all

@openshift-ci

openshift-ci Bot commented Apr 17, 2026

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: akshaynadkarni

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

@coderabbitai

coderabbitai Bot commented Apr 17, 2026

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 417c13ea-5df4-4975-a95a-0de322107175

📥 Commits

Reviewing files that changed from the base of the PR and between ff00fc7 and b19c528.

📒 Files selected for processing (6)
  • api/v1alpha1/publicip_conditions.go
  • api/v1alpha1/publicip_types.go
  • api/v1alpha1/publicip_types_test.go
  • api/v1alpha1/zz_generated.deepcopy.go
  • config/crd/bases/osac.openshift.io_publicips.yaml
  • config/crd/kustomization.yaml
✅ Files skipped from review due to trivial changes (4)
  • config/crd/kustomization.yaml
  • api/v1alpha1/publicip_conditions.go
  • api/v1alpha1/publicip_types_test.go
  • config/crd/bases/osac.openshift.io_publicips.yaml
🚧 Files skipped from review as they are similar to previous changes (2)
  • api/v1alpha1/publicip_types.go
  • api/v1alpha1/zz_generated.deepcopy.go

📝 Walkthrough

Walkthrough

Adds a new v1alpha1 Kubernetes CustomResourceDefinition "PublicIP" with API types, status enums, condition helpers, unit tests, autogenerated deepcopy methods, CRD manifest and kustomization entry.

Changes

Cohort / File(s) Summary
API Types & Helpers
api/v1alpha1/publicip_types.go, api/v1alpha1/publicip_conditions.go
Introduce PublicIP CRD types: PublicIPSpec, PublicIPStatus, PublicIPPhaseType, PublicIPStateType, condition type PublicIPConditionType and helpers GetPublicIPStatusCondition / SetPublicIPStatusCondition.
Tests
api/v1alpha1/publicip_types_test.go
Adds unit tests for spec fields, enum string values, GetName() and status condition getter/setter behavior (including absent condition).
Generated DeepCopy
api/v1alpha1/zz_generated.deepcopy.go
Autogenerated deepcopy implementations for PublicIP, PublicIPList, PublicIPSpec, and PublicIPStatus with proper slice/object deep copies.
CRD Manifest
config/crd/bases/osac.openshift.io_publicips.yaml
New CRD for publicips.osac.openshift.io with schema (required immutable spec.pool, optional spec.computeInstance), status enums, conditions/jobs schemas, printer columns and status subresource.
Kustomization
config/crd/kustomization.yaml
Registers the new CRD base bases/osac.openshift.io_publicips.yaml in resources.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested labels

lgtm

Suggested reviewers

  • adriengentil

Poem

🐇 I hopped a CRD into the glade,
With enums, conditions, and deepcopy made,
Tests snug in a leafy nest,
Kustomize adds the new manifest,
Hooray — a PublicIP parade! 🎉

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 66.67% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and accurately summarizes the main change: adding PublicIP CRD type definitions, which is the primary focus across all five modified/created files.

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

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

❤️ Share

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

@akshaynadkarni
akshaynadkarni marked this pull request as ready for review April 17, 2026 19:30
@openshift-ci
openshift-ci Bot requested review from adriengentil and trewest April 17, 2026 19:30
@akshaynadkarni

Copy link
Copy Markdown
Contributor Author

/hold

@openshift-ci-robot

openshift-ci-robot commented Apr 17, 2026

Copy link
Copy Markdown

@akshaynadkarni: This pull request references MGMT-23735 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 "5.0.0" version, but no target version was set.

Details

In response to this:

Summary

MGMT-23735: Define the PublicIP Custom Resource Definition in osac-operator.

Adds the complete PublicIP CRD type hierarchy:

  • Spec: pool (required, immutable via CEL self == oldSelf, MinLength=1) and computeInstance (optional, MinLength=1)
  • Status: phase, state, address, desiredConfigVersion, jobs (reuses shared JobStatus), conditions
  • Phase enum: Progressing, Failed, Ready, Deleting
  • State enum: Pending, Allocated, Attached, Releasing, Failed
  • Condition helpers: GetPublicIPStatusCondition / SetPublicIPStatusCondition (package-level functions, matching PublicIPPool pattern)
  • Print columns: Pool, Address, State, Phase, Age for oc get publicips
  • Generated artifacts: DeepCopy methods, CRD YAML with OpenAPI schema, enum constraints, and CEL validation
  • Kustomization: PublicIP CRD registered in config/crd/kustomization.yaml

Testing

$ make generate && make manifests
# Both exit 0, CRD YAML generated at config/crd/bases/osac.openshift.io_publicips.yaml

$ go test ./api/v1alpha1/ -v -count=1
Ran 49 of 49 Specs in 0.001 seconds
SUCCESS! -- 49 Passed | 0 Failed | 0 Pending | 0 Skipped

$ make build
# Exit 0

$ grep "self == oldSelf" config/crd/bases/osac.openshift.io_publicips.yaml
# CEL immutability rule present on spec.pool

$ grep -c "additionalPrinterColumns" config/crd/bases/osac.openshift.io_publicips.yaml
1
# Five print columns: Pool, Address, State, Phase, Age

Related PRs

Ticket

MGMT-23735


Assisted-by: Cursor/Claude

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

openshift-ci-robot commented Apr 17, 2026

Copy link
Copy Markdown

@akshaynadkarni: This pull request references MGMT-23735 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 "5.0.0" version, but no target version was set.

Details

In response to this:

Summary

MGMT-23735: Define the PublicIP Custom Resource Definition in osac-operator.

Adds the complete PublicIP CRD type hierarchy:

  • Spec: pool (required, immutable via CEL self == oldSelf, MinLength=1) and computeInstance (optional, MinLength=1)
  • Status: phase, state, address, desiredConfigVersion, jobs (reuses shared JobStatus), conditions
  • Phase enum: Progressing, Failed, Ready, Deleting
  • State enum: Pending, Allocated, Attached, Releasing, Failed
  • Condition helpers: GetPublicIPStatusCondition / SetPublicIPStatusCondition (package-level functions, matching PublicIPPool pattern)
  • Print columns: Pool, Address, State, Phase, Age for oc get publicips
  • Generated artifacts: DeepCopy methods, CRD YAML with OpenAPI schema, enum constraints, and CEL validation
  • Kustomization: PublicIP CRD registered in config/crd/kustomization.yaml

Testing

$ make generate && make manifests
# Both exit 0, CRD YAML generated at config/crd/bases/osac.openshift.io_publicips.yaml

$ go test ./api/v1alpha1/ -v -count=1
Ran 49 of 49 Specs in 0.001 seconds
SUCCESS! -- 49 Passed | 0 Failed | 0 Pending | 0 Skipped

$ make build
# Exit 0

$ grep "self == oldSelf" config/crd/bases/osac.openshift.io_publicips.yaml
# CEL immutability rule present on spec.pool

$ grep -c "additionalPrinterColumns" config/crd/bases/osac.openshift.io_publicips.yaml
1
# Five print columns: Pool, Address, State, Phase, Age

Related PRs

Ticket

MGMT-23735


Assisted-by: Cursor/Claude

Summary by CodeRabbit

New Features

  • Introduced new PublicIP custom resource for managing public IP addresses with lifecycle tracking
  • Supports IP allocation and attachment states (Pending, Allocated, Attached, Releasing)
  • Includes status phases (Progressing, Ready, Failed, Deleting) for operational visibility
  • Provides configuration versioning and job tracking capabilities

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 (4)
config/crd/bases/osac.openshift.io_publicips.yaml (1)

19-35: Print columns LGTM; consider marking some as priority: 1.

By convention, oc get shows only priority: 0 columns by default and hides priority: 1 behind -o wide. Pool, Address, State, Phase, Age is 5 columns which may feel noisy on narrow terminals. Optionally demote Pool (and/or Phase, which is derivable from State) to priority: 1. Non-blocking.

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

In `@config/crd/bases/osac.openshift.io_publicips.yaml` around lines 19 - 35, The
additionalPrinterColumns block currently lists Pool (.spec.pool), Address
(.status.address), State (.status.state), Phase (.status.phase) and Age
(.metadata.creationTimestamp) without priorities; to reduce width by default,
update the additionalPrinterColumns entries (e.g., the column for Pool and/or
Phase) to include "priority: 1" so they are hidden from the default oc get view
(leave Address, State or Age at default priority: 0 as desired); modify the
entries in the additionalPrinterColumns array in the CRD (referencing the
jsonPath values) to add the priority field for the chosen columns.
api/v1alpha1/publicip_types.go (2)

142-145: Redundant GetName() method.

PublicIP embeds metav1.ObjectMeta, which already provides a GetName() string accessor (satisfying metav1.Object). This override just returns the same value and adds no behavior, while shadowing the embedded method. Consider removing it unless you explicitly need the method on the value receiver pattern elsewhere.

♻️ Proposed removal
-// GetName returns the name of the PublicIP resource
-func (p *PublicIP) GetName() string {
-	return p.ObjectMeta.Name
-}
-
 func init() {
 	SchemeBuilder.Register(&PublicIP{}, &PublicIPList{})
 }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@api/v1alpha1/publicip_types.go` around lines 142 - 145, Remove the redundant
GetName method on the PublicIP type: delete the func (p *PublicIP) GetName()
string { return p.ObjectMeta.Name } declaration (it shadows the embedded
metav1.ObjectMeta's GetName). Ensure no code relies on that specific
value-receiver method signature—if callers expect a value receiver, update them
to use the embedded GetName() or accept the pointer method on the embedded
ObjectMeta. After removal, run the tests and a quick `go vet`/format to verify
no references remain.

92-94: Stray protobuf tag on Conditions.

The protobuf:"bytes,1,rep,name=conditions" struct tag is meaningful for in-tree k8s API types generated via protoc, but this CRD type isn't protobuf-generated. It's harmless but misleading. Since PR description notes this mirrors the PublicIPPool pattern, feel free to ignore — but worth cleaning up both at once if you agree.

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

In `@api/v1alpha1/publicip_types.go` around lines 92 - 94, The Conditions field
currently includes a stray protobuf struct tag; remove the
protobuf:"bytes,1,rep,name=conditions" portion from the tag on the Conditions
field in api/v1alpha1/publicip_types.go (the Conditions []metav1.Condition
`json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type"`), and
apply the same cleanup to the matching Conditions tag on the PublicIPPool type
if present so the CRD types only include JSON/patch tags.
api/v1alpha1/publicip_types_test.go (1)

93-117: Consider strengthening condition helper tests.

Current coverage verifies set→get round-trip and missing→nil. Two easy additions would catch real regressions:

  • Assert SetPublicIPStatusCondition with the same type but different status transitions LastTransitionTime (i.e. meta.SetStatusCondition semantics are preserved).
  • Assert retrieved Type, Reason, Message match what was set (not just Status).

Optional — not blocking.

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

In `@api/v1alpha1/publicip_types_test.go` around lines 93 - 117, Add assertions to
the PublicIP condition helper tests to ensure SetPublicIPStatusCondition
preserves all condition fields and transition semantics: after calling
SetPublicIPStatusCondition(ip, condition) in the "should set and get a
condition" test, assert that the retrieved condition from
GetPublicIPStatusCondition(ip, PublicIPConditionConfigurationApplied) has the
same Type, Reason, Message and LastTransitionTime behavior (e.g., that
LastTransitionTime updates when status changes matching meta.SetStatusCondition
semantics) in addition to the existing Status check; also add a subtest that
calls SetPublicIPStatusCondition twice with the same Type but a different
Status/LastTransitionTime and assert LastTransitionTime changed and fields
remain consistent.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@api/v1alpha1/publicip_types_test.go`:
- Around line 93-117: Add assertions to the PublicIP condition helper tests to
ensure SetPublicIPStatusCondition preserves all condition fields and transition
semantics: after calling SetPublicIPStatusCondition(ip, condition) in the
"should set and get a condition" test, assert that the retrieved condition from
GetPublicIPStatusCondition(ip, PublicIPConditionConfigurationApplied) has the
same Type, Reason, Message and LastTransitionTime behavior (e.g., that
LastTransitionTime updates when status changes matching meta.SetStatusCondition
semantics) in addition to the existing Status check; also add a subtest that
calls SetPublicIPStatusCondition twice with the same Type but a different
Status/LastTransitionTime and assert LastTransitionTime changed and fields
remain consistent.

In `@api/v1alpha1/publicip_types.go`:
- Around line 142-145: Remove the redundant GetName method on the PublicIP type:
delete the func (p *PublicIP) GetName() string { return p.ObjectMeta.Name }
declaration (it shadows the embedded metav1.ObjectMeta's GetName). Ensure no
code relies on that specific value-receiver method signature—if callers expect a
value receiver, update them to use the embedded GetName() or accept the pointer
method on the embedded ObjectMeta. After removal, run the tests and a quick `go
vet`/format to verify no references remain.
- Around line 92-94: The Conditions field currently includes a stray protobuf
struct tag; remove the protobuf:"bytes,1,rep,name=conditions" portion from the
tag on the Conditions field in api/v1alpha1/publicip_types.go (the Conditions
[]metav1.Condition `json:"conditions,omitempty" patchStrategy:"merge"
patchMergeKey:"type"`), and apply the same cleanup to the matching Conditions
tag on the PublicIPPool type if present so the CRD types only include JSON/patch
tags.

In `@config/crd/bases/osac.openshift.io_publicips.yaml`:
- Around line 19-35: The additionalPrinterColumns block currently lists Pool
(.spec.pool), Address (.status.address), State (.status.state), Phase
(.status.phase) and Age (.metadata.creationTimestamp) without priorities; to
reduce width by default, update the additionalPrinterColumns entries (e.g., the
column for Pool and/or Phase) to include "priority: 1" so they are hidden from
the default oc get view (leave Address, State or Age at default priority: 0 as
desired); modify the entries in the additionalPrinterColumns array in the CRD
(referencing the jsonPath values) to add the priority field for the chosen
columns.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 879f8716-9e71-4650-bf7d-d90abc0915b8

📥 Commits

Reviewing files that changed from the base of the PR and between ad29a1e and ff00fc7.

📒 Files selected for processing (6)
  • api/v1alpha1/publicip_conditions.go
  • api/v1alpha1/publicip_types.go
  • api/v1alpha1/publicip_types_test.go
  • api/v1alpha1/zz_generated.deepcopy.go
  • config/crd/bases/osac.openshift.io_publicips.yaml
  • config/crd/kustomization.yaml

@akshaynadkarni
akshaynadkarni requested review from DakCrowder, SiddarthR56 and eranco74 and removed request for trewest April 17, 2026 19:43

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

Code Review

Clean PR — follows the PublicIPPool pattern consistently. One thing to fix before merge:

Needs rebase: The branch was forked before publicippools.yaml was added to config/crd/kustomization.yaml. The diff adds it as a new line, but it already exists on main. This will either conflict or produce a duplicate entry. Please rebase on latest main.

Minor nitpicks (non-blocking, matches existing PublicIPPool patterns):

  • GetName() on PublicIP shadows the embedded metav1.ObjectMeta.GetName() — redundant but consistent with PublicIPPool
  • Stray protobuf struct tag on Conditions field — meaningless for CRD types but again matches PublicIPPool

Everything else looks good — CEL immutability, state/phase separation, shared JobStatus reuse, tests, and generated artifacts are all solid.

Ginkgo tests for PublicIP spec, phase types, state types,
condition type, GetName method, and condition helpers
(Set/Get). Follows existing PublicIPPool test patterns.

Assisted-by: Claude
Prevents the API server from accepting explicit empty strings for
the optional ComputeInstance attachment reference. Without this,
computeInstance: "" is accepted as valid, forcing the controller
to distinguish "not set" from "set to empty."

Assisted-by: Cursor/Claude
Aligns with proto change ac8e3a7 in fulfillment-service which added
PUBLIC_IP_STATE_FAILED. Without a failure state, a failed allocation
or release would be stuck in Pending/Releasing with the error only
in status.message.

Assisted-by: Cursor/Claude
After rebasing on main, the publicippools.yaml entry that was added
as an auto-fix now duplicates the one already on main. Remove the
duplicate and append publicips.yaml after publicippools.yaml.

Assisted-by: Cursor/Claude
@akshaynadkarni
akshaynadkarni force-pushed the mgmt-23734-publicip-support branch from ff00fc7 to b19c528 Compare April 20, 2026 17:08
@akshaynadkarni

Copy link
Copy Markdown
Contributor Author

Code Review

Clean PR — follows the PublicIPPool pattern consistently. One thing to fix before merge:

Needs rebase: The branch was forked before publicippools.yaml was added to config/crd/kustomization.yaml. The diff adds it as a new line, but it already exists on main. This will either conflict or produce a duplicate entry. Please rebase on latest main.

Minor nitpicks (non-blocking, matches existing PublicIPPool patterns):

  • GetName() on PublicIP shadows the embedded metav1.ObjectMeta.GetName() — redundant but consistent with PublicIPPool
  • Stray protobuf struct tag on Conditions field — meaningless for CRD types but again matches PublicIPPool

Everything else looks good — CEL immutability, state/phase separation, shared JobStatus reuse, tests, and generated artifacts are all solid.

@eranco74 I have rebased and resolved conflicts. PTAL.

@eranco74

Copy link
Copy Markdown
Contributor

/lgtm

@akshaynadkarni

Copy link
Copy Markdown
Contributor Author

/unhold

@openshift-merge-bot
openshift-merge-bot Bot merged commit 94c7ee1 into osac-project:main Apr 20, 2026
8 checks passed
@akshaynadkarni
akshaynadkarni deleted the mgmt-23734-publicip-support branch April 20, 2026 18:33
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants