OCPBUGS-80970: Add Ignition v3.6 support to Machine Config Server#5815
OCPBUGS-80970: Add Ignition v3.6 support to Machine Config Server#5815zaneb wants to merge 1 commit into
Conversation
|
@zaneb: This pull request references Jira Issue OCPBUGS-80970, which is invalid:
Comment The bug has been updated to refer to the pull request using the external bug tracker. DetailsIn response to this:
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. |
WalkthroughThe PR updates Go module dependencies to newer versions and adds support for Ignition specification version 3.6 by registering a new v3.5→v3.6 converter, updating related tests, and extending API acceptance headers to handle the new version. Changes
Estimated code review effort🎯 2 (Simple) | ⏱️ ~12 minutes ✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
/jira refresh |
|
@zaneb: This pull request references Jira Issue OCPBUGS-80970, which is invalid:
Comment DetailsIn response to this:
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. |
|
/jira refresh |
|
@zaneb: This pull request references Jira Issue OCPBUGS-80970, which is valid. The bug has been moved to the POST state. 3 validation(s) were run on this bug
DetailsIn response to this:
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. |
Ignition has been updated to version 2.26.0 in CoreOS, which introduces
v3.6 of the config format. v2.26 sends the following Accept header:
application/vnd.coreos.ignition+json;version=3.6.0, */*;q=0.1
The Machine Config Server will not return earlier versions of the
ignition format than requested in the Accepts header, so it was
returning 400 Bad Request. This occurred because the converter only
supported up to v3.5.
Upgrade github.com/coreos/ignition/v2 from v2.20.0 to v2.26.0, which
includes v3.6 support. Add v3.5->v3.6 upward converter to the
ignition converter's buildConverterList().
The MCS now supports Ignition spec versions: 2.2, 3.0, 3.1, 3.2,
3.3, 3.4, 3.5, and 3.6.
Assisted-by: Claude Code
|
/lgtm |
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (2)
pkg/controller/common/helpers_test.go (1)
143-143: Add one explicit converter-path test for3.5.0 -> 3.6.0.This assertion verifies advertised support, but not the actual conversion execution path. A single case in
TestIgnitionConverterConvertwould harden regression coverage for this fix.Proposed test table addition
@@ func TestIgnitionConverterConvert(t *testing.T) { { name: "Conversion from 3.5 to 3.1", inputConfig: ign3Config, inputVersion: "3.5.0", outputVersion: "3.1.0", }, + { + name: "Conversion from 3.5 to 3.6", + inputConfig: ign3Config, + inputVersion: "3.5.0", + outputVersion: "3.6.0", + },🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@pkg/controller/common/helpers_test.go` at line 143, Add a concrete test row to TestIgnitionConverterConvert that exercises the actual converter execution path from "3.5.0" -> "3.6.0" (not just the supported list); locate the test table in pkg/controller/common/helpers_test.go inside TestIgnitionConverterConvert and add a case with input version "3.5.0" and target "3.6.0" (ensuring it asserts the expected converter behavior/output used by the Convert function) so the conversion logic for that upgrade is explicitly exercised rather than only advertised via the supported slice.pkg/server/api_test.go (1)
277-280: Use the new v3.6 header helper in aTestAPIHandlerscenario.Line 277 adds the helper, but current handler scenarios don’t exercise it. Adding one v3.6 request case would verify end-to-end behavior for this bugfix path.
Proposed `TestAPIHandler` scenario addition
@@ func TestAPIHandler(t *testing.T) { { name: "get spec v3_5 config path that exists", request: setV3_5AcceptHeaderOnReq(httptest.NewRequest(http.MethodGet, "http://testrequest/config/master", nil)), @@ }, }, + { + name: "get spec v3_6 config path that exists", + request: setV3_6AcceptHeaderOnReq(httptest.NewRequest(http.MethodGet, "http://testrequest/config/master", nil)), + serverFunc: func(poolRequest) (*runtime.RawExtension, error) { + return &runtime.RawExtension{ + Raw: helpers.MarshalOrDie(ctrlcommon.NewIgnConfig()), + }, nil + }, + checkResponse: func(t *testing.T, response *http.Response) { + checkStatus(t, response, http.StatusOK) + checkContentType(t, response, "application/json") + checkContentLength(t, response, expectedContentLength) + checkBodyLength(t, response, expectedContentLength) + }, + }, }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@pkg/server/api_test.go` around lines 277 - 280, The new helper setV3_6AcceptHeaderOnReq is never exercised; add a test case inside the existing TestAPIHandler table-driven scenarios that constructs the same base request used by other cases but passes it through setV3_6AcceptHeaderOnReq before invoking the handler (the test should call the same handler function used by TestAPIHandler), then assert the expected status code and response body for the v3.6 Accept header path; place the scenario alongside the other cases so it runs as part of TestAPIHandler and use the same assertion helpers the test suite uses to validate output.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@go.mod`:
- Line 55: Update the gRPC-Go dependency to v1.79.3 or later to address
CVE-2026-33186: change the google.golang.org/grpc version in go.mod (the
dependency entry for google.golang.org/grpc) to v1.79.3+, run `go get
google.golang.org/grpc@v1.79.3` (or newer), then run `go mod tidy` to update
go.sum and ensure the module graph is clean, run the test suite and any CI
vulnerability checks, and commit the updated go.mod and go.sum (and vendor files
if your repo vendors dependencies).
---
Nitpick comments:
In `@pkg/controller/common/helpers_test.go`:
- Line 143: Add a concrete test row to TestIgnitionConverterConvert that
exercises the actual converter execution path from "3.5.0" -> "3.6.0" (not just
the supported list); locate the test table in
pkg/controller/common/helpers_test.go inside TestIgnitionConverterConvert and
add a case with input version "3.5.0" and target "3.6.0" (ensuring it asserts
the expected converter behavior/output used by the Convert function) so the
conversion logic for that upgrade is explicitly exercised rather than only
advertised via the supported slice.
In `@pkg/server/api_test.go`:
- Around line 277-280: The new helper setV3_6AcceptHeaderOnReq is never
exercised; add a test case inside the existing TestAPIHandler table-driven
scenarios that constructs the same base request used by other cases but passes
it through setV3_6AcceptHeaderOnReq before invoking the handler (the test should
call the same handler function used by TestAPIHandler), then assert the expected
status code and response body for the v3.6 Accept header path; place the
scenario alongside the other cases so it runs as part of TestAPIHandler and use
the same assertion helpers the test suite uses to validate output.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: c21a3802-432c-47ef-a71b-90babaebdac3
⛔ Files ignored due to path filters (293)
go.sumis excluded by!**/*.sumvendor/github.com/aws/aws-sdk-go-v2/LICENSE.txtis excluded by!vendor/**,!**/vendor/**vendor/github.com/aws/aws-sdk-go-v2/NOTICE.txtis excluded by!vendor/**,!**/vendor/**vendor/github.com/aws/aws-sdk-go-v2/aws/arn/arn.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/go-systemd/v22/dbus/dbus.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/go-systemd/v22/dbus/methods.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/go-systemd/v22/dbus/subscription.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/go-systemd/v22/dbus/subscription_set.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/go-systemd/v22/journal/journal.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/go-systemd/v22/journal/journal_unix.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/go-systemd/v22/unit/deserialize.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/go-systemd/v22/unit/doc.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/go-systemd/v22/unit/option.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/go-systemd/v22/unit/serialize.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/ignition/v2/config/shared/errors/errors.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/ignition/v2/config/v3_4/translate/translate.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/ignition/v2/config/v3_4/types/directory.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/ignition/v2/config/v3_4/types/file.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/ignition/v2/config/v3_4/types/mode.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/ignition/v2/config/v3_4/types/url.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/ignition/v2/config/v3_5/types/directory.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/ignition/v2/config/v3_5/types/file.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/ignition/v2/config/v3_5/types/mode.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/ignition/v2/config/v3_5/types/url.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/ignition/v2/config/v3_6/translate/translate.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/ignition/v2/config/v3_6/types/cex.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/ignition/v2/config/v3_6/types/clevis.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/ignition/v2/config/v3_6/types/config.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/ignition/v2/config/v3_6/types/device.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/ignition/v2/config/v3_6/types/directory.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/ignition/v2/config/v3_6/types/disk.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/ignition/v2/config/v3_6/types/file.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/ignition/v2/config/v3_6/types/filesystem.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/ignition/v2/config/v3_6/types/headers.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/ignition/v2/config/v3_6/types/ignition.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/ignition/v2/config/v3_6/types/kargs.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/ignition/v2/config/v3_6/types/luks.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/ignition/v2/config/v3_6/types/mode.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/ignition/v2/config/v3_6/types/node.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/ignition/v2/config/v3_6/types/partition.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/ignition/v2/config/v3_6/types/passwd.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/ignition/v2/config/v3_6/types/path.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/ignition/v2/config/v3_6/types/proxy.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/ignition/v2/config/v3_6/types/raid.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/ignition/v2/config/v3_6/types/resource.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/ignition/v2/config/v3_6/types/schema.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/ignition/v2/config/v3_6/types/storage.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/ignition/v2/config/v3_6/types/systemd.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/ignition/v2/config/v3_6/types/tang.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/ignition/v2/config/v3_6/types/tls.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/ignition/v2/config/v3_6/types/unit.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/ignition/v2/config/v3_6/types/url.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/ignition/v2/config/v3_6/types/verification.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/coreos/ignition/v2/config/validate/validate.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/go-jose/go-jose/v4/CHANGELOG.mdis excluded by!vendor/**,!**/vendor/**vendor/github.com/go-jose/go-jose/v4/README.mdis excluded by!vendor/**,!**/vendor/**vendor/github.com/go-jose/go-jose/v4/crypter.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/go-jose/go-jose/v4/jwe.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/go-jose/go-jose/v4/jwk.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/go-jose/go-jose/v4/jws.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/go-jose/go-jose/v4/shared.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/go-jose/go-jose/v4/signing.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/go-jose/go-jose/v4/symmetric.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/spf13/pflag/flag.gois excluded by!vendor/**,!**/vendor/**vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/LICENSEis excluded by!vendor/**,!**/vendor/**vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/config.gois excluded by!vendor/**,!**/vendor/**vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/interceptor.gois excluded by!vendor/**,!**/vendor/**vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/internal/parse.gois excluded by!vendor/**,!**/vendor/**vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/metadata_supplier.gois excluded by!vendor/**,!**/vendor/**vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/semconv.gois excluded by!vendor/**,!**/vendor/**vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/stats_handler.gois excluded by!vendor/**,!**/vendor/**vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/version.gois excluded by!vendor/**,!**/vendor/**vendor/go.opentelemetry.io/otel/semconv/v1.37.0/rpcconv/metric.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/mod/modfile/print.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/mod/modfile/read.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/mod/modfile/rule.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/mod/module/module.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/mod/semver/semver.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/http2/transport.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/http2/writesched_priority_rfc9218.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/trace/events.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/websocket/hybi.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/oauth2/deviceauth.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/oauth2/oauth2.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/oauth2/pkce.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/oauth2/token.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/oauth2/transport.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sync/errgroup/errgroup.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/term/terminal.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/text/encoding/japanese/eucjp.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/text/encoding/japanese/iso2022jp.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/text/encoding/japanese/shiftjis.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/text/encoding/korean/euckr.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/text/encoding/simplifiedchinese/gbk.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/text/encoding/simplifiedchinese/hzgb2312.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/text/encoding/traditionalchinese/big5.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/text/encoding/unicode/unicode.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/time/rate/rate.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/time/rate/sometimes.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/diagnostic.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/appends/appends.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/asmdecl/asmdecl.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/assign/assign.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/atomic/atomic.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/bools/bools.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/buildssa/buildssa.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/buildtag/buildtag.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/cgocall/cgocall.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/copylock/copylock.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/ctrlflow/ctrlflow.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/deepequalerrors/deepequalerrors.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/defers/defers.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/directive/directive.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/errorsas/errorsas.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/fieldalignment/fieldalignment.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/framepointer/framepointer.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/ifaceassert/ifaceassert.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/inspect/inspect.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/internal/analysisutil/util.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/internal/ctrlflowinternal/ctrlflowinternal.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/loopclosure/loopclosure.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/lostcancel/lostcancel.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/nilfunc/nilfunc.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/nilness/nilness.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/printf/doc.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/printf/printf.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/printf/types.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/reflectvaluecompare/reflectvaluecompare.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/shadow/shadow.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/sigchanyzer/sigchanyzer.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/slog/slog.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/stdmethods/stdmethods.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/stringintconv/string.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/testinggoroutine/testinggoroutine.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/testinggoroutine/util.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/tests/tests.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/timeformat/timeformat.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/unmarshal/unmarshal.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/unreachable/unreachable.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/unsafeptr/unsafeptr.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/unusedresult/unusedresult.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/analysis/passes/unusedwrite/unusedwrite.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/ast/astutil/imports.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/ast/inspector/cursor.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/cfg/builder.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/cfg/cfg.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/packages/packages.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/packages/visit.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/ssa/builder.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/ssa/create.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/ssa/emit.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/ssa/func.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/ssa/instantiate.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/ssa/ssa.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/ssa/ssautil/visit.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/ssa/subst.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/ssa/util.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/types/objectpath/objectpath.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/types/typeutil/callee.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/types/typeutil/map.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/imports/forward.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/analysis/analyzerutil/doc.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/analysis/analyzerutil/extractdoc.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/analysis/analyzerutil/readfile.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/analysis/analyzerutil/version.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/analysis/typeindex/typeindex.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/analysisinternal/analysis.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/astutil/stringlit.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/astutil/util.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/cfginternal/cfginternal.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/event/core/export.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/event/label/label.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/gcimporter/bimport.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/gcimporter/iexport.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/gcimporter/iimport.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/imports/sortimports.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/modindex/lookup.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/moreiters/iters.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/packagepath/packagepath.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/refactor/delete.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/refactor/edit.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/refactor/imports.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/refactor/refactor.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/ssainternal/ssainternal.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/stdlib/deps.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/stdlib/import.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/stdlib/manifest.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/stdlib/stdlib.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typeparams/normalize.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typesinternal/classify_call.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typesinternal/element.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typesinternal/fx.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typesinternal/isnamed.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typesinternal/qualifier.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typesinternal/types.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typesinternal/varkind.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typesinternal/varkind_go124.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typesinternal/zerovalue.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/versions/features.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/refactor/satisfy/find.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/genproto/googleapis/api/annotations/annotations.pb.gois excluded by!**/*.pb.go,!vendor/**,!**/vendor/**vendor/google.golang.org/genproto/googleapis/api/annotations/client.pb.gois excluded by!**/*.pb.go,!vendor/**,!**/vendor/**vendor/google.golang.org/genproto/googleapis/api/annotations/field_behavior.pb.gois excluded by!**/*.pb.go,!vendor/**,!**/vendor/**vendor/google.golang.org/genproto/googleapis/api/annotations/field_info.pb.gois excluded by!**/*.pb.go,!vendor/**,!**/vendor/**vendor/google.golang.org/genproto/googleapis/api/annotations/http.pb.gois excluded by!**/*.pb.go,!vendor/**,!**/vendor/**vendor/google.golang.org/genproto/googleapis/api/annotations/resource.pb.gois excluded by!**/*.pb.go,!vendor/**,!**/vendor/**vendor/google.golang.org/genproto/googleapis/api/annotations/routing.pb.gois excluded by!**/*.pb.go,!vendor/**,!**/vendor/**vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/checked.pb.gois excluded by!**/*.pb.go,!vendor/**,!**/vendor/**vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/eval.pb.gois excluded by!**/*.pb.go,!vendor/**,!**/vendor/**vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/explain.pb.gois excluded by!**/*.pb.go,!vendor/**,!**/vendor/**vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/syntax.pb.gois excluded by!**/*.pb.go,!vendor/**,!**/vendor/**vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/value.pb.gois excluded by!**/*.pb.go,!vendor/**,!**/vendor/**vendor/google.golang.org/genproto/googleapis/api/httpbody/httpbody.pb.gois excluded by!**/*.pb.go,!vendor/**,!**/vendor/**vendor/google.golang.org/genproto/googleapis/api/launch_stage.pb.gois excluded by!**/*.pb.go,!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/CONTRIBUTING.mdis excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/MAINTAINERS.mdis excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/README.mdis excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/balancer/balancer.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/balancer/endpointsharding/endpointsharding.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/balancer/pickfirst/pickfirst.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/balancer/pickfirst/pickfirstleaf/pickfirstleaf.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/balancer/roundrobin/roundrobin.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/balancer_wrapper.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.gois excluded by!**/*.pb.go,!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/clientconn.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/credentials/credentials.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/credentials/insecure/insecure.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/credentials/tls.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/dialoptions.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/encoding/encoding.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/encoding/internal/internal.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/encoding/proto/proto.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/experimental/stats/metricregistry.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/experimental/stats/metrics.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/health/grpc_health_v1/health.pb.gois excluded by!**/*.pb.go,!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/health/grpc_health_v1/health_grpc.pb.gois excluded by!**/*.pb.go,!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/internal/balancer/gracefulswitch/gracefulswitch.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/internal/buffer/unbounded.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/internal/channelz/trace.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/internal/credentials/credentials.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/internal/envconfig/envconfig.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/internal/envconfig/xds.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/internal/experimental.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/internal/grpcsync/callback_serializer.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/internal/grpcsync/event.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/internal/idle/idle.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/internal/internal.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/internal/resolver/delegatingresolver/delegatingresolver.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/internal/resolver/dns/dns_resolver.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/internal/stats/metrics_recorder_list.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/internal/stats/stats.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/internal/status/status.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/internal/transport/client_stream.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/internal/transport/controlbuf.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/internal/transport/flowcontrol.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/internal/transport/handler_server.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/internal/transport/http2_client.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/internal/transport/http2_server.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/internal/transport/http_util.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/internal/transport/server_stream.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/internal/transport/transport.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/mem/buffer_pool.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/mem/buffer_slice.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/picker_wrapper.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/preloader.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/resolver/resolver.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/resolver_wrapper.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/rpc_util.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/server.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/stats/handlers.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/stats/stats.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/stream.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/grpc/version.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/protobuf/internal/editionssupport/editions.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/protobuf/internal/encoding/tag/tag.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/protobuf/internal/encoding/text/decode.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/protobuf/internal/filedesc/desc.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/protobuf/internal/filedesc/desc_init.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/protobuf/internal/filedesc/editions.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/protobuf/internal/impl/codec_map.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/protobuf/internal/impl/decode.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/protobuf/internal/impl/validate.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/protobuf/internal/version/version.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/protobuf/proto/decode.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/protobuf/reflect/protodesc/desc.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/protobuf/reflect/protodesc/desc_init.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/protobuf/reflect/protodesc/editions.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/protobuf/reflect/protodesc/proto.gois excluded by!vendor/**,!**/vendor/**vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.gois excluded by!**/*.pb.go,!vendor/**,!**/vendor/**vendor/google.golang.org/protobuf/types/known/timestamppb/timestamp.pb.gois excluded by!**/*.pb.go,!vendor/**,!**/vendor/**vendor/modules.txtis excluded by!vendor/**,!**/vendor/**
📒 Files selected for processing (4)
go.modpkg/controller/common/helpers_test.gopkg/controller/common/ignition_converter.gopkg/server/api_test.go
| google.golang.org/grpc v1.72.2 | ||
| golang.org/x/net v0.49.0 | ||
| golang.org/x/time v0.14.0 | ||
| google.golang.org/grpc v1.78.0 |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "Querying OSV for google.golang.org/grpc@v1.78.0 ..."
curl -sS https://api.osv.dev/v1/query \
-H 'Content-Type: application/json' \
-d '{"package":{"name":"google.golang.org/grpc","ecosystem":"Go"},"version":"v1.78.0"}' \
| jq '{vulns: [.vulns[]? | {id, aliases, summary, modified}]}'
echo
echo "Fetching GHSA details for GHSA-p77j-4mvh-x3m3 ..."
curl -sS https://api.osv.dev/v1/vulns/GHSA-p77j-4mvh-x3m3 \
| jq '{id, aliases, summary, affected}'Repository: openshift/machine-config-operator
Length of output: 1204
Bump gRPC-Go to v1.79.3 or later; v1.78.0 contains a critical authorization bypass vulnerability (GHSA-p77j-4mvh-x3m3 / CVE-2026-33186).
The current version is vulnerable to an authorization bypass via missing leading slash validation in the :path header. This must be fixed before merge.
🧰 Tools
🪛 OSV Scanner (2.3.5)
[CRITICAL] 55-55: google.golang.org/grpc 1.78.0: gRPC-Go has an authorization bypass via missing leading slash in :path
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@go.mod` at line 55, Update the gRPC-Go dependency to v1.79.3 or later to
address CVE-2026-33186: change the google.golang.org/grpc version in go.mod (the
dependency entry for google.golang.org/grpc) to v1.79.3+, run `go get
google.golang.org/grpc@v1.79.3` (or newer), then run `go mod tidy` to update
go.sum and ensure the module graph is clean, run the test suite and any CI
vulnerability checks, and commit the updated go.mod and go.sum (and vendor files
if your repo vendors dependencies).
|
/retest-required |
|
/test ? |
| func buildConverterList() []ignitionVersionConverter { | ||
| return []ignitionVersionConverter{ | ||
| // v3.5 -> v3.6 | ||
| newFunctionConverterTypedNoError[v35types.Config, v36types.Config](v35types.MaxVersion, v36types.MaxVersion, v36translate.Translate), |
There was a problem hiding this comment.
From the entries below, it looks like we also need v3.6 -> v3.5
There was a problem hiding this comment.
@zaneb @travier yes, we need to be able to convert up/down, add the other conversion like this:
// v3.6 -> v3.5
newFunctionConverterTyped[v36types.Config, v35types.Config](v36types.MaxVersion, v35types.MaxVersion, v36tov35.Translate),But if don't miss changes in the ignition repo, there's no v36tov35 conversion yet
There was a problem hiding this comment.
Ah yes, this is coreos/ign-converter#58 which needs coreos/ign-converter#59 first.
|
/test e2e-agent-compact-ipv4 |
|
/approve |
|
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: bfournie, pablintino, zaneb The full list of commands accepted by this bot can be found here. The pull request process is described here DetailsNeeds approval from an approver in each of these files:
Approvers can indicate their approval by writing |
|
/hold |
|
@zaneb: The following tests failed, say
Full PR test history. Your PR dashboard. DetailsInstructions 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. |
|
Superseded by #5816 |
|
/close |
|
@pablintino: Closed this PR. DetailsIn response to this:
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. |
|
@zaneb: This pull request references Jira Issue OCPBUGS-80970. The bug has been updated to no longer refer to the pull request using the external bug tracker. DetailsIn response to this:
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. |
Ignition has been updated to version 2.26.0 in CoreOS, which introduces v3.6 of the config format. v2.26 sends the following Accept header:
The Machine Config Server will not return earlier versions of the ignition format than requested in the Accepts header, so it was returning 400 Bad Request. This occurred because the converter only supported up to v3.5.
Upgrade github.com/coreos/ignition/v2 from v2.20.0 to v2.26.0, which includes v3.6 support. Add v3.5->v3.6 upward converter to the ignition converter's buildConverterList().
The MCS now supports Ignition spec versions: 2.2, 3.0, 3.1, 3.2, 3.3, 3.4, 3.5, and 3.6.