Skip to content

Conversation

@zhiweiyin318
Copy link
Member

@zhiweiyin318 zhiweiyin318 commented Nov 19, 2025

Summary

the cmd:
clusteradm init --registration-drivers="csr,grpc" --grpc-endpoint-type loadBalancer --bundle-version=latest

Related issue(s)

Fixes #

Summary by CodeRabbit

  • New Features

    • Configurable gRPC endpoint type (hostname or LoadBalancer) with a new option (default: hostname).
  • Chores

    • Updated multiple module dependencies to newer versions for improved stability, compatibility, and security.

@coderabbitai
Copy link

coderabbitai bot commented Nov 19, 2025

Walkthrough

Updates Go module versions in go.mod and adds a configurable gRPC endpoint type to the cluster initialization command, replacing a previously hard-coded hostname endpoint with selection logic supporting "hostname" and "loadBalancer".

Changes

Cohort / File(s) Summary
Dependency updates
go.mod
Bumps multiple direct and indirect module versions: github.com/onsi/gomega v1.38.0→v1.38.2, github.com/spf13/pflag v1.0.7→v1.0.10, google.golang.org/grpc v1.68.1→v1.76.0, open-cluster-management.io/api and open-cluster-management.io/ocm to new pseudo-versions, plus various indirect deps (e.g., cloud.google.com/go/compute/metadata, go.opentelemetry.io/otel, go.yaml.in/yaml, google.golang.org/genproto, google.golang.org/protobuf).
CLI flag registration
pkg/cmd/init/cmd.go
Adds --grpc-endpoint-type CLI flag (default "hostname") bound to options field.
Options struct change
pkg/cmd/init/options.go
Adds grpcEndpointType string field to Options with comment describing supported types (hostname, loadBalancer).
gRPC endpoint resolution
pkg/cmd/init/exec.go
Replaces hard-coded hostname endpoint with switch-based construction using grpcEndpointType; validates hostname value for "hostname", constructs a LoadBalancer endpoint for "loadBalancer", and returns an error for unknown types.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

  • Files/areas to focus on:
    • pkg/cmd/init/exec.go — endpoint selection switch, validation of hostname case, and correctness of LoadBalancer endpoint construction.
    • go.mod — compatibility implications of grpc and open-cluster-management module bumps.
    • CLI binding in pkg/cmd/init/cmd.go — flag default and help text correctness.

Possibly related PRs

Suggested labels

approved, lgtm

Suggested reviewers

  • ycyaoxdu
  • zhujian7

Pre-merge checks and finishing touches

❌ Failed checks (1 inconclusive)
Check name Status Explanation Resolution
Description check ❓ Inconclusive The description includes a Summary section with a usage example of the new feature, but lacks a Related issue(s) section with issue number and provides minimal context about the changes. Add a meaningful summary explaining the changes and why they were needed, and fill in the Related issue(s) section or clarify if no issue is associated.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main feature: adding support to configure a load balancer for the gRPC service, which aligns with the actual changes in the pull request.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

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.

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: 0

🧹 Nitpick comments (1)
pkg/cmd/init/cmd.go (1)

104-104: --grpc-endpoint-type flag wiring and defaults look good

Flag is correctly bound to o.grpcEndpointType with a sensible default and clear help text. As a minor follow-up, you might later clarify in the help that --grpc-server is required for hostname but optional for loadBalancer, to match the exec logic and reduce confusion.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c1e1018 and 826af53.

