Skip to content

Rework condition handling during settings application and BMC reset#861

Open
atd9876 wants to merge 6 commits intomainfrom
857-bug-conditionbmcresetpostsettingapply-never-set-for-hpe-causes-infinite-re-apply-loop
Open

Rework condition handling during settings application and BMC reset#861
atd9876 wants to merge 6 commits intomainfrom
857-bug-conditionbmcresetpostsettingapply-never-set-for-hpe-causes-infinite-re-apply-loop

Conversation

@atd9876
Copy link
Copy Markdown
Contributor

@atd9876 atd9876 commented May 6, 2026

Proposed Changes

  • Change condition handling to prevent apply loop

Fixes #857

Summary by CodeRabbit

  • Bug Fixes

    • Improved drift detection: when settings diverge, prior apply state is cleared so reconciliation reliably retries.
    • Reset handling corrected: post-apply reset needs are recorded and unnecessary reset attempts are avoided.
  • Improvements

    • Phased apply-and-verify flow with clearer verification-pending transitions.
    • Status updates now include generation info when applicable.
    • Added a distinct reset-required reason for clearer reset state.

Signed-off-by: Andrew Dodds <andrew.dodds@sap.com>
@atd9876 atd9876 force-pushed the 857-bug-conditionbmcresetpostsettingapply-never-set-for-hpe-causes-infinite-re-apply-loop branch from bca6a23 to a3de350 Compare May 6, 2026 13:52
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 6, 2026

Review Change Stack

Warning

Rate limit exceeded

@atd9876 has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 45 minutes and 1 second before requesting another review.

To continue reviewing without waiting, purchase usage credits in the billing tab.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: e3dc66fc-13c4-4a20-8bab-e73db4de79f6

📥 Commits

Reviewing files that changed from the base of the PR and between 0f61190 and 7dde09c.

📒 Files selected for processing (2)
  • internal/controller/bmcsettings_controller.go
  • internal/controller/conditions.go
📝 Walkthrough

Walkthrough

Refactors BMCSettings controller to a phased apply→(optional reset)→verify sequence gated by Conditions; adds exported ReasonResetRequired; treats non-empty diffs as drift by clearing status to reapply; short‑circuits reset handling when not applicable; and patches ObservedGeneration into condition updates only when positive.

Changes

BMCSettings Apply-Verify-Reset Flow Refactor

Layer / File(s) Summary
Phase 1: Apply Gate & Flow
internal/controller/bmcsettings_controller.go
Rewrites updateSettingsAndVerify to gate applies on ConditionBMCSettingsChangesIssued/ObservedGeneration, issues settings, sets ChangesIssued, and early-returns to continue later phases.
Persist apply-cycle conditions
internal/controller/bmcsettings_controller.go
New helper persistApplyCycleConditions sets ChangesVerified to pending and writes ConditionBMCResetPostSettingApply with ReasonResetRequired or ReasonNoResetRequired in a single status patch.
Drift Detection & Reapply
internal/controller/bmcsettings_controller.go
handleSettingAppliedState treats non-empty diffs as drift, logs it, and clears BMCSettings status/conditions to force re-apply.
Reset Short-Circuit
internal/controller/bmcsettings_controller.go
handleBMCReset returns immediately when post-apply reset condition is already True with ReasonNoResetRequired.
Verification & Status Patch
internal/controller/bmcsettings_controller.go
Phase after reset recomputes settings diff; sets ChangesVerified=True when diff empty, else marks verification pending and requeues. updateBMCSettingsStatus includes ObservedGeneration only when condition.ObservedGeneration > 0.
Condition Constants
internal/controller/conditions.go
Adds exported ReasonResetRequired = "ResetRequired".

Sequence Diagram

sequenceDiagram
    participant Ctrl as BMCSettings Controller
    participant Cond as Conditions (status)
    participant BMC as BMC Device
    participant Verify as Verification/Recompute

    Ctrl->>Cond: Read ConditionBMCSettingsChangesIssued / ObservedGeneration
    alt ChangesIssued outdated or not issued
        Ctrl->>BMC: Issue/apply settings
        BMC-->>Ctrl: Apply result
        Ctrl->>Ctrl: persist apply-cycle conditions (ChangesVerified=pending, ResetPostSettingApply)
        alt ResetIssued
            Ctrl->>BMC: handleBMCReset()
            BMC-->>Ctrl: Reset complete
        else ResetRequired
            Ctrl->>Cond: Set ResetPostSettingApply = ReasonResetRequired
        end
    end
    Ctrl->>Verify: Recompute effective settings / compute diff
    alt Diff empty
        Verify-->>Ctrl: Verified
        Ctrl->>Cond: Set ChangesVerified = True
    else Diff non-empty
        Ctrl->>Cond: Set ChangesVerified = Pending (ReasonBMCSettingsVerificationPending)
        Ctrl-->>Ctrl: Requeue
    end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related issues

  • #857: Bug where ConditionBMCResetPostSettingApply is not set for some vendors (HPE/Lenovo), causing infinite re-apply loops; related to recording post-apply reset/no-reset state.

Possibly related PRs

Suggested labels

bug

Suggested reviewers

  • xkonni
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Description check ❓ Inconclusive The description is minimal and vague; it states only 'Change condition handling to prevent apply loop' without detailing the implementation approach or which of the proposed options (A, B, or C) is being used. Expand the description to clarify which remediation strategy (Option A: set ReasonNoResetNeeded; Option B: use ConditionBMCSettingsChangesIssued gate; or Option C: skip to verification) is implemented and why it was chosen.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately summarizes the main change: refactoring condition handling during BMC settings application and reset.
Linked Issues check ✅ Passed The code changes fully address the linked issue #857 by implementing Option B: using ConditionBMCSettingsChangesIssued as the apply-phase gate and setting ReasonNoResetRequired when reset is not needed, preventing the infinite re-apply loop for HPE/Lenovo BMCs.
Out of Scope Changes check ✅ Passed All changes are directly scoped to fixing issue #857: the refactored updateSettingsAndVerify() flow with phase gates, the new persistApplyCycleConditions helper, updates to handleSettingAppliedState and handleBMCReset, and the new ReasonResetRequired constant are all necessary to prevent the re-apply loop.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

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

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch 857-bug-conditionbmcresetpostsettingapply-never-set-for-hpe-causes-infinite-re-apply-loop

Tip

💬 Introducing Slack Agent: The best way for teams to turn conversations into code.

Slack Agent is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.

  • Generate code and open pull requests
  • Plan features and break down work
  • Investigate incidents and troubleshoot customer tickets together
  • Automate recurring tasks and respond to alerts with triggers
  • Summarize progress and report instantly

Built for teams:

  • Shared memory across your entire org—no repeating context
  • Per-thread sandboxes to safely plan and execute work
  • Governance built-in—scoped access, auditability, and budget controls

One agent for your entire SDLC. Right inside Slack.

👉 Get started


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

❤️ Share

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

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
internal/controller/bmcsettings_controller.go (1)

427-554: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Make the ChangesIssued gate generation-aware.

Once this condition has ReasonBMCSettingsChangesIssued, Phase 1 is skipped on every later reconcile. If the BMCSettings spec changes while the object is still InProgress, the controller keeps requeueing in verification against the new diff but never re-issues the updated settings. Compare the gate against settings.Generation/Status.ObservedGeneration, or clear it whenever the desired settings change.

As per coding guidelines, "Implement idempotent reconciliation logic - safe to run the same reconciliation multiple times without side effects."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/controller/bmcsettings_controller.go` around lines 427 - 554, The
ChangesIssued gate currently only checks changesIssued.Reason and skips Phase 1
forever once ReasonBMCSettingsChangesIssued is set; update the gating in the
reconcile block that reads ConditionBMCSettingsChangesIssued (around the
GetCondition call and the if changesIssued.Reason !=
ReasonBMCSettingsChangesIssued branch) to be generation-aware: compare
settings.Generation to settings.Status.ObservedGeneration (or clear/reset the
ConditionBMCSettingsChangesIssued condition) and only treat changes as issued if
the observed generation matches the current spec generation; if the spec has
changed (generation differs) reset the condition (or set its Status/Reason to
indicate pending re-issue) so handleBMCPowerState + SetBMCAttributesImmediately
will run again for the new diff, and persist that update via
r.updateBMCSettingsStatus/ r.Conditions.Update so the controller re-enters Phase
1 for new spec generations.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@internal/controller/bmcsettings_controller.go`:
- Around line 569-583: When drift is detected you must also reset later-phase
conditions so a subsequent reconcile can re-run verification; in the
drift-handling block (where you call GetCondition for
ConditionBMCSettingsChangesIssued and update it) also GetCondition for
ConditionBMCSettingsChangesVerified (using the same helpers) and call
r.Conditions.Update to set its status to False (or Unknown), set a DriftDetected
reason and a message like "Settings drift detected, re-verify needed", then
include that updated condition in the call to r.updateBMCSettingsStatus so the
status no longer shows Verified=True while re-apply is required.

---

Outside diff comments:
In `@internal/controller/bmcsettings_controller.go`:
- Around line 427-554: The ChangesIssued gate currently only checks
changesIssued.Reason and skips Phase 1 forever once
ReasonBMCSettingsChangesIssued is set; update the gating in the reconcile block
that reads ConditionBMCSettingsChangesIssued (around the GetCondition call and
the if changesIssued.Reason != ReasonBMCSettingsChangesIssued branch) to be
generation-aware: compare settings.Generation to
settings.Status.ObservedGeneration (or clear/reset the
ConditionBMCSettingsChangesIssued condition) and only treat changes as issued if
the observed generation matches the current spec generation; if the spec has
changed (generation differs) reset the condition (or set its Status/Reason to
indicate pending re-issue) so handleBMCPowerState + SetBMCAttributesImmediately
will run again for the new diff, and persist that update via
r.updateBMCSettingsStatus/ r.Conditions.Update so the controller re-enters Phase
1 for new spec generations.
🪄 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: a4f46937-feb3-4cf2-aac5-08368f0c46f6

📥 Commits

Reviewing files that changed from the base of the PR and between 715247e and bca6a23.

📒 Files selected for processing (2)
  • internal/controller/bmcsettings_controller.go
  • internal/controller/conditions.go

Comment thread internal/controller/bmcsettings_controller.go Outdated
Co-authored-by: Copilot <copilot@github.com>
Signed-off-by: Andrew Dodds <andrew.dodds@sap.com>
@github-actions github-actions Bot added size/L and removed size/M labels May 6, 2026
@atd9876
Copy link
Copy Markdown
Contributor Author

atd9876 commented May 6, 2026

@coderabbitai review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 6, 2026

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@afritzler afritzler added the enhancement New feature or request label May 7, 2026
Comment thread internal/controller/bmcsettings_controller.go Outdated
Comment thread internal/controller/bmcsettings_controller.go Outdated
Co-authored-by: Copilot <copilot@github.com>
Signed-off-by: Andrew Dodds <andrew.dodds@sap.com>
@github-actions github-actions Bot added size/M and removed size/L labels May 7, 2026
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
internal/controller/bmcsettings_controller.go (1)

433-505: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Reset later-phase conditions when a new apply cycle starts.

This branch re-issues settings for a newer generation, but it only updates ConditionBMCSettingsChangesIssued. If the previous generation left ConditionBMCResetPostSettingApply at ReasonResetIssued, the next reconcile for a generation where resetBMCReq == false will still enter handleBMCReset() and wait on or act on that stale reset state. ConditionBMCSettingsChangesVerified=True can also leak across generations and report verification success before the new generation is actually verified.

Please overwrite/reset the phase-2 and phase-3 conditions whenever Phase 1 starts a fresh apply, including explicitly recording the “no reset required” case for ConditionBMCResetPostSettingApply.

As per coding guidelines, internal/controller/**/*_controller.go must "Implement idempotent reconciliation logic - safe to run the same reconciliation multiple times without side effects".

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/controller/bmcsettings_controller.go` around lines 433 - 505, When
re-applying settings (the branch where changesIssued is stale and you call
handleBMCPowerState and then issue settings), reset/overwrite phase-2 and
phase-3 conditions so stale state doesn’t leak across generations: explicitly
update ConditionBMCResetPostSettingApply and ConditionBMCSettingsChangesVerified
to the appropriate defaults (e.g., ResetPostSettingApply = False with
ReasonResetNotRequired when resetBMCReq is false, and SettingsChangesVerified =
False) before calling r.updateBMCSettingsStatus; use the same
r.Conditions.Update flow (as used for changesIssued) and ensure the updates
reference changesIssued/resetCond and persist via r.updateBMCSettingsStatus so
each new apply cycle is idempotent.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@internal/controller/bmcsettings_controller.go`:
- Around line 433-505: When re-applying settings (the branch where changesIssued
is stale and you call handleBMCPowerState and then issue settings),
reset/overwrite phase-2 and phase-3 conditions so stale state doesn’t leak
across generations: explicitly update ConditionBMCResetPostSettingApply and
ConditionBMCSettingsChangesVerified to the appropriate defaults (e.g.,
ResetPostSettingApply = False with ReasonResetNotRequired when resetBMCReq is
false, and SettingsChangesVerified = False) before calling
r.updateBMCSettingsStatus; use the same r.Conditions.Update flow (as used for
changesIssued) and ensure the updates reference changesIssued/resetCond and
persist via r.updateBMCSettingsStatus so each new apply cycle is idempotent.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: ac7057c9-4c6e-484a-a696-cbf2abedc3b2

📥 Commits

Reviewing files that changed from the base of the PR and between bca6a23 and 4b4a950.

📒 Files selected for processing (2)
  • internal/controller/bmcsettings_controller.go
  • internal/controller/conditions.go
✅ Files skipped from review due to trivial changes (1)
  • internal/controller/conditions.go

Co-authored-by: Copilot <copilot@github.com>
Signed-off-by: Andrew Dodds <andrew.dodds@sap.com>
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (1)
internal/controller/bmcsettings_controller.go (1)

655-658: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Do not short-circuit the fresh ConditionResetIssued path here.

This guard now treats an unset ConditionResetIssued as "nothing to do", so the stabilization reset at Line 418 never runs on a fresh reconcile. That regresses the generic pre-apply reset flow; this no-op branch should only apply to ConditionBMCResetPostSettingApply or an explicit "no reset needed" state.

Suggested minimal fix
-	// No reset requested — nothing to do
-	if resetBMC.Reason != ReasonResetRequired && resetBMC.Reason != ReasonResetIssued {
+	// Only the post-apply reset condition may legitimately mean "no reset needed".
+	if conditionType == ConditionBMCResetPostSettingApply &&
+		resetBMC.Reason != ReasonResetRequired && resetBMC.Reason != ReasonResetIssued {
 		return true, nil
 	}

As per coding guidelines, internal/controller/**/*_controller.go: "Implement idempotent reconciliation logic - safe to run the same reconciliation multiple times without side effects".

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/controller/bmcsettings_controller.go` around lines 655 - 658, The
current guard in the "No reset requested — nothing to do" branch incorrectly
treats an unset ConditionResetIssued as a no-op; update the logic so we only
short-circuit when there is an explicit "no reset needed" state (e.g. a Reason
value that denotes no-reset) or when the BMC is already in the
post-setting-apply state (ConditionBMCResetPostSettingApply), and allow the
fresh ConditionResetIssued path to proceed to stabilization/reset handling;
locate the branch checking resetBMC.Reason (the two-way check against
ReasonResetRequired and ReasonResetIssued) and change it to return early only
for the explicit no-reset reason or for ConditionBMCResetPostSettingApply,
otherwise continue so the stabilization reset run (the path that relies on
ConditionResetIssued) executes.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@internal/controller/bmcsettings_controller.go`:
- Around line 494-527: The verifiedCond (ChangesVerified) update is never
persisted because updateBMCSettingsStatus is only called for changesIssued and
resetCond; call updateBMCSettingsStatus to persist verifiedCond (the condition
object you set earlier) before persisting changesIssued/resetCond so
ChangesVerified=True/False is written out before leaving Phase 1; update the
sequence around verifiedCond, changesIssued and resetCond to ensure
updateBMCSettingsStatus(ctx, settings, settings.Status.State, verifiedCond) is
invoked (or otherwise include verifiedCond in the single persistence call) so
the verified condition cannot leak into the next apply cycle.

---

Duplicate comments:
In `@internal/controller/bmcsettings_controller.go`:
- Around line 655-658: The current guard in the "No reset requested — nothing to
do" branch incorrectly treats an unset ConditionResetIssued as a no-op; update
the logic so we only short-circuit when there is an explicit "no reset needed"
state (e.g. a Reason value that denotes no-reset) or when the BMC is already in
the post-setting-apply state (ConditionBMCResetPostSettingApply), and allow the
fresh ConditionResetIssued path to proceed to stabilization/reset handling;
locate the branch checking resetBMC.Reason (the two-way check against
ReasonResetRequired and ReasonResetIssued) and change it to return early only
for the explicit no-reset reason or for ConditionBMCResetPostSettingApply,
otherwise continue so the stabilization reset run (the path that relies on
ConditionResetIssued) executes.
🪄 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: 0c4861d4-f8cd-4df2-be20-eb493e910617

📥 Commits

Reviewing files that changed from the base of the PR and between 4b4a950 and d18f339.

📒 Files selected for processing (1)
  • internal/controller/bmcsettings_controller.go

Comment thread internal/controller/bmcsettings_controller.go Outdated
Co-authored-by: Copilot <copilot@github.com>
Signed-off-by: Andrew Dodds <andrew.dodds@sap.com>
@github-actions github-actions Bot added size/L and removed size/M labels May 7, 2026
@atd9876
Copy link
Copy Markdown
Contributor Author

atd9876 commented May 7, 2026

@coderabbitai review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 7, 2026

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@internal/controller/bmcsettings_controller.go`:
- Around line 555-570: persistApplyCycleConditions() currently uses
ReasonResetIssued for the no-reset branch causing logic/guard mismatches; add a
new constant ReasonNoResetRequired and use it in the "no reset" update call
(replace ReasonResetIssued in the else block that updates resetCond and the
similar update around lines ~664-667), and ensure handleBMCReset()'s
fast-path/guard is keyed off ConditionBMCResetPostSettingApply (and/or checks
ReasonResetIssued only when the reset was actually issued) so that pre-apply
calls remain effective; update any references to the old misuse to the new
ReasonNoResetRequired to make the semantics explicit.
- Around line 575-581: Currently the code calls r.updateBMCSettingsStatus three
times in a row which can persist ChangesIssued before the other conditions are
updated; instead prepare the three condition updates in-memory (use the existing
changesIssued, verifiedCond, resetCond and update settings.Status.Conditions or
the condition slice) and then call r.updateBMCSettingsStatus once to persist the
combined condition slice for the settings object; keep using the same settings
and settings.Status.State values and the existing updateBMCSettingsStatus helper
so the single patch is atomic from the controller's perspective.
🪄 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: 22189ec9-f714-4c8f-b37b-dc61bc85e605

📥 Commits

Reviewing files that changed from the base of the PR and between d18f339 and 0f61190.

📒 Files selected for processing (1)
  • internal/controller/bmcsettings_controller.go

Comment thread internal/controller/bmcsettings_controller.go
Comment thread internal/controller/bmcsettings_controller.go Outdated
Co-authored-by: Copilot <copilot@github.com>
Signed-off-by: Andrew Dodds <andrew.dodds@sap.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

Bug: ConditionBMCResetPostSettingApply never set for HPE — causes infinite re-apply loop

4 participants