924 Commits
Author SHA1 Message Date
Rahul ShettyandClaude Opus 4.6 a2e57b7b51 fix: pass ip commands as single strings to avoid bash -c argument splitting (#1459)
exec_cmd_in_pod wraps commands with `bash -c` when no base_command is
specified. Passing ["ip", "-br", "addr", "show"] produces
["bash", "-c", "ip", "-br", "addr", "show"]. Due to bash -c semantics,
only the first argument after -c ("ip") is treated as the command
string; the rest become unused positional parameters. This caused bare
`ip` to run with no arguments, printing help/usage text instead of
interface data.

The egress scenario was unaffected because it uses base_command="chroot"
which constructs commands correctly without bash -c wrapping.

Pass each command as a single string (e.g. ["ip -br addr show"]) so
bash -c treats it as one complete command.

Closes #1380

Signed-off-by: Rahul Shetty <rashetty@redhat.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-07-10 17:45:08 +05:30
Dev jaiswalandPaige Patton 98a88ccb46 ci: pin workflow action references to commit SHAs (#1417)
Signed-off-by: cynox-66 <devj2311@gmail.com>
Co-authored-by: Paige Patton <64206430+paigerube14@users.noreply.github.com>
2026-07-08 13:54:23 -04:00
Abhiraj SinghandPaige Patton 9d78fa4b93 docs: align documented dependency versions with requirements.txt (#1455)
Signed-off-by: abhiraj75 <itsabhiraj27@gmail.com>
Co-authored-by: Paige Patton <64206430+paigerube14@users.noreply.github.com>
2026-07-08 13:24:36 -04:00
Paige Patton 501755d193 adding krknctl groups (#1448)
Assisted By: Claude Code:
Assisted By: Claude Code:

Signed-off-by: Paige Patton <prubenda@redhat.com>
2026-07-08 12:56:47 -04:00
78fd1146ff test: migrate container_scenarios functional test to tests_v2 (#1407)
* feat: migrate container scenarios tests to pytest v2
Migrate CI/tests/test_container.sh to CI/tests_v2/scenarios/container_scenarios/.
Adds dry_run support to ContainerScenarioPlugin and moves legacy test to CI/legacy/.
Closes #1399

Signed-off-by: qsxDree <kurling.town@gmail.com>

* test: strengthen container label selector and dry-run behavior

Deploy a decoy workload to verify label_selector filtering, and skip pod
monitoring when dry_run is enabled so dry runs return without waiting for
expected_recovery_time.

Signed-off-by: qsxDree <kurling.town@gmail.com>

* drop dry_run and keep v1 container test

Signed-off-by: qsxDree <kurling.town@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>

* fix container scenario test assertions

Signed-off-by: qsxDree <kurling.town@gmail.com>

---------

Signed-off-by: qsxDree <kurling.town@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Darshan Jain <darjain@redhat.com>
2026-07-04 09:15:12 +05:30
Paige Patton 3a6bd7d18a adding vmi ready status (#1371)
Assisted By: Claude Code:

Signed-off-by: Paige Patton <prubenda@redhat.com>
v5.1.1
2026-07-02 14:22:07 -04:00
Darshan JainandCursor 3f266f1908 fix: bump krkn-lib to 6.1.2 to resolve kubernetes 36.x incompatibility (#1442)
krkn-lib 6.1.0 declared kubernetes>=34.1.0 (unbounded), allowing pip to
resolve to kubernetes 36.x which renamed call_api() parameter
response_type to response_types_map, breaking SA token creation, service
patching, and node metrics queries.

krkn-lib 6.1.2 pins kubernetes>=35.0.0,<36.0.0, preventing the
incompatible version from being installed.

Fixes #1441

Signed-off-by: ddjain <darjain@redhat.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-02 18:25:33 +05:30
harshjainnn bf59ed3c9c feat(tests): migrate pod error scenario tests to v2 framework (#1440)
* feat(tests): migrate pod error scenario tests to v2 framework

Signed-off-by: Harsh Jain <hjain4815@gmail.com>

* chore: drop unrelated file from PR

Signed-off-by: Harsh Jain <hjain4815@gmail.com>

* refactor: rename assert_no_hang_and_correct_logs to assert_failure_logs_contain

Signed-off-by: Harsh Jain <hjain4815@gmail.com>

* docs: reference pod_disruption_scenario_plugin.py:234 in test comment

Signed-off-by: Harsh Jain <hjain4815@gmail.com>

---------

Signed-off-by: Harsh Jain <hjain4815@gmail.com>
2026-07-01 17:40:35 +05:30
a81d084c93 fix: validate container_name in container scenario plugin (#1409) (#1410)
* fix: validate container_name in container scenario plugin

The container scenario plugin removed pods and incremented killed_count
even when the requested container_name was never found, causing scenarios
to silently report success with no disruption (issue #1409).

Track whether a container was actually found and killed; only increment
killed_count on a real kill, skip pods that lack the target container,
and raise a clear RuntimeError once all pods are exhausted without a kill.

Adds unit tests covering invalid, valid, empty, heterogeneous, and
count-exceeds-target scenarios.

Closes #1409

* fix: report actual kill count in container-not-found error

When the candidate pod list is exhausted without finding the target
container, the RuntimeError now reports how many containers were
actually killed ("N of M requested container(s) were killed") instead
of always claiming "No containers were killed", which was inaccurate in
partial-success cases.

* fix: only raise container-not-found error when nothing was killed

Address review feedback: the "not found in any matching pod" error was
raised even after one or more containers had already been killed (when
count exceeds the number of pods containing the target), making the
message contradictory.

Now that error only fires when killed_count == 0. When some kills
already happened but the candidate list is exhausted, the loop falls
through to the existing "Trying to kill more containers than were found"
error, which accurately describes that case.

---------

Co-authored-by: augmentcode[bot] <185243770+augmentcode[bot]@users.noreply.github.com>
Co-authored-by: Darshan Jain <darjain@redhat.com>
2026-07-01 00:52:01 +05:30
Paige Patton 55d8bf7062 no build isolation (#1430)
Assisted By: Claude Code:
Assisted By: Claude Code:

Signed-off-by: Paige Patton <prubenda@redhat.com>
2026-06-30 13:43:34 -04:00
cef0d4025d test: migrate test_namespace.sh to CI/tests_v2 namespace_deletion (#1406)
* test: migrate test_namespace.sh to CI/tests_v2 namespace_deletion

Migrate the legacy CI/tests/test_namespace.sh functional test to the pytest-based
v2 framework under CI/tests_v2/scenarios/namespace_deletion/.

Covers the service_disruption (namespace deletion) scenario with happy-path cases
(single-namespace object deletion, multi-namespace delete_count, multiple runs,
wait_time handling, label-selector targeting) and negative cases (no-match regex,
namespace/label mutual exclusion, delete_count exceeding available namespaces).

- Add scenario assets (resource.yaml with Deployment+Service, scenario_base.yaml)
- Register namespace_deletion marker in pytest.ini
- Add namespace_deletion execution-evidence marker in lib/utils.py

Closes #1405

* test: move namespace_deletion helpers into reusable lib modules

Address review feedback: extract the per-test helpers into shared lib
modules so other scenarios can reuse them.

- lib/namespace.py: add POD_SECURITY_PRIVILEGED_LABELS, create_labeled_namespace,
  delete_namespace_quietly, and a make_namespace factory fixture (auto-cleanup)
- lib/deploy.py: add deployment_exists, wait_for_no_deployment,
  wait_for_present_deployment_count, deploy_manifest_to_namespace
- conftest.py: re-export make_namespace fixture
- test_namespace_deletion.py: drop local helpers, use the lib functions/fixture

* test: honor --keep-ns-on-fail in make_namespace factory

The make_namespace finalizer always deleted ad-hoc namespaces, ignoring
--keep-ns-on-fail on failure unlike test_namespace. Extract the keep-on-fail
decision into a shared helper and use it in both fixtures so the documented
debugging workflow works for scenarios that create extra namespaces.

* test: surface FailToCreateError in deploy_manifest_to_namespace

Mirror deploy_workload's error handling so manifest-apply failures in
multi-namespace tests raise a formatted RuntimeError listing the underlying
API exceptions instead of an opaque FailToCreateError.

* test: clarify why label-selector test bypasses run_scenario

The inline comment claimed run_scenario was bypassed because **overrides
would collide with the positional namespace arg. The real reason is that
NAMESPACE_IS_REGEX=True wraps an empty namespace as '^$', whereas
label-selector mode needs a literal empty string.

* test: use actual scenario inputs in negative-test failure context

The no-match and mutual-exclusion tests reported context=namespace=self.ns
(the ephemeral namespace), not the inputs actually under test. Reference the
real namespace (and label_selector) so unexpected-success diagnostics are clear.

* test: use non-default wait_time so override patching is exercised

wait_time=30 matched the scenario_base.yaml default, so the test passed even
if override patching regressed. Use wait_time=5 (non-default) so the override
path is actually validated.

* test: guard cluster post-checks under KRKN_TEST_DRY_RUN

Three namespace_deletion tests asserted cluster side effects (workload
deletion) after the Kraken run. Under KRKN_TEST_DRY_RUN=1 Kraken is
skipped, so the seeded workload is never deleted and wait_for_no_deployment
/ wait_for_present_deployment_count would time out and fail. Guard those
post-checks, and in test_label_selector_targeting (which bypasses
run_scenario and calls run_kraken directly) honor dry-run explicitly by
skipping the invocation and post-check.

* test: tighten no-match assertion, clarify runs-loop test, dry-run-safe negatives

Addresses Deep Code Review feedback on the namespace_deletion suite:

- test_no_match_namespace_fails: drop the dead 'no namespaces matching' OR
  branch; the service_disruption plugin only ever logs 'not enough namespaces
  matching ...', so the assertion now checks that string directly.
- test_multiple_runs_repeat_deletion -> test_multiple_runs_repeat_disruption_loop:
  rename + docstring make explicit that it verifies the outer runs loop iterates
  twice, not that object deletion recurs (Krkn does not redeploy between runs, so
  run 2 re-selects an already-empty namespace). Object removal is asserted in
  test_single_namespace_object_deletion.
- Negative tests now return early under KRKN_TEST_DRY_RUN=1, since run_scenario
  returns a fake rc=0 and the failure path cannot be exercised; this makes the
  whole class consistent under make test-dry-run.

* test: use UUID-based namespace in no-match test to avoid accidental matches

* test: assert correct zero-match error in no-match namespace test

A regex matching zero namespaces makes krkn_lib's check_namespaces raise
'there exists no namespaces matching' before the plugin's delete loop, so
the 'not enough namespaces matching' branch is never reached for this case.
Assert the actual zero-match message instead.

* test: poll for async Service deletion in namespace_deletion test

Kubernetes deletions are asynchronous, so checking the Service immediately
after the scenario run could be flaky. Add wait_for_no_service (mirroring
wait_for_no_deployment) and poll until the Service is actually gone before
asserting.

* test: assert Service deletion in label-selector namespace_deletion test

test_label_selector_targeting deploys both a Deployment and a Service but
only asserted the Deployment was removed. Add wait_for_no_service so the
test fully validates that label-selector mode deletes all objects
(including Services), matching test_single_namespace_object_deletion.

Signed-off-by: augmentcode[bot] <185243770+augmentcode[bot]@users.noreply.github.com>

* test: snapshot namespaces in wait_for_present_deployment_count

list(namespaces) consumed the iterable before the poll loop re-iterated
over the original, so a one-shot iterable (e.g. generator) would be empty
on every poll. Snapshot to a list once and iterate over that snapshot.

Signed-off-by: augmentcode[bot] <185243770+augmentcode[bot]@users.noreply.github.com>

* ci: free up runner disk space before tests_v2 KinD run

The Tests v2 (pytest functional) job intermittently fails with
'System.IO.IOException: No space left on device' on ubuntu-latest runners,
which ship with only ~14GB free. Creating the KinD cluster plus pulling and
kind-loading nginx:alpine and krkn:tools exhausts the disk, failing even the
runner's own diagnostic logging.

Reclaim ~20-30GB by removing the bundled .NET/Android/GHC SDKs and pruning
docker images before the cluster is created.

Signed-off-by: augmentcode[bot] <185243770+augmentcode[bot]@users.noreply.github.com>

---------

Signed-off-by: augmentcode[bot] <185243770+augmentcode[bot]@users.noreply.github.com>
Co-authored-by: augmentcode[bot] <185243770+augmentcode[bot]@users.noreply.github.com>
Co-authored-by: Darshan Jain <darjain@redhat.com>
2026-06-25 18:39:18 +05:30
Darshan Jain 7c75414dfa add @ddjain to CODEOWNERS (#1421)
Signed-off-by: ddjain <darjain@redhat.com>
2026-06-25 08:32:28 -04:00
Shivansh Katiyar 5a76825c57 fix(hogs): correct IO disk space measurement formula (#1402)
The IO hog scenario reported negative disk space values because:
1. disk_space from get_node_resources_info() returns availableBytes
   (free space), not used space
2. The formula subtracted from node_resources_end (misleadingly named,
   actually measured 3s after pod deploy) instead of node_resources_start

When the IO hog writes data, available space decreases. The original
formula (avg - end) produced negative values. The correct formula is
(start - avg) which measures how much available space was consumed.

Tested on AKS (2-node cluster) with io-write-bytes=512m:
- Before: -512.24 MB, -495.16 MB, -23.72 MB (5/5 negative)
- After:  +512.38 MB, +512.23 MB, +500.48 MB (3/3 correct)

Signed-off-by: Shiva <shiva@users.noreply.github.com>
Signed-off-by: SK8-infi <shivansh.katiyar1712@gmail.com>
2026-06-25 17:42:52 +05:30
augmentcode[bot]andlnx01 03416ddbb6 test: migrate node_scenarios to tests_v2 pytest framework (#1400)
* test: add node_scenarios pytest migration under tests_v2

Migrate the node chaos coverage from the legacy CI/tests/test_node.sh into the v2 pytest framework at CI/tests_v2/scenarios/node_scenarios/.

- test_node_scenarios.py (TestNodeScenarios extends BaseScenarioTest): reboot and stop/start happy paths, node_name vs label_selector targeting, node recovery with finalizer, a control-plane safety guard, and negative cases (invalid selector, invalid node, missing actions, unsupported cloud type, unknown action).

- scenario_base.yaml: single node_scenarios entry (cloud_type docker, worker-only) patched per test.

- Register the node_scenarios marker in pytest.ini and document the scenario in CI/tests_v2/README.md.

Part of #1398. The coupled legacy move + workflow edit is left for a maintainer (the bot lacks GitHub App workflows permission); see PR description.

* test: address node_scenarios review feedback

- Reboot happy path now runs with kube_check: True so Krkn waits for the
  node to go Unknown then Ready, eliminating the race where wait_node_ready
  could pass against a stale Ready=True before the disruption propagated.
- Finalizer ensure_node_container_running now polls for Ready (bounded) when
  given k8s_core and logs non-zero 'start' exits, matching the docstring
  contract so a rerun never picks up an unrecovered node.
- Clarify the parallelism note: first/last worker separation only applies on
  multi-worker clusters (CI's 2-worker kind-config.yml); single-worker dev
  clusters share the node and rely on test ordering.

* fix: make node happy-path tests resilient to KinD multi-CP API LB

The reboot/stop_start happy paths failed in the Tests v2 job with
"Response ended prematurely": with kube_check enabled, Krkn's docker node
plugin polls the kube API (wait_for_unknown_status/wait_for_ready_status)
for ~40-50s after the disruption, and krkn-lib does not retry a transient
connection drop from the multi-control-plane KinD haproxy API load balancer.
The docker action itself succeeded in <0.5s.

Run both happy paths with kube_check: False so Krkn performs the action and
exits cleanly, and prove real disruption deterministically via the node
container's State.StartedAt advancing (runtime-level evidence, independent of
node-status timing). Recovery is still verified with the resilient test-side
wait_node_ready poll. README updated to match.

* refactor: move reusable node/container test helpers to lib/utils

Per review feedback, relocate the generic node-level helpers out of the
node_scenarios test module into the shared CI/tests_v2/lib/utils.py so future
node/container tests can reuse them: wait_node_ready, container_runtime,
container_started_at, assert_container_cycled, ensure_node_container_running,
and assert_kraken_marker. The test module now imports them; behavior is
unchanged and all 8 tests still collect.

* docs: fix duplicated word in tests_v2 README scenario list

* test: skip redundant container start in node finalizer to avoid noisy warnings

* test: honor KIND_EXPERIMENTAL_PROVIDER when selecting container runtime

* docs: align node finalizer wording with start-if-stopped behavior

* docs: align node test module docstring with start-if-stopped finalizer

* test: sort schedulable worker nodes for deterministic targeting

* test: assert combined node_stop_start_scenario marker in stop/start happy path

---------

Co-authored-by: augmentcode[bot] <185243770+augmentcode[bot]@users.noreply.github.com>
2026-06-15 14:51:15 +05:30
augmentcode[bot]andlnx01 8265c358d3 test: migrate memory_hog functional test to tests_v2 (closes #1396) (#1397)
* test: migrate memory_hog functional test to tests_v2 (closes #1396)

Add a pytest v2 functional test for the memory hog scenario (hog_scenarios),
mirroring the cpu_hog migration. Covers execution success, node-selector
targeting, duration/memory-size parameter handling, hog pod lifecycle and
cleanup, and graceful failure on invalid selector / invalid config.

- CI/tests_v2/scenarios/memory_hog/test_memory_hog.py: TestMemoryHog with
  functional + memory_hog markers and three no_workload tests.
- CI/tests_v2/scenarios/memory_hog/scenario_base.yaml: flat hog config tuned
  for functional testing (light fixed memory-vm-bytes, short duration).
- Register the memory_hog marker in pytest.ini and document the scenario in
  the tests_v2 README.

* test: extract shared hog-pod/node helpers into tests_v2 lib/utils

Lift the duplicated pod-prefix and schedulable-node helpers out of the cpu_hog and memory_hog test modules into CI/tests_v2/lib/utils.py as parameterized, reusable functions (list_pods_by_prefix, wait_for_scheduled_pod_by_prefix, wait_for_no_pods_by_prefix, schedulable_worker_nodes) and reuse them from both scenarios. Addresses review feedback on #1397.

---------

Co-authored-by: augmentcode[bot] <185243770+augmentcode[bot]@users.noreply.github.com>
2026-06-12 09:02:39 +05:30
augmentcode[bot]andlnx01 3a77f487da test: migrate cpu_hog functional test to tests_v2 (closes #1390) (#1391)
* test: migrate cpu_hog functional test to tests_v2 (closes #1390)

Migrate the legacy CI/tests/test_cpu_hog.sh to the v2 pytest framework
under CI/tests_v2/scenarios/cpu_hog/, preserving parity with the legacy
flow and adding stronger functional and negative coverage.

- Add scenario_base.yaml (flat hog_scenarios config, patched per test)
- Add test_cpu_hog.py with TestCpuHog(BaseScenarioTest):
  - success: hog pod created on node-selector target, run exits 0, pod cleaned up
  - negative: node-selector matching zero nodes fails gracefully
  - negative: missing mandatory hog-type fails at config parsing
- Register cpu_hog marker in pytest.ini
- Document cpu_hog coverage in README.md

* test: kill background Kraken proc on any cpu_hog success-test failure

Broaden the success-path teardown so a poll/assert failure before
proc.communicate() also kills the background Kraken process, preventing
a lingering cpu-hog- pod from stressing the node and racing --reruns.

Addresses Deep Code Review feedback on PR #1391.

---------

Signed-off-by: augmentcode[bot] <185243770+augmentcode[bot]@users.noreply.github.com>
Co-authored-by: augmentcode[bot] <185243770+augmentcode[bot]@users.noreply.github.com>
2026-06-11 21:37:52 +05:30
augmentcode[bot]andlnx01 5a532190aa test: attach krkn execution logs to HTML report and assert scenario executed (#1395)
* test: attach krkn execution logs to HTML report and assert scenario executed

CI/tests_v2 enhancements for observability and false-positive guarding:

- run_kraken fixture stashes stdout/stderr/returncode on request.node so the
  report hook can attach them.
- conftest pytest_runtest_makereport renders the krkn log as a timestamp/level/
  message table via pytest_html.extras for every test (pass or fail).
- conftest pytest_terminal_summary prints an execution-evidence table and writes
  a markdown summary to $GITHUB_STEP_SUMMARY when running in GitHub Actions.
- utils adds SCENARIO_EXECUTION_MARKERS, an EXECUTION_EVIDENCE registry, and
  assert_scenario_executed() that fails happy-path tests when krkn exits 0 but
  no scenario-specific marker is present. Skipped under KRKN_TEST_DRY_RUN=1.
- pod_disruption, storage_throttle, and application_outage happy-path tests now
  call assert_scenario_executed. Negative tests remain exempt.

Closes #1394

* test: stash krkn logs on timeout and add log-path hint to evidence assert

Address Deep Code Review feedback on PR #1395:
- run_kraken now catches subprocess.TimeoutExpired, stashes partial
  stdout/stderr with a synthetic rc=124 so timed-out runs still attach
  logs to the HTML report.
- assert_scenario_executed failure message now includes the
  'Full logs:' tmp_path hint, matching assert_kraken_success/failure.

---------

Co-authored-by: augmentcode[bot] <185243770+augmentcode[bot]@users.noreply.github.com>
2026-06-11 18:41:12 +05:30
Shivansh Katiyar f8c0766ebc Implement Power Outage Rollback Feature (#927)
Signed-off-by: SK8-infi <shivansh.katiyar1712@gmail.com>
2026-06-05 10:16:11 -04:00
Paige Patton a24f4440ec adding shell checks in pvc scenario (#1381)
Assisted By: Claude Code:

Signed-off-by: Paige Patton <prubenda@redhat.com>
2026-06-04 16:45:49 -04:00
Nitesh SinghandPaige Patton 53a81e8e90 feat: Add exec_with_shell_fallback method and fix failing unit tests (#1225)
- Add exec_with_shell_fallback method with retry logic and shell fallback
- Add unit tests for the new method with proper mocking
- All tests now pass as expected

Signed-off-by: NITESH SINGH <niteshkumar121411@gmail.com>
Co-authored-by: Paige Patton <64206430+paigerube14@users.noreply.github.com>
2026-06-04 16:38:15 -04:00
Naga Ravi Chaitanya Elluri 3b52fc4d5a Update Kraken references to Krkn (#1379)
Signed-off-by: Naga Ravi Chaitanya Elluri <nelluri@redhat.com>
2026-06-04 08:37:55 -04:00
Netram FaranandPaige Patton a8a70fc6a0 fix(node-actions): stop_start_kubelet_scenario calls restart_kubelet_scenario instead of node_reboot_scenario (#1368)
Fixes #1367

Signed-off-by: netram75 <netram.24bcs10329@sst.scaler.com>
Co-authored-by: Paige Patton <64206430+paigerube14@users.noreply.github.com>
2026-06-01 10:16:39 -04:00
Netram Faran e63a0b0f5b fix(health-check): derive final record status from status_code instead of hardcoding True (#1370)
Fixes #1369

Signed-off-by: netram75 <netram.24bcs10329@sst.scaler.com>
2026-06-01 09:14:10 -04:00
Paige PattonandClaude Sonnet 4.6 496e866d8b fix: add top-level read-all permissions to release workflow (#1366)
Scorecard Token-Permissions check (alert #4) flags release.yml for
missing top-level permissions, which means GITHUB_TOKEN defaults to
broad write access across all jobs. Adding permissions: read-all at
the top level enforces least privilege by default; the release job
already declares contents: write at job level for the permissions it
actually needs.

Signed-off-by: Paige Patton <prubenda@redhat.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-29 11:34:54 -04:00
Aastha-spec-tech c5f8fb9d36 fix(license): fix check_license.py symlink traversal crash on Windows (#1360)
Signed-off-by: Aastha-spec-tech <explorethings12345@gmail.com>
2026-05-29 11:15:37 -04:00
Paige PattonandClaude Sonnet 4.6 4328c24d28 feat: add label_selector support to kubevirt vm outage and virt health check (#1341)
Allows selecting VMIs by label selector as an alternative to vm_name regex,
making vm_name optional when label_selector is provided.

Signed-off-by: Paige Patton <prubenda@redhat.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 17:02:10 -04:00
Paige PattonandClaude Sonnet 4.6 9989fe9b21 fix: pass fine-grained PAT to Scorecard for branch protection check (#1365)
GITHUB_TOKEN cannot read classic branch protection rules regardless of
workflow permissions. Pass a fine-grained PAT (SCORECARD_TOKEN secret)
with Administration:read so the Branch-Protection check can run without
the 'internal error: some github tokens can't read classic branch
protection rules' error.

Ref: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md

Signed-off-by: Paige Patton <prubenda@redhat.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 15:56:14 -04:00
Aastha-spec-techandPaige Patton 3eda9f9afa fix(node_actions): replace unstructured print_exc with logging in baremetal reboot (#1335)
Signed-off-by: Aastha-spec-tech <explorethings12345@gmail.com>
Co-authored-by: Paige Patton <64206430+paigerube14@users.noreply.github.com>
2026-05-28 15:41:56 -04:00
Aastha-spec-tech 354de0ff53 fix(deps): pin kubernetes client to <36.0.0 to resolve call_api crash (#1363)
Signed-off-by: Aastha-spec-tech <explorethings12345@gmail.com>
2026-05-28 14:26:09 -04:00
Parth AgrawalandPaige Patton c0cf47dfed fix: replace bare except with Exception handler in Kubernetes client init (#1265)
The bare except clause in the Kubernetes client initialization block
caused a NameError crash when initialization failed. If KrknKubernetes()
raised an exception before kubecli was assigned, the except handler
attempted to call kubecli.initialize_clients(None) on an undefined
variable, masking the original error entirely.

Replaced the bare except with except Exception as e to:
- Log the actual initialization error for visibility
- Initialize both kubecli and ocpcli with None kubeconfig as fallback
  so subsequent code referencing these variables does not crash
- Avoid catching SystemExit and KeyboardInterrupt unintentionally

Fixes #1264

Signed-off-by: Parth Agrawal <parth.agrawal4002@gmail.com>
Co-authored-by: Paige Patton <64206430+paigerube14@users.noreply.github.com>
2026-05-28 14:08:21 -04:00
ky505andPaige Patton e7ea0ee4c5 added stale workflow from actions repo (#1355)
* added stale workflow from actions repo

Signed-off-by: antedotee <soniyadav2051982@gmail.com>

* added comment

Signed-off-by: antedotee <soniyadav2051982@gmail.com>

---------

Signed-off-by: antedotee <soniyadav2051982@gmail.com>
Co-authored-by: Paige Patton <64206430+paigerube14@users.noreply.github.com>
2026-05-28 14:06:23 -04:00
Aastha-spec-tech d6d7edd936 fix(license): add missing copyright and license headers to health checks and storage throttle (#1362)
Signed-off-by: Aastha-spec-tech <explorethings12345@gmail.com>
2026-05-28 08:56:45 -04:00
Netram FaranandPaige Patton 92272f9143 fix(health-check): derive status from previous_status_code instead of hardcoding False (#1354)
* fix(health-check): derive status from previous_status_code instead of hardcoding False

Signed-off-by: netram75 <netram.24bcs10329@sst.scaler.com>

* test(health-check): assert status field on change record in recovery test

Signed-off-by: netram75 <netram.24bcs10329@sst.scaler.com>

---------

Signed-off-by: netram75 <netram.24bcs10329@sst.scaler.com>
Co-authored-by: Paige Patton <64206430+paigerube14@users.noreply.github.com>
2026-05-27 12:55:28 -04:00
Paige Patton 654d701d7d refactor: move needs-rebase to reusable workflow in krkn-chaos/actions (#1330)
Signed-off-by: Paige Patton <prubenda@redhat.com>
2026-05-27 12:15:27 -04:00
Paige Patton 387a1d7c18 adding how to add to roadmap (#1344)
Assisted By: Claude Code:

Assisted By: Claude Code:

Signed-off-by: Paige Patton <prubenda@redhat.com>
2026-05-27 11:58:31 -04:00
ky505 0f5b6238b7 added PR size labeler (#1320)
Signed-off-by: antedotee <soniyadav2051982@gmail.com>
2026-05-21 12:27:13 -04:00
7c94a307d0 fixes krkn source dependencies cves and introduces grype scan in GH Action (#1336)
* adding member request information

Signed-off-by: Paige Patton <prubenda@redhat.com>
Assisted By: Claude Code:

fixes krkn source dependencies cves

Signed-off-by: Tullio Sebastiani <tsebasti@redhat.com>
introduced grype scan on github images

Signed-off-by: Tullio Sebastiani <tsebasti@redhat.com>

golang downgrade

Signed-off-by: Tullio Sebastiani <tsebasti@redhat.com>

golang dependency pinning

Signed-off-by: Tullio Sebastiani <tsebasti@redhat.com>

golang dependency pinning

Signed-off-by: Tullio Sebastiani <tsebasti@redhat.com>

setuptools downgrade

Signed-off-by: Tullio Sebastiani <tsebasti@redhat.com>

go-ntlmssp downgrade

Signed-off-by: Tullio Sebastiani <tsebasti@redhat.com>

security scan in summary

Signed-off-by: Tullio Sebastiani <tsebasti@redhat.com>

setuptools downgrade

Signed-off-by: Tullio Sebastiani <tsebasti@redhat.com>

upgrade to fedora 45

Signed-off-by: Tullio Sebastiani <tsebasti@redhat.com>

golang dependencies

Signed-off-by: Tullio Sebastiani <tsebasti@redhat.com>

removed pinned dependencies

Signed-off-by: Tullio Sebastiani <tsebasti@redhat.com>

pinned dependency for oc latest

Signed-off-by: Tullio Sebastiani <tsebasti@redhat.com>

golang stdlib stable version

Signed-off-by: Tullio Sebastiani <tsebasti@redhat.com>

upgrading oc release

Signed-off-by: Tullio Sebastiani <tsebasti@redhat.com>

upgrading yq

Signed-off-by: Tullio Sebastiani <tsebasti@redhat.com>

yq build in pipeline

Signed-off-by: Tullio Sebastiani <tsebasti@redhat.com>

pinned transitive dependencies

Signed-off-by: Tullio Sebastiani <tsebasti@redhat.com>

removed not working

Signed-off-by: Tullio Sebastiani <tsebasti@redhat.com>

buildkit unpinned

Signed-off-by: Tullio Sebastiani <tsebasti@redhat.com>

other pinned dependencies

Signed-off-by: Tullio Sebastiani <tsebasti@redhat.com>

other pinned

Signed-off-by: Tullio Sebastiani <tsebasti@redhat.com>

other pinned

Signed-off-by: Tullio Sebastiani <tsebasti@redhat.com>

go work vendor

Signed-off-by: Tullio Sebastiani <tsebasti@redhat.com>

other pinned

Signed-off-by: Tullio Sebastiani <tsebasti@redhat.com>

pin buildkit and distribution

Signed-off-by: Tullio Sebastiani <tsebasti@redhat.com>

reinstated distribution

Signed-off-by: Tullio Sebastiani <tsebasti@redhat.com>

nit

Signed-off-by: Tullio Sebastiani <tsebasti@redhat.com>

SECURITY.md

Signed-off-by: Tullio Sebastiani <tsebasti@redhat.com>

feat: add Grype security scanning badge and comprehensive security policy

- Add security badge job to docker-image workflow
  - Generates detailed badge showing C:X H:Y M:Z vulnerability counts
  - Runs on every push to main branch
  - Publishes badge to krkn-lib-docs repository
  - Uses Grype to scan container image for CVEs
  - Dynamic color based on severity (green/yellow/orange/red)

- Add security badge to README.md
  - Displays current vulnerability baseline
  - Placed after coverage badge for visibility

- Enhance SECURITY.md with CNCF-ready security policy
  - Document proactive security approach with Grype CI/CD integration
  - Define security baseline: 0 Critical, 7 High, 3 Medium, 0 Low (12 total)
  - Detail accepted risks with mitigation strategies
  - Document all 12 known CVEs in transitive dependencies
  - Explain why each CVE cannot be fixed (dependency constraints)
  - Establish quarterly review process for accepted risks
  - Add SLA commitments for vulnerability remediation

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

fix: remove moby/buildkit v0.28.1 pin that breaks oc build

The moby/buildkit v0.28.1 upgrade has breaking API changes (undefined: archive.Compression)
that are incompatible with docker/docker v28.5.2 vendored in oc.

This CVE is documented as accepted risk in SECURITY.md.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

DCO

krkn-lib update

krkn-lib update

* increased krkn-lib version

Signed-off-by: Tullio Sebastiani <tsebasti@redhat.com>

---------

Signed-off-by: Tullio Sebastiani <tsebasti@redhat.com>
Co-authored-by: Paige Patton <prubenda@redhat.com>
2026-05-20 14:21:51 -04:00
Paige Patton 66651e97ca adding member request information
Signed-off-by: Paige Patton <prubenda@redhat.com>
Assisted By: Claude Code:
2026-05-19 16:06:04 -04:00
eb2efa84ea feat: storage I/O throttle scenario (cgroups v1/v2) for PVC-backed workloads (#1296)
* feat(storage-throttle): add storage throttle scenario and tests

Consolidate the storage-throttle implementation, scenario configs, CI v2 coverage, and krkn-lib 6.0.10 dependency update into a single signed commit for cleaner PR history.

Signed-off-by: ddjain <darjain@redhat.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Signed-off-by: ddjain <darjain@redhat.com>

* adding need dco auto review (#1329)

Signed-off-by: Paige Patton <prubenda@redhat.com>
Signed-off-by: ddjain <darjain@redhat.com>

* fix: start_klusterlet_scenario action calls start instead of stop (#1324)

The start_klusterlet_scenario branch in inject_managedcluster_scenario
was calling stop_klusterlet_scenario on the scenarios object instead of
start_klusterlet_scenario. Any user configuring this action would stop
the klusterlet (scale to 0) instead of starting it (scale to 3).

Fixes #1323

Signed-off-by: v0idheaven <dahiyavarun2007@gmail.com>
Co-authored-by: Paige Patton <64206430+paigerube14@users.noreply.github.com>
Signed-off-by: ddjain <darjain@redhat.com>

* adding links to issue of completed roadmap items (#1328)

Signed-off-by: Paige Patton <prubenda@redhat.com>
Signed-off-by: ddjain <darjain@redhat.com>

* container scenario template image update (#1342)

Signed-off-by: Paige Patton <prubenda@redhat.com>
Signed-off-by: ddjain <darjain@redhat.com>

---------

Signed-off-by: ddjain <darjain@redhat.com>
Signed-off-by: Paige Patton <prubenda@redhat.com>
Signed-off-by: v0idheaven <dahiyavarun2007@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Paige Patton <64206430+paigerube14@users.noreply.github.com>
Co-authored-by: Varun Yadav <dahiyavarun2007@gmail.com>
v5.1.0
2026-05-19 00:24:55 +05:30
Paige Patton 3391ff2453 container scenario template image update (#1342)
Signed-off-by: Paige Patton <prubenda@redhat.com>
2026-05-18 12:10:04 -04:00
Paige Patton a10dabbf21 adding links to issue of completed roadmap items (#1328)
Signed-off-by: Paige Patton <prubenda@redhat.com>
2026-05-18 11:37:47 -04:00
Varun YadavandPaige Patton 8984b50409 fix: start_klusterlet_scenario action calls start instead of stop (#1324)
The start_klusterlet_scenario branch in inject_managedcluster_scenario
was calling stop_klusterlet_scenario on the scenarios object instead of
start_klusterlet_scenario. Any user configuring this action would stop
the klusterlet (scale to 0) instead of starting it (scale to 3).

Fixes #1323

Signed-off-by: v0idheaven <dahiyavarun2007@gmail.com>
Co-authored-by: Paige Patton <64206430+paigerube14@users.noreply.github.com>
2026-05-18 09:45:50 -04:00
Paige Patton 0c4ac9f578 adding need dco auto review (#1329)
Signed-off-by: Paige Patton <prubenda@redhat.com>
2026-05-15 14:09:43 -04:00
ky505 2b02306a4d Update cron schedule for scorecard analysis (#1322)
Signed-off-by: antedotee <soniyadav2051982@gmail.com>
v5.0.5
2026-05-14 15:31:57 -04:00
Paige Patton 0e8af957f3 addinig vmi network outages (#1234)
Assisted By: Claude Code:
Assisted By: Claude Code:

Signed-off-by: Paige Patton <prubenda@redhat.com>
v5.0.4
2026-05-14 14:34:19 -04:00
Paige Patton 7ec263f84c health check plugin (#1176)
Signed-off-by: Paige Patton <prubenda@redhat.com>
2026-05-14 14:32:07 -04:00
Paige Patton 7d4aba9df6 adding kubectl cli (#1321)
Assisted By: Claude Code:

Assisted By: Claude Code:

Signed-off-by: Paige Patton <prubenda@redhat.com>
2026-05-14 13:55:08 -04:00
Varun YadavandPaige Patton a0825ffd1e fix: use .get() for optional health check config keys to prevent KeyError (#1310)
* fix: use .get() for optional health check config keys to prevent KeyError

bearer_token, auth, exit_on_failure and verify_url were accessed with
bare [] indexing. If a user omits any of these optional keys, the health
check thread crashes with a KeyError that disappears silently — the
telemetry queue never gets populated and health checks stop working
with no log output.

Replaced all four with .get() calls with safe defaults.

Fixes #1309

Signed-off-by: v0idheaven <dahiyavarun2007@gmail.com>

* fix: address review feedback on HealthChecker config key handling

- Add docstring to run_health_check for API clarity
- Replace conditional url assignment with direct .get() + continue
  so a missing url skips the entry cleanly instead of falling through
  to make_request with a potentially stale url from a previous iteration

Signed-off-by: v0idheaven <dahiyavarun2007@gmail.com>

---------

Signed-off-by: v0idheaven <dahiyavarun2007@gmail.com>
Co-authored-by: Paige Patton <64206430+paigerube14@users.noreply.github.com>
2026-05-14 11:39:40 -04:00
Arpit RajandPaige Patton d70c56aa30 fix: add connection pooling for HTTP health checks in cerberus and HealthChecker (#1236)
Signed-off-by: 1PoPTRoN <vrxn.arp1traj@gmail.com>
Co-authored-by: Paige Patton <64206430+paigerube14@users.noreply.github.com>
2026-05-14 11:22:54 -04:00
Aastha-spec-techandPaige Patton 2628665584 feat: support environment variable fallback for baremetal BMC credentials (#1289)
Signed-off-by: Aastha-spec-tech <explorethings12345@gmail.com>
Co-authored-by: Paige Patton <64206430+paigerube14@users.noreply.github.com>
2026-05-14 09:52:42 -04:00