⛔ Files ignored due to path filters (125)
  • go.sum is excluded by !**/*.sum
  • vendor/cloud.google.com/go/compute/metadata/CHANGES.md is excluded by !vendor/**
  • vendor/cloud.google.com/go/compute/metadata/log.go is excluded by !vendor/**
  • vendor/cloud.google.com/go/compute/metadata/metadata.go is excluded by !vendor/**
  • vendor/cloud.google.com/go/compute/metadata/retry_linux.go is excluded by !vendor/**
  • vendor/cloud.google.com/go/compute/metadata/syscheck.go is excluded by !vendor/**
  • vendor/cloud.google.com/go/compute/metadata/syscheck_linux.go is excluded by !vendor/**
  • vendor/cloud.google.com/go/compute/metadata/syscheck_windows.go is excluded by !vendor/**
  • vendor/github.com/Masterminds/semver/v3/CHANGELOG.md is excluded by !vendor/**
  • vendor/github.com/Masterminds/semver/v3/README.md is excluded by !vendor/**
  • vendor/github.com/Masterminds/semver/v3/constraints.go is excluded by !vendor/**
  • vendor/github.com/Masterminds/semver/v3/version.go is excluded by !vendor/**
  • vendor/github.com/onsi/gomega/CHANGELOG.md is excluded by !vendor/**
  • vendor/github.com/onsi/gomega/gomega_dsl.go is excluded by !vendor/**
  • vendor/github.com/onsi/gomega/internal/async_assertion.go is excluded by !vendor/**
  • vendor/github.com/onsi/gomega/matchers/be_comparable_to_matcher.go is excluded by !vendor/**
  • vendor/github.com/onsi/gomega/matchers/match_yaml_matcher.go is excluded by !vendor/**
  • vendor/github.com/spf13/pflag/flag.go is excluded by !vendor/**
  • vendor/github.com/spf13/pflag/golangflag.go is excluded by !vendor/**
  • vendor/github.com/spf13/pflag/string_to_string.go is excluded by !vendor/**
  • vendor/github.com/spf13/pflag/time.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/filter.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/internal/attribute.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/rawhelpers.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/value.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/internal/gen.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/internal/rawhelpers.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.34.0/MIGRATION.md is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.34.0/README.md is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.34.0/attribute_group.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.34.0/doc.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.34.0/exception.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.34.0/schema.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/trace/auto.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/attr.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/doc.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/id.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/number.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/resource.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/scope.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/span.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/status.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/traces.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/value.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/trace/noop.go is excluded by !vendor/**
  • vendor/google.golang.org/genproto/googleapis/rpc/status/status.pb.go is excluded by !**/*.pb.go, !vendor/**
  • vendor/google.golang.org/grpc/CONTRIBUTING.md is excluded by !vendor/**
  • vendor/google.golang.org/grpc/MAINTAINERS.md is excluded by !vendor/**
  • vendor/google.golang.org/grpc/README.md is excluded by !vendor/**
  • vendor/google.golang.org/grpc/balancer/balancer.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/balancer/base/balancer.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/balancer/endpointsharding/endpointsharding.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/balancer/pickfirst/internal/internal.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/balancer/pickfirst/pickfirst.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/balancer/pickfirst/pickfirstleaf/pickfirstleaf.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/balancer/roundrobin/roundrobin.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/balancer/subconn.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/balancer_wrapper.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go is excluded by !**/*.pb.go, !vendor/**
  • vendor/google.golang.org/grpc/clientconn.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/codec.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/credentials/credentials.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/credentials/insecure/insecure.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/credentials/tls.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/dialoptions.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/encoding/proto/proto.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/experimental/stats/metricregistry.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/experimental/stats/metrics.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/grpclog/internal/loggerv2.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/backoff/backoff.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/balancer/gracefulswitch/gracefulswitch.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/buffer/unbounded.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/channelz/trace.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/credentials/credentials.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/envconfig/envconfig.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/envconfig/xds.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/grpcsync/callback_serializer.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/grpcsync/event.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/grpcsync/oncefunc.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/internal.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/metadata/metadata.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/proxyattributes/proxyattributes.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/resolver/delegatingresolver/delegatingresolver.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/resolver/dns/dns_resolver.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/status/status.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/client_stream.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/controlbuf.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/flowcontrol.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/handler_server.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/http2_client.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/http2_server.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/http_util.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/proxy.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/server_stream.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/transport.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/mem/buffer_slice.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/picker_wrapper.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/preloader.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/resolver/map.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/resolver/resolver.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/resolver_wrapper.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/rpc_util.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/server.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/service_config.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/stats/handlers.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/stats/metrics.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/stats/stats.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/stream.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/version.go is excluded by !vendor/**
  • vendor/google.golang.org/protobuf/encoding/protowire/wire.go is excluded by !vendor/**
  • vendor/google.golang.org/protobuf/internal/editiondefaults/editions_defaults.binpb is excluded by !vendor/**
  • vendor/google.golang.org/protobuf/internal/filedesc/editions.go is excluded by !vendor/**
  • vendor/google.golang.org/protobuf/internal/filedesc/presence.go is excluded by !vendor/**
  • vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go is excluded by !vendor/**
  • vendor/google.golang.org/protobuf/internal/impl/codec_message_opaque.go is excluded by !vendor/**
  • vendor/google.golang.org/protobuf/internal/impl/message_opaque.go is excluded by !vendor/**
  • vendor/google.golang.org/protobuf/internal/impl/presence.go is excluded by !vendor/**
  • vendor/google.golang.org/protobuf/internal/version/version.go is excluded by !vendor/**
  • vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go is excluded by !vendor/**
  • vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go is excluded by !**/*.pb.go, !vendor/**
  • vendor/modules.txt is excluded by !vendor/**
  • vendor/open-cluster-management.io/api/operator/v1/0000_01_operator.open-cluster-management.io_clustermanagers.crd.yaml is excluded by !vendor/**
  • vendor/open-cluster-management.io/api/operator/v1/types_clustermanager.go is excluded by !vendor/**
  • vendor/open-cluster-management.io/api/operator/v1/zz_generated.deepcopy.go is excluded by !vendor/**
  • vendor/open-cluster-management.io/ocm/deploy/cluster-manager/chart/cluster-manager/crds/0000_01_operator.open-cluster-management.io_clustermanagers.crd.yaml is excluded by !vendor/**
📒 Files selected for processing (4)
  • go.mod (5 hunks)
  • pkg/cmd/init/cmd.go (1 hunks)
  • pkg/cmd/init/exec.go (1 hunks)
  • pkg/cmd/init/options.go (1 hunks)
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: zhiweiyin318
Repo: open-cluster-management-io/clusteradm PR: 516
File: go.mod:34-34
Timestamp: 2025-11-05T15:25:15.187Z
Learning: In the clusteradm repository, the dependency upgrade of open-cluster-management.io/ocm to v1.1.1-0.20251105064423-d80ec55608e7 is intentional and required to support the gRPC registration feature being added.
📚 Learning: 2025-11-05T15:25:15.187Z
Learnt from: zhiweiyin318
Repo: open-cluster-management-io/clusteradm PR: 516
File: go.mod:34-34
Timestamp: 2025-11-05T15:25:15.187Z
Learning: In the clusteradm repository, the dependency upgrade of open-cluster-management.io/ocm to v1.1.1-0.20251105064423-d80ec55608e7 is intentional and required to support the gRPC registration feature being added.

Applied to files:

  • go.mod
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: integration-test
  • GitHub Check: e2e-test
  • GitHub Check: verify
  • GitHub Check: unit-test
🔇 Additional comments (3)
pkg/cmd/init/options.go (1)

73-74: New grpcEndpointType option is aligned with CLI and exec usage

Field addition and documentation match the new flag and the switch logic in exec.go; no issues from an options/wiring perspective.

go.mod (1)

14-14: Dependency bumps look coherent with new gRPC/registration features

The set of version bumps (gomega, pflag, grpc, open-cluster-management.io/api and /ocm, OTEL, yaml v3, genproto/protobuf, etc.) looks internally consistent with the gRPC registration/endpoint work in this repo; nothing obviously concerning from the module list alone. Please ensure the full CI and integration test suites are green with these versions.

Based on learnings

Also applies to: 18-19, 31-31, 34-34, 43-43, 49-49, 131-132, 137-137, 147-148

pkg/cmd/init/exec.go (1)

101-127: gRPC endpoint type handling is sound; fix minor typo and confirm loadBalancer semantics

The new switch cleanly constructs an EndpointExposure for both hostname and loadBalancer types and errors on unknown types, which is good.

Two small follow-ups:

  • Line 105: fix the typo in the error message (ednpointendpoint).
  • For the loadBalancer case, decide whether --grpc-server should ever be required. If it must be non-empty, mirror the hostname check; if it is intentionally optional and filled in by the operator, the current behavior is fine but you may want to clarify that in the flag help.

Suggested typo fix:

-					return fmt.Errorf("grpc server should not be empty if the grpc ednpoint type is hostname")
+					return fmt.Errorf("grpc server should not be empty if the grpc endpoint type is hostname")

Also applies to: 132-132

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

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 826af53 and eb2e564.

⛔ Files ignored due to path filters (125)
  • go.sum is excluded by !**/*.sum
  • vendor/cloud.google.com/go/compute/metadata/CHANGES.md is excluded by !vendor/**
  • vendor/cloud.google.com/go/compute/metadata/log.go is excluded by !vendor/**
  • vendor/cloud.google.com/go/compute/metadata/metadata.go is excluded by !vendor/**
  • vendor/cloud.google.com/go/compute/metadata/retry_linux.go is excluded by !vendor/**
  • vendor/cloud.google.com/go/compute/metadata/syscheck.go is excluded by !vendor/**
  • vendor/cloud.google.com/go/compute/metadata/syscheck_linux.go is excluded by !vendor/**
  • vendor/cloud.google.com/go/compute/metadata/syscheck_windows.go is excluded by !vendor/**
  • vendor/github.com/Masterminds/semver/v3/CHANGELOG.md is excluded by !vendor/**
  • vendor/github.com/Masterminds/semver/v3/README.md is excluded by !vendor/**
  • vendor/github.com/Masterminds/semver/v3/constraints.go is excluded by !vendor/**
  • vendor/github.com/Masterminds/semver/v3/version.go is excluded by !vendor/**
  • vendor/github.com/onsi/gomega/CHANGELOG.md is excluded by !vendor/**
  • vendor/github.com/onsi/gomega/gomega_dsl.go is excluded by !vendor/**
  • vendor/github.com/onsi/gomega/internal/async_assertion.go is excluded by !vendor/**
  • vendor/github.com/onsi/gomega/matchers/be_comparable_to_matcher.go is excluded by !vendor/**
  • vendor/github.com/onsi/gomega/matchers/match_yaml_matcher.go is excluded by !vendor/**
  • vendor/github.com/spf13/pflag/flag.go is excluded by !vendor/**
  • vendor/github.com/spf13/pflag/golangflag.go is excluded by !vendor/**
  • vendor/github.com/spf13/pflag/string_to_string.go is excluded by !vendor/**
  • vendor/github.com/spf13/pflag/time.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/filter.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/internal/attribute.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/rawhelpers.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/value.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/internal/gen.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/internal/rawhelpers.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.34.0/MIGRATION.md is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.34.0/README.md is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.34.0/attribute_group.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.34.0/doc.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.34.0/exception.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.34.0/schema.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/trace/auto.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/attr.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/doc.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/id.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/number.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/resource.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/scope.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/span.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/status.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/traces.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/value.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/trace/noop.go is excluded by !vendor/**
  • vendor/google.golang.org/genproto/googleapis/rpc/status/status.pb.go is excluded by !**/*.pb.go, !vendor/**
  • vendor/google.golang.org/grpc/CONTRIBUTING.md is excluded by !vendor/**
  • vendor/google.golang.org/grpc/MAINTAINERS.md is excluded by !vendor/**
  • vendor/google.golang.org/grpc/README.md is excluded by !vendor/**
  • vendor/google.golang.org/grpc/balancer/balancer.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/balancer/base/balancer.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/balancer/endpointsharding/endpointsharding.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/balancer/pickfirst/internal/internal.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/balancer/pickfirst/pickfirst.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/balancer/pickfirst/pickfirstleaf/pickfirstleaf.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/balancer/roundrobin/roundrobin.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/balancer/subconn.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/balancer_wrapper.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go is excluded by !**/*.pb.go, !vendor/**
  • vendor/google.golang.org/grpc/clientconn.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/codec.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/credentials/credentials.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/credentials/insecure/insecure.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/credentials/tls.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/dialoptions.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/encoding/proto/proto.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/experimental/stats/metricregistry.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/experimental/stats/metrics.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/grpclog/internal/loggerv2.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/backoff/backoff.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/balancer/gracefulswitch/gracefulswitch.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/buffer/unbounded.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/channelz/trace.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/credentials/credentials.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/envconfig/envconfig.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/envconfig/xds.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/grpcsync/callback_serializer.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/grpcsync/event.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/grpcsync/oncefunc.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/internal.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/metadata/metadata.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/proxyattributes/proxyattributes.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/resolver/delegatingresolver/delegatingresolver.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/resolver/dns/dns_resolver.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/status/status.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/client_stream.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/controlbuf.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/flowcontrol.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/handler_server.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/http2_client.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/http2_server.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/http_util.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/proxy.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/server_stream.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/transport.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/mem/buffer_slice.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/picker_wrapper.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/preloader.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/resolver/map.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/resolver/resolver.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/resolver_wrapper.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/rpc_util.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/server.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/service_config.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/stats/handlers.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/stats/metrics.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/stats/stats.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/stream.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/version.go is excluded by !vendor/**
  • vendor/google.golang.org/protobuf/encoding/protowire/wire.go is excluded by !vendor/**
  • vendor/google.golang.org/protobuf/internal/editiondefaults/editions_defaults.binpb is excluded by !vendor/**
  • vendor/google.golang.org/protobuf/internal/filedesc/editions.go is excluded by !vendor/**
  • vendor/google.golang.org/protobuf/internal/filedesc/presence.go is excluded by !vendor/**
  • vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go is excluded by !vendor/**
  • vendor/google.golang.org/protobuf/internal/impl/codec_message_opaque.go is excluded by !vendor/**
  • vendor/google.golang.org/protobuf/internal/impl/message_opaque.go is excluded by !vendor/**
  • vendor/google.golang.org/protobuf/internal/impl/presence.go is excluded by !vendor/**
  • vendor/google.golang.org/protobuf/internal/version/version.go is excluded by !vendor/**
  • vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go is excluded by !vendor/**
  • vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go is excluded by !**/*.pb.go, !vendor/**
  • vendor/modules.txt is excluded by !vendor/**
  • vendor/open-cluster-management.io/api/operator/v1/0000_01_operator.open-cluster-management.io_clustermanagers.crd.yaml is excluded by !vendor/**
  • vendor/open-cluster-management.io/api/operator/v1/types_clustermanager.go is excluded by !vendor/**
  • vendor/open-cluster-management.io/api/operator/v1/zz_generated.deepcopy.go is excluded by !vendor/**
  • vendor/open-cluster-management.io/ocm/deploy/cluster-manager/chart/cluster-manager/crds/0000_01_operator.open-cluster-management.io_clustermanagers.crd.yaml is excluded by !vendor/**
📒 Files selected for processing (4)
  • go.mod (5 hunks)
  • pkg/cmd/init/cmd.go (1 hunks)
  • pkg/cmd/init/exec.go (1 hunks)
  • pkg/cmd/init/options.go (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • go.mod
  • pkg/cmd/init/options.go
🧰 Additional context used
🧠 Learnings (1)
📓 Common learnings
Learnt from: zhiweiyin318
Repo: open-cluster-management-io/clusteradm PR: 516
File: go.mod:34-34
Timestamp: 2025-11-05T15:25:15.187Z
Learning: In the clusteradm repository, the dependency upgrade of open-cluster-management.io/ocm to v1.1.1-0.20251105064423-d80ec55608e7 is intentional and required to support the gRPC registration feature being added.
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: e2e-test
  • GitHub Check: verify
  • GitHub Check: unit-test
🔇 Additional comments (3)
pkg/cmd/init/cmd.go (1)

104-104: LGTM! Clear flag definition.

The new --grpc-endpoint-type flag is well-defined with a sensible default value and clear documentation of supported types.

pkg/cmd/init/exec.go (2)

114-120: Verify inconsistent validation between hostname and loadBalancer endpoint types.

The code reveals asymmetric validation: the hostname case (line 106) rejects empty grpcServer with an error, while the loadBalancer case (lines 114-120) accepts any value without validation.

No tests exist for this code path, and the operatorv1.LoadBalancerConfig definition could not be located to clarify intended behavior.

Please confirm:

  1. Should loadBalancer also validate that grpcServer is non-empty?
  2. Or is allowing empty values intentional (assuming dynamic IP assignment from the cloud provider)?
  3. What is the expected behavior when users specify --grpc-endpoint-type loadBalancer without providing --grpc-server?

103-122: Verify that operatorv1.EndpointTypeHostname and operatorv1.EndpointTypeLoadBalancer convert to "hostname" and "loadBalancer".

The switch statement at line 103 compares o.grpcEndpointType (a string from the CLI flag) against string(operatorv1.EndpointTypeHostname) and string(operatorv1.EndpointTypeLoadBalancer). The flag is documented to accept "hostname" and "loadBalancer" as values. Manually verify that these constants from the external open-cluster-management.io/api/operator/v1 package (v1.1.1-0.20251112045944-3e1bb92b69e3) convert to the exact flag values expected by the switch statement.

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: 0

🧹 Nitpick comments (1)
pkg/cmd/init/exec.go (1)

103-123: Consider adding input validation in the validate() method.

The switch statement relies on exact string matching with operatorv1 constants. While the default case correctly handles unknown values, it would be more user-friendly to validate the --grpc-endpoint-type flag value earlier in the validate() method (similar to how registrationDrivers are validated at lines 192-196).

Apply this diff to add early validation:

 	for _, driver := range o.registrationDrivers {
 		if !validRegistrationDriver.Has(driver) {
 			return fmt.Errorf("only csr,awsirsa and grpc are valid drivers")
 		}
 	}
+
+	// Validate grpc endpoint type if grpc driver is enabled
+	if sets.New[string](o.registrationDrivers...).Has(operatorv1.GRPCAuthType) {
+		validEndpointTypes := sets.New[string](string(operatorv1.EndpointTypeHostname), string(operatorv1.EndpointTypeLoadBalancer))
+		if !validEndpointTypes.Has(o.grpcEndpointType) {
+			return fmt.Errorf("grpc endpoint type must be either hostname or loadBalancer, got: %s", o.grpcEndpointType)
+		}
+	}

This provides clearer error messages upfront rather than during execution.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between eb2e564 and c600b2d.

⛔ Files ignored due to path filters (125)
  • go.sum is excluded by !**/*.sum
  • vendor/cloud.google.com/go/compute/metadata/CHANGES.md is excluded by !vendor/**
  • vendor/cloud.google.com/go/compute/metadata/log.go is excluded by !vendor/**
  • vendor/cloud.google.com/go/compute/metadata/metadata.go is excluded by !vendor/**
  • vendor/cloud.google.com/go/compute/metadata/retry_linux.go is excluded by !vendor/**
  • vendor/cloud.google.com/go/compute/metadata/syscheck.go is excluded by !vendor/**
  • vendor/cloud.google.com/go/compute/metadata/syscheck_linux.go is excluded by !vendor/**
  • vendor/cloud.google.com/go/compute/metadata/syscheck_windows.go is excluded by !vendor/**
  • vendor/github.com/Masterminds/semver/v3/CHANGELOG.md is excluded by !vendor/**
  • vendor/github.com/Masterminds/semver/v3/README.md is excluded by !vendor/**
  • vendor/github.com/Masterminds/semver/v3/constraints.go is excluded by !vendor/**
  • vendor/github.com/Masterminds/semver/v3/version.go is excluded by !vendor/**
  • vendor/github.com/onsi/gomega/CHANGELOG.md is excluded by !vendor/**
  • vendor/github.com/onsi/gomega/gomega_dsl.go is excluded by !vendor/**
  • vendor/github.com/onsi/gomega/internal/async_assertion.go is excluded by !vendor/**
  • vendor/github.com/onsi/gomega/matchers/be_comparable_to_matcher.go is excluded by !vendor/**
  • vendor/github.com/onsi/gomega/matchers/match_yaml_matcher.go is excluded by !vendor/**
  • vendor/github.com/spf13/pflag/flag.go is excluded by !vendor/**
  • vendor/github.com/spf13/pflag/golangflag.go is excluded by !vendor/**
  • vendor/github.com/spf13/pflag/string_to_string.go is excluded by !vendor/**
  • vendor/github.com/spf13/pflag/time.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/filter.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/internal/attribute.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/rawhelpers.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/value.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/internal/gen.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/internal/rawhelpers.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.34.0/MIGRATION.md is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.34.0/README.md is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.34.0/attribute_group.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.34.0/doc.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.34.0/exception.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.34.0/schema.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/trace/auto.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/attr.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/doc.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/id.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/number.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/resource.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/scope.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/span.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/status.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/traces.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/value.go is excluded by !vendor/**
  • vendor/go.opentelemetry.io/otel/trace/noop.go is excluded by !vendor/**
  • vendor/google.golang.org/genproto/googleapis/rpc/status/status.pb.go is excluded by !**/*.pb.go, !vendor/**
  • vendor/google.golang.org/grpc/CONTRIBUTING.md is excluded by !vendor/**
  • vendor/google.golang.org/grpc/MAINTAINERS.md is excluded by !vendor/**
  • vendor/google.golang.org/grpc/README.md is excluded by !vendor/**
  • vendor/google.golang.org/grpc/balancer/balancer.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/balancer/base/balancer.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/balancer/endpointsharding/endpointsharding.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/balancer/pickfirst/internal/internal.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/balancer/pickfirst/pickfirst.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/balancer/pickfirst/pickfirstleaf/pickfirstleaf.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/balancer/roundrobin/roundrobin.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/balancer/subconn.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/balancer_wrapper.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go is excluded by !**/*.pb.go, !vendor/**
  • vendor/google.golang.org/grpc/clientconn.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/codec.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/credentials/credentials.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/credentials/insecure/insecure.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/credentials/tls.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/dialoptions.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/encoding/proto/proto.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/experimental/stats/metricregistry.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/experimental/stats/metrics.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/grpclog/internal/loggerv2.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/backoff/backoff.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/balancer/gracefulswitch/gracefulswitch.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/buffer/unbounded.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/channelz/trace.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/credentials/credentials.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/envconfig/envconfig.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/envconfig/xds.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/grpcsync/callback_serializer.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/grpcsync/event.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/grpcsync/oncefunc.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/internal.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/metadata/metadata.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/proxyattributes/proxyattributes.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/resolver/delegatingresolver/delegatingresolver.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/resolver/dns/dns_resolver.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/status/status.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/client_stream.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/controlbuf.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/flowcontrol.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/handler_server.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/http2_client.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/http2_server.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/http_util.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/proxy.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/server_stream.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/transport.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/mem/buffer_slice.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/picker_wrapper.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/preloader.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/resolver/map.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/resolver/resolver.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/resolver_wrapper.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/rpc_util.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/server.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/service_config.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/stats/handlers.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/stats/metrics.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/stats/stats.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/stream.go is excluded by !vendor/**
  • vendor/google.golang.org/grpc/version.go is excluded by !vendor/**
  • vendor/google.golang.org/protobuf/encoding/protowire/wire.go is excluded by !vendor/**
  • vendor/google.golang.org/protobuf/internal/editiondefaults/editions_defaults.binpb is excluded by !vendor/**
  • vendor/google.golang.org/protobuf/internal/filedesc/editions.go is excluded by !vendor/**
  • vendor/google.golang.org/protobuf/internal/filedesc/presence.go is excluded by !vendor/**
  • vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go is excluded by !vendor/**
  • vendor/google.golang.org/protobuf/internal/impl/codec_message_opaque.go is excluded by !vendor/**
  • vendor/google.golang.org/protobuf/internal/impl/message_opaque.go is excluded by !vendor/**
  • vendor/google.golang.org/protobuf/internal/impl/presence.go is excluded by !vendor/**
  • vendor/google.golang.org/protobuf/internal/version/version.go is excluded by !vendor/**
  • vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go is excluded by !vendor/**
  • vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go is excluded by !**/*.pb.go, !vendor/**
  • vendor/modules.txt is excluded by !vendor/**
  • vendor/open-cluster-management.io/api/operator/v1/0000_01_operator.open-cluster-management.io_clustermanagers.crd.yaml is excluded by !vendor/**
  • vendor/open-cluster-management.io/api/operator/v1/types_clustermanager.go is excluded by !vendor/**
  • vendor/open-cluster-management.io/api/operator/v1/zz_generated.deepcopy.go is excluded by !vendor/**
  • vendor/open-cluster-management.io/ocm/deploy/cluster-manager/chart/cluster-manager/crds/0000_01_operator.open-cluster-management.io_clustermanagers.crd.yaml is excluded by !vendor/**
📒 Files selected for processing (4)
  • go.mod (5 hunks)
  • pkg/cmd/init/cmd.go (1 hunks)
  • pkg/cmd/init/exec.go (1 hunks)
  • pkg/cmd/init/options.go (1 hunks)
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: zhiweiyin318
Repo: open-cluster-management-io/clusteradm PR: 516
File: go.mod:34-34
Timestamp: 2025-11-05T15:25:15.187Z
Learning: In the clusteradm repository, the dependency upgrade of open-cluster-management.io/ocm to v1.1.1-0.20251105064423-d80ec55608e7 is intentional and required to support the gRPC registration feature being added.
📚 Learning: 2025-11-05T15:25:15.187Z
Learnt from: zhiweiyin318
Repo: open-cluster-management-io/clusteradm PR: 516
File: go.mod:34-34
Timestamp: 2025-11-05T15:25:15.187Z
Learning: In the clusteradm repository, the dependency upgrade of open-cluster-management.io/ocm to v1.1.1-0.20251105064423-d80ec55608e7 is intentional and required to support the gRPC registration feature being added.

Applied to files:

  • go.mod
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: e2e-test
  • GitHub Check: verify
  • GitHub Check: unit-test
🔇 Additional comments (4)
pkg/cmd/init/options.go (1)

73-74: LGTM!

The new field is well-documented and clearly describes the supported endpoint types.

pkg/cmd/init/cmd.go (1)

104-104: LGTM!

The CLI flag is well-documented with clear help text describing the supported endpoint types. The default value "hostname" maintains backward compatibility.

go.mod (1)

19-19: Verified: gRPC v1.76.0 is safe for this codebase.

All five breaking changes in v1.76.0 have been assessed:

  1. Go version (1.24 required): Already using 1.24.0 ✓
  2. Balancer interface: No custom balancers found ✓
  3. GRPC_EXPERIMENTAL_ENABLE_LEAST_REQUEST: Not used ✓
  4. grpc-timeout behavior: Not explicitly used ✓
  5. Client error handling: No direct dependencies detected; 31 test files provide coverage for runtime validation ✓

Additionally, security advisory review shows v1.76.0 has no known vulnerabilities; historical HIGH severity advisories (HTTP/2 Rapid Reset) were in older versions (1.56–1.58) and are not applicable.

pkg/cmd/init/exec.go (1)

114-120: Verify if LoadBalancerConfig.Host can be empty or requires validation.

The code sets LoadBalancer.Host to o.grpcServer without validation (line 118), unlike the hostname case which validates it's not empty (lines 105-106). The grpcServer flag has no default value, so it will be an empty string if --grpc-server is not provided.

The LoadBalancerConfig type comes from the external dependency open-cluster-management.io/api/operator/v1. Without access to its definition, I cannot confirm whether:

  • Empty Host is acceptable (e.g., for auto-discovery)
  • Validation should be added to require --grpc-server for this endpoint type

Actions needed:

  1. Check the open-cluster-management.io/api repository for LoadBalancerConfig documentation
  2. Verify if the Host field allows empty values or requires validation
  3. If validation is required, add a check similar to lines 105-106 for the loadBalancer case

@zhiweiyin318
Copy link
Member Author

/assign @qiujian16
/assign @skeeey

@skeeey
Copy link
Member

skeeey commented Nov 19, 2025

LGTM

@qiujian16
Copy link
Member

/approve
/lgtm

@openshift-ci openshift-ci bot added the lgtm label Nov 19, 2025
@openshift-ci
Copy link

openshift-ci bot commented Nov 19, 2025

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: qiujian16, zhiweiyin318

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

The pull request process is described here

Needs approval from an approver in each of these files:

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

@openshift-merge-bot openshift-merge-bot bot merged commit d2eacbc into open-cluster-management-io:main Nov 19, 2025
11 checks passed
@zhiweiyin318 zhiweiyin318 deleted the grpc-lb branch November 19, 2025 14:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants