Conversation
Appends the tls-scanner-run step registry ref to the existing e2e-aws test for file-integrity-operator, scoped to the openshift-file-integrity namespace where the operator and its aide daemonset run, with PQC_CHECK=true to assert TLS 1.3 + ML-KEM (X25519MLKEM768) readiness. Follows the pattern already merged for RHOAI (openshift#82555): append '- ref: tls-scanner-run' to the existing e2e test's step list and add the required tls-scanner-tool base image, rather than provisioning a separate cluster/job as compliance-operator's manual approach did. Verified manually on a live OCP 4.22.13 cluster: deployed FIO built from the current Go 1.25 source and ran the actual upstream tls-scanner tool against the openshift-file-integrity namespace with --pqc-check. The operator's metrics endpoint (port 8585) reported: TLS 1.3: SUPPORTED, ML-KEM: SUPPORTED, ML-KEM KEMs: X25519MLKEM768 PQC COMPLIANCE CHECK: PASSED No code changes were required in file-integrity-operator itself: the metrics TLS listener (pkg/controller/metrics/metrics.go) sets no CurvePreferences/MaxVersion, so Go 1.25's default TLS 1.3 group preference (which includes X25519MLKEM768) already applies. Ref: https://redhat.atlassian.net/browse/CMP-4504
|
@guzalv: This pull request references CMP-4504 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 epic to target the "5.1.0" version, but no target version was set. 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. |
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository YAML (base), Central YAML (inherited) Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (1)
Included review availability: Your plan provides up to 2 included reviews per hour; 1 remains after this review. WalkthroughThe file-integrity-operator configuration adds the ChangesTLS scanner integration
Priority: ⬇️ Low Estimated code review effort: 2 (Simple) | ~10 minutes Change: Other Merge Risk: ⚪ Minimal · up to The optional TLS scanner test configuration introduces no confirmed merge-blocking risk. Important Pre-merge checks failedPlease resolve all errors before merging. Addressing warnings is optional. ❌ Failed checks (1 error)
✅ Passed checks (14 passed)
Full details: No-Sensitive-Data-In-LogsExplanation The new Resolution Do not stream raw scanner output to the CI log. Emit only aggregate PQC results, or redact private IPs and pod identifiers before forwarding output. Also review the copied JSON, CSV, JUnit, and log artifacts and redact or restrict them if CI artifacts are publicly accessible.
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
/pj-rehearse |
|
@guzalv: now processing your pj-rehearse request. Please allow up to 10 minutes for jobs to trigger or cancel. |
Setting SCANNER_NAMESPACE to the existing openshift-file-integrity namespace (already created by the e2e-aws test's 'make e2e' step) makes tls-scanner-run take the OWNS_NAMESPACE=false code path: it deploys the scanner pod into that namespace instead of creating its own, with hostNetwork: false, hostPID: false, a restricted (non-privileged, non-root, runAsUser: 65532) securityContext, and no 'privileged' SCC grant -- instead of the default owned-namespace path which runs hostNetwork/hostPID/privileged as root. This mode uses the kube API for pod discovery and exec rather than host networking, which matches how we already validated ML-KEM support manually on a live cluster (via pods/exec into the target pod), so it does not change scan coverage for FIO's single-namespace target. Verified with 'make ci-operator-config' (idempotent after this change).
|
/pj-rehearse pull-ci-openshift-file-integrity-operator-master-e2e-aws pull-ci-openshift-file-integrity-operator-master-e2e-bundle-aws pull-ci-openshift-file-integrity-operator-master-e2e-bundle-aws-upgrade |
|
@guzalv: now processing your pj-rehearse request. Please allow up to 10 minutes for jobs to trigger or cancel. |
|
/pj-rehearse pull-ci-openshift-file-integrity-operator-master-e2e-aws |
|
@guzalv: now processing your pj-rehearse request. Please allow up to 10 minutes for jobs to trigger or cancel. |
…ng e2e test The e2e-aws job's 'make e2e' step tears down its own namespace on exit (every test in tests/e2e/e2e_test.go runs 'defer testctx.Cleanup()'), regardless of pass/fail. Appending tls-scanner-run after it fails with 'namespaces "openshift-file-integrity" not found', confirmed by the first real rehearsal run: https://prow.ci.openshift.org/view/gs/test-platform-results-public/pr-logs/pull/openshift_release/85402/rehearse-85402-pull-ci-openshift-file-integrity-operator-master-e2e-aws/2100886946011156480 Revert the e2e-aws change entirely, and instead add a new, separate optional test (e2e-aws-tls-scanner) that uses 'make deploy' (just kustomize apply, no test framework, no cleanup) to stand up a persistent operator installation, then scans it. This matches what compliance-operator's own tls-scanner PRs settled on for the same reason -- see commit message 99893f0 in openshift#84296: 'Following yuumasato's approach in PR openshift#84972... Use make deploy directly (skip e2e-deployment test)'.
|
New changes are detected. LGTM label has been removed. |
|
/pj-rehearse pull-ci-openshift-file-integrity-operator-master-e2e-aws-tls-scanner |
|
@guzalv: now processing your pj-rehearse request. Please allow up to 10 minutes for jobs to trigger or cancel. |
|
@guzalv: job(s): pull-ci-openshift-file-integrity-operator-master-e2e-aws-tls-scanner either don't exist or were not found to be affected, and cannot be rehearsed |
Unlike the previous revision (which only added a step to the existing e2e-aws test, leaving the generated job spec untouched since it merely invokes 'ci-operator --target=e2e-aws'), this revision introduces a brand new test name, which requires its own generated Prow job entry in ci-operator/jobs/. pj-rehearse confirmed this is required: 'job(s): pull-ci-openshift-file-integrity-operator-master-e2e-aws-tls-scanner either don't exist or were not found to be affected, and cannot be rehearsed' Hand-crafted following the exact boilerplate of the sibling e2e-bundle-aws job (same cluster_profile: openshift-org-aws, same optional:true/always_run:false shape), since 'make jobs' (ci-operator-prowgen) could not be run standalone here -- it requires the full step-registry tree to resolve every ref/chain/workflow used anywhere in the config, which isn't practical in this sparse checkout. Validated instead with 'make sanitize-prow-jobs', which is repo-local (only needs ci-operator/jobs + core-services/sanitize-prow-jobs) and produced zero additional changes on top of this hand-written entry, confirming it already matches the tool's expected normalized form. The real CI 'generated-config' presubmit will independently verify this is byte-for-byte what the full generator would produce.
|
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: guzalv, taimurhafeez 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 |
|
/pj-rehearse pull-ci-openshift-file-integrity-operator-master-e2e-aws-tls-scanner |
|
@guzalv: now processing your pj-rehearse request. Please allow up to 10 minutes for jobs to trigger or cancel. |
The rehearsal run failed inside 'make deploy' with 'kubectl: command not found': https://storage.googleapis.com/test-platform-results-public/pr-logs/pull/openshift_release/85402/rehearse-85402-pull-ci-openshift-file-integrity-operator-master-e2e-aws-tls-scanner/2100939653510074368/artifacts/e2e-aws-tls-scanner/deploy/build-log.txt FIO's Makefile 'install'/'deploy' targets are kubebuilder-scaffolded boilerplate that shell out to a literal 'kubectl' binary, unlike 'make e2e' (which applies manifests via the Go client library inside the test binary itself, never invoking a CLI tool). The CI cli image only provides 'oc'. Symlink oc as kubectl on PATH before invoking make, entirely within this CI step -- no change to file-integrity-operator's Makefile needed, keeping this PR CI-only as intended.
|
/pj-rehearse pull-ci-openshift-file-integrity-operator-master-e2e-aws-tls-scanner |
|
@guzalv: now processing your pj-rehearse request. Please allow up to 10 minutes for jobs to trigger or cancel. |
|
[REHEARSALNOTIFIER]
Interacting with pj-rehearseComment: Once you are satisfied with the results of the rehearsals, comment: |
|
@guzalv: 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. |
What
Adds post-quantum readiness (ML-KEM) testing for the File Integrity Operator's TLS endpoints, per CMP-4504 (layered-product tracker for OCPSTRAT-3303 / OCP 4.22 ML-KEM readiness).
Adds a new, dedicated, optional test
e2e-aws-tls-scannerthat:make e2e-set-image deploy(plain kustomize apply, no test framework — leaves theopenshift-file-integritynamespace and Deployment running).tls-scanner-runstep registry ref against it, withPQC_CHECK=trueandSCANNER_NAMESPACE/SCAN_NAMESPACEboth set toopenshift-file-integrity(restricted pod-mode scan — see below).Why a separate test, not appended to the existing
e2e-awsjobMy first attempt appended
tls-scanner-rundirectly onto the existinge2e-awstest (mirroring openshift/release#82555, RHOAI's merged pattern). That failed on the first real rehearsal run withnamespaces "openshift-file-integrity" not found: FIO'smake e2eruns its own Go e2e test suite, and every test intests/e2e/e2e_test.gorunsdefer testctx.Cleanup(), which tears down the namespace on exit regardless of pass/fail. By the timetls-scanner-runran afterward, there was nothing left to scan. (rehearsal log)This is the same reason Compliance Operator's own tls-scanner work (openshift/release#84972 / #84296) explicitly used
make deployinstead of theire2e-deploymenttest target (see commit message in #84296: "Following yuumasato's approach in PR #84972... Usemake deploydirectly (skip e2e-deployment test)"). This PR follows the same approach for FIO: a plainmake deployleaves a persistent installation (confirmed:config/default→config/ns/ns.yamlcreates the namespace, no teardown), whichtls-scanner-runcan then scan.Restricted (non-privileged) scan mode
SCANNER_NAMESPACEis set (not left to the step's default) sotls-scanner-rundeploys its scanner pod into the existingopenshift-file-integritynamespace instead of creating its own dedicated,hostNetwork/hostPID/privileged-as-root namespace. This was flagged by CodeRabbit'sContainer-Privilegespre-merge check on an earlier revision of this PR, and matches the identical mitigation both merged Compliance Operator PRs use (SCANNER_NAMESPACE: openshift-compliancein #84296).tls-scanner-toolbase image versionUses
ocp/4.22:tls-scanner-tool. I confirmed via theopenshift/tls-scannerrepo's own CI config (ci-operator/config/openshift/tls-scanner/openshift-tls-scanner-release-*.yaml) that4.22,4.23, and5.0all have activepromotion(so the image is actually published), while5.1(which would otherwise match FIO's ownreleases.latesttarget) haspromotion.to[0].disabled: true— i.e. that tag is not reliably published.4.22also matches two independent working precedents (RHOAI #82555, Compliance Operator #84296).Testing
Verified manually end-to-end on a live OCP 4.22.13 cluster (not just CI-config review):
master(commit8b647112, already on Go 1.25.11) and deployed it to the cluster in theopenshift-file-integritynamespace, then created the sampleFileIntegrityCR to bring up the full operator +aideDaemonSet.tls-scannertool from source (the CI-onlytls-scanner-toolbase image isn't pullable outside the CI registry) and ran it in-cluster exactly as thetls-scanner-runstep does:tls-scanner --all-pods --namespace-filter openshift-file-integrity --pqc-check.pkg/controller/metrics/metrics.go) is fully PQC-ready:No code changes were needed in file-integrity-operator to satisfy the "offers ML-KEM by default" requirement — the metrics TLS listener sets no
CurvePreferences/MaxVersion, so Go 1.25's default TLS 1.3 group preference (which includesX25519MLKEM768) already applies. (Ports 8081/8383 are plain HTTP health/controller-runtime-metrics endpoints by design, not TLS.) Separately, FIO does still hardcode a static cipher/version fallback that doesn't yet observe the cluster'sTLSSecurityProfile/TLSAdherencePolicy(the other half of the epic's AC) — that is being tracked as follow-up work in the file-integrity-operator repo itself, out of scope for this CI-only PR.Rehearsal:
ci/rehearse/openshift/file-integrity-operator/master/e2e-aws-tls-scannerin progress.cc @yuumasato — your CMP-4503 compliance-operator work was the reference pattern pointed to for this change.
Summary by CodeRabbit
The File Integrity Operator CI configuration adds an optional
e2e-aws-tls-scannertest.ocp/4.22:tls-scanner-toolbase image.make e2e-set-image deploy.kubectlshim when the CI image includesoconly.tls-scanner-runwithPQC_CHECK=trueagainst theopenshift-file-integritynamespace.