Skip to content

[controllert] RSC coltroller logic moved to new rsc_controller dir#523

Open
MrTomSawyer wants to merge 121 commits into
astef-prototypefrom
vvoyt-move-rsc-controller
Open

[controllert] RSC coltroller logic moved to new rsc_controller dir#523
MrTomSawyer wants to merge 121 commits into
astef-prototypefrom
vvoyt-move-rsc-controller

Conversation

@MrTomSawyer

@MrTomSawyer MrTomSawyer commented Jan 22, 2026

Copy link
Copy Markdown
Contributor

Description

Move ReplicatedStorageClass reconciliation (StorageClass management, validation, status phase/reason updates, and finalizer handling) from the legacy controller to the new rsc_controller.

Why do we need it, and what problem does it solve?

This makes rsc_controller the single source of truth for ReplicatedStorageClass behavior, reduces duplicated/competing reconciliation between two controllers, and improves maintainability by concentrating the business logic in the new controller implementation.

Checklist

  • The code is covered by unit tests.
  • e2e tests passed.
  • Documentation updated according to the changes.
  • Changes were tested in the Kubernetes cluster manually.

… class reconciliation

- Added a new controller for managing ReplicatedStorageClass (RSC) resources, including the reconciliation of associated StorageClasses.
- Introduced validation for RSC specifications to ensure correct configuration.
- Enhanced the flow API for better error handling and status updates during reconciliation.
- Added tests to cover new functionality and ensure stability.

Changes include:
- New constants and functions for managing storage class parameters.
- Updates to the reconciler logic to handle finalizers and status updates.
- Integration of virtualization module checks for storage class creation.

Signed-off-by: Slava V <vyacheslav.voytenok@flant.com>
Signed-off-by: Slava V <vyacheslav.voytenok@flant.com>
@MrTomSawyer MrTomSawyer self-assigned this Jan 22, 2026
- Added a new constants file for replicated storage class parameters, including finalizer names, provisioner details, and topology labels.
- Updated various controller files to reference the new constants, ensuring consistency across the codebase.

This change enhances maintainability and clarity by centralizing storage class configuration values.

Signed-off-by: Slava V <vyacheslav.voytenok@flant.com>
dmgtn and others added 25 commits January 24, 2026 11:44
[controller][api] RSC→RSP auto-generation, per-node reconciliation, cleanup 8 distributed controllers

Signed-off-by: David Magton <david.magton@gmail.com>
[api] Shorten verbose ReplicatedStorageClass enum constant names

Signed-off-by: David Magton <david.magton@gmail.com>
Add ReplicatedVolumeDatamesh and ReplicatedVolumeDatameshMember types
to centrally manage DRBD mesh connectivity configuration per volume:

- DatameshRevision: counter to track configuration changes
- Datamesh.SystemNetworkNames: network names for DRBD communication
- Datamesh.Members: list of datamesh members with node, type, zone,
  addresses and optional type transitions (ToDiskful/ToDiskless)
- Datamesh.Size: desired volume size
- Quorum settings: Quorum and QuorumMinimumRedundancy
- AllowTwoPrimaries mode support

Member validation ensures typeTransition is compatible with member type
(ToDiskless for Diskful, ToDiskful for Access/TieBreaker).

Also clarify pendingObservation field description in RSC status.

Signed-off-by: David Magton <david.magton@flant.com>
Remove controllers whose functionality will be integrated into other
existing controllers or replaced by new ones:

- rv_status_conditions
- rv_status_config_quorum
- rv_status_config_shared_secret
- rvr_access_count
- rvr_finalizer_release
- rvr_status_conditions
- rvr_status_config_peers

These controllers managed individual pieces of DRBD mesh configuration
(peers, quorum, conditions, shared secrets) in a distributed manner.

Signed-off-by: David Magton <david.magton@flant.com>
Device minor allocation is being moved to nodes (agent-side).
The controller-based pool allocation is no longer needed.

Key changes:
- Delete idpool package (ID allocation logic)
- Delete DeviceMinorPoolInitializer (manager runnable)
- Remove deviceMinor assignment from rv_controller reconciler
- Simplify rv_controller to only manage RSC label
- Remove deleted controllers from registry.go

Note: DeviceMinor type and status field remain in API as they are
still used by agent (drbd_config controller) and csi-driver.
The DeviceMinorAssigned condition constants also remain for now.

Signed-off-by: David Magton <david.magton@flant.com>
…ontrollers

Signed-off-by: David Magton <david.magton@flant.com>
- Rename IOReady -> Ready (RVR), ReplicaIOReady -> ReplicaReady (RVA)
- Remove unused RVR conditions: AddressConfigured, ConfigurationAdjusted,
  InQuorum, Online, InSync
- Remove unused Ready reasons: AgentNotReady, AgentPodMissing,
  AgentStatusUnknown, NodeNotReady, Offline, Unscheduled, OutOfSync
- Remove rvr_custom_logic_that_should_not_be_here.go, move
  ComputeStatusConditionAttached to rv_attach_controller
- Remove scanner package from agent
- Remove rvr_diskful_count controller
- Update CRDs and documentation

Signed-off-by: David Magton <david.magton@flant.com>
- Add new rvr_controller package with initial controller.go and
  reconciler.go skeleton for ReplicatedVolumeReplica reconciliation
- Register rvr_controller in the controller registry
- Simplify globs in .cursor/rules/controller-*.mdc files: replace
  explicit controller list with wildcard pattern (**/*) to
  automatically cover all controller packages
- Remove unused condition reason StorageClassNotFound from
  rv_conditions.go

Signed-off-by: David Magton <david.magton@flant.com>
This commit introduces a new ReplicatedStoragePool (RSP) controller that
computes and maintains the list of eligible nodes in RSP status.

Key changes:

API (api/v1alpha1/):
- Add Zones and NodeLabelSelector fields to RSP spec
- Add EligibleNodes and EligibleNodesRevision to RSP status
- Add new types: ReplicatedStoragePoolEligibleNode and
  ReplicatedStoragePoolEligibleNodeLVMVolumeGroup
- Add Ready condition constants for RSP
- Deprecate Phase/Reason fields (old controller compatibility)
- Update printcolumns: replace Phase/Reason with Ready condition
- Add validation rules for LVMVolumeGroups and ThinPoolName
- Remove immutability validation from RSC Zones field

Controller (images/controller/internal/controllers/rsp_controller/):
- Add controller.go with watches for Node, LVMVolumeGroup, and agent Pod
- Add predicates.go filtering relevant events
- Add reconciler.go computing eligible nodes based on:
  - NodeLabelSelector and Zones matching
  - Node Ready condition with 5-minute grace period
  - LVMVolumeGroup availability and thin pool readiness
  - Agent pod readiness

Infrastructure:
- Add index for RSP by eligible node name
- Add DoneOrFail helper to reconciliation flow
- Configure cache to filter agent pods by namespace and label
- Replace NODE_NAME env var with POD_NAMESPACE

Signed-off-by: David Magton <david.magton@flant.com>
- Move EligibleNodesPolicy from RSC to RSP types (ReplicatedStorageClass
  now references ReplicatedStoragePoolEligibleNodesPolicy)
- Add spec.eligibleNodesPolicy to ReplicatedStoragePool with default 10m
  grace period for NotReady nodes
- Replace LVMTopologyMismatch condition reason with InvalidNodeLabelSelector
  for clearer error reporting when NodeLabelSelector or Zones are invalid
- Refactor reconciler.go:
  - Remove hardcoded defaultNotReadyGracePeriod constant
  - Read grace period from RSP spec
  - Reorganize helpers by category (compute/apply/validate/construction/I/O)
  - Rename buildAgentReadyByNode to computeActualAgentReadiness
  - Fix parameter names in areThinPoolsReadyEqual to avoid shadowing builtins
- Add README.md with controller documentation and Mermaid diagrams
- Add comprehensive unit tests for predicates and reconciler
- Update CRDs with new eligibleNodesPolicy field

Signed-off-by: David Magton <david.magton@flant.com>
- Add SystemNetworkNames field to ReplicatedStoragePoolSpec (same as RSC)
- Add API validation restricting values to only "Internal" (MaxItems=1 + XValidation)
- Add TODO(systemnetwork) comments in RSC and RSP types explaining the limitation
- Add detailed TODO in rsp_controller/controller.go describing missing NetworkNode
  watch implementation and what needs to be done when systemnetwork stabilizes
- Add IMPORTANT notice to rsp_controller README.md about pending systemnetwork support
- Update CRDs with new field and validation rules

The "Internal" restriction is a temporary workaround until the systemnetwork feature
is ready. Once NetworkNode resources are stable, the controller must be updated to:
- Watch NetworkNode resources
- Filter eligible nodes based on configured network availability
- Add NetworkNode predicates for Ready condition changes

Signed-off-by: David Magton <david.magton@flant.com>
- Add ReplicatedStorageClassStorage type with Type and LVMVolumeGroups fields
- Add required spec.storage field to define storage backend directly in RSC
- Deprecate spec.storagePool: make it optional, allow only removal (not add/change)
- Make configuration fields mutable (remove immutable validation):
  - reclaimPolicy
  - replication
  - volumeAccess
  - topology

This change allows RSC to define its storage configuration directly instead of
referencing an RSP, and enables configuration updates on existing storage classes.

Signed-off-by: David Magton <david.magton@flant.com>
…er per-node reconciliation

API changes (api/v1alpha1):
- RSC: Remove EligibleNodes/EligibleNodesWorldState from status (moved to RSP)
- RSC: Add StoragePoolName, StoragePoolBasedOnGeneration, StoragePoolEligibleNodesRevision
- RSC: Add spec.Storage (Type, LVMVolumeGroups) for inline storage definition
- RSC: Simplify Configuration (remove Zones, SystemNetworkNames, NodeLabelSelector, EligibleNodesPolicy)
- RSC: Add UsedStoragePoolNames to VolumesSummary
- RSC: Update XValidation rules for topology/replication combinations
- RSP: Add UsedBy.ReplicatedStorageClassNames to track RSC references
- RSP: Rename RSPTypeLVM/RSPTypeLVMThin to ReplicatedStoragePoolTypeLVM/ReplicatedStoragePoolTypeLVMThin
- RV: Remove DeviceMinor, Phase, DiskfulReplicaCount, DiskfulReplicasInSync, AttachedAndIOReadyCount
- RV: Remove StorageClass, RolloutTicket, TargetConfiguration
- RV: Simplify to Configuration + ConfigurationGeneration + ConfigurationObservedGeneration
- RV: Remove quorum constants and SharedSecretAlgorithms()
- RVR: Remove IsDiskless(), SyncProgress, DRBDErrors

rsc_controller refactoring:
- RSC now auto-generates RSP name via FNV-128 checksum of spec.Storage (format: auto-rsp-<hex>)
- Add reconcileMigrationFromRSP phase for storagePool→spec.Storage migration
- Add reconcileRSP phase to ensure auto-generated RSP exists
- Add reconcileUnusedRSPs phase to release orphaned RSPs
- Replace ensureConfigurationAndEligibleNodes with ensureStoragePool + ensureConfiguration
- RSC now tracks RSP.Status.EligibleNodesRevision instead of computing eligible nodes
- Add StoragePoolReady condition (mirrors RSP Ready condition)
- Simplify configuration validation (delegate to RSP)

node_controller rewrite:
- Change from singleton reconciliation to per-node reconciliation
- Watch RSP instead of RSC (RSP.Status.EligibleNodes determines node eligibility)
- Add delta computation for RSP eligibleNodes changes (only reconcile affected nodes)
- Use indexes for efficient lookups (DRBDResourceByNodeName, RSPByEligibleNodeName, NodeByMetadataName)
- Remove computeTargetNodes, nodeMatchesRSC, nodeMatchesAnyRSC (logic moved to RSP)
- Add getNodeAgentLabelPresence, getNumberOfDRBDResourcesByNode, getNumberOfRSPByEligibleNode
- Increase MaxConcurrentReconciles from 1 to 10

rsp_controller optimization:
- Introduce nodeView and lvgView lightweight snapshots for UnsafeDisableDeepCopy
- Refactor getLVGsByRSP to return map[string]lvgView (List + filter vs multiple Gets)
- Merge getAgentPods + computeActualAgentReadiness into getAgentReadiness
- Add client.UnsafeDisableDeepCopy to all List calls

New indexes:
- DRBDResourceByNodeName, NodeByMetadataName
- RSCByStatusStoragePoolName, RSPByUsedByRSCName

Other changes:
- Rename all predicates to private names (rspPredicates, nodePredicates, etc.)
- Use predicate.TypedFuncs[client.Object] instead of predicate.Funcs
- Add comprehensive tests for controller mapping functions and predicates
- Update README.md files with new architecture documentation
- Add images/controller/README.md with controller overview

Signed-off-by: David Magton <david.magton@flant.com>
Renamed enum constants for better readability:
- RSCTopology* → Topology* (TransZonal, Zonal, Ignored)
- ReplicatedStorageClassConfigurationRolloutStrategyType* →
  ConfigurationRollout* (RollingUpdate, NewVolumesOnly)
- ReplicatedStorageClassEligibleNodesConflictResolutionStrategyType* →
  EligibleNodesConflictResolution* (Manual, RollingRepair)

Also reorder comments for deprecated RSP phase constants.

Signed-off-by: David Magton <david.magton@flant.com>
…ligibility checks

- Renamed topology constants from RSCTopology* to Topology* for improved readability.
- Introduced a new helper function `isNodeSchedulable` to streamline node eligibility validation based on readiness and LVM volume group status.
- Updated various controller and test files to reflect the new constant names and improved validation logic.

This refactor aims to enhance code clarity and maintainability while ensuring accurate node scheduling behavior.

Signed-off-by: Slava V <vyacheslav.voytenok@flant.com>
…tants file to streamline code and improve clarity. This change follows recent refactoring efforts to enhance readability and maintainability of the API. Signed-off-by: Slava V <vyacheslav.voytenok@flant.com>

Signed-off-by: Slava V <vyacheslav.voytenok@flant.com>
Signed-off-by: Vyacheslav Voytenok <vyacheslav.voytenok@flant.com>
- Introduced a new `reconcileStorageClass` method to streamline the reconciliation process for StorageClass resources.
- Added `isNodeSchedulable` function to improve node eligibility validation based on readiness and LVM volume group status.
- Updated tests to reflect changes in node readiness checks and StorageClass reconciliation logic.
- Refactored finalizer handling to accommodate both controller and legacy finalizers.

These changes aim to improve the clarity and maintainability of the reconciliation logic while ensuring accurate scheduling behavior for nodes.

Signed-off-by: Slava V <vyacheslav.voytenok@flant.com>
Signed-off-by: Ivan Ogurchenok <ivan.ogurchenok@flant.com>
Signed-off-by: Pavel Karpov <pavel.karpov@flant.com>
Co-authored-by: Pavel Karpov <pavel.karpov@flant.com>
Signed-off-by: Aleksandr Stefurishin <aleksandr.stefurishin@flant.com>
Update api and crd - validate size

Signed-off-by: David Magton <david.magton@gmail.com>
…otype-new-controller

Signed-off-by: David Magton <david.magton@flant.com>
…ss tracking

This commit implements the core RVR controller logic for managing DRBDResource
objects and tracking agent pod readiness.

DRBD Resource Management:
- Implement full reconcileDRBDResource lifecycle (create, update, delete)
- Compute target DRBDR spec from datamesh: NodeID, Type, Size, LLV reference,
  Peers with connection rules, Quorum settings, SystemNetworks
- Track DRBDR configuration state via Configured condition with proper
  ObservedGeneration handling
- Support type transitions (Diskful ↔ TieBreaker ↔ Diskless)
- Introduce EffectiveType: target type considering backing volume availability
  (e.g., Diskful without ready LLV becomes TieBreaker)

Agent Pod Tracking:
- Add Pod Watches for agent pods with Ready condition change predicates
- Rename index from NodeByMetadataName to PodByNodeName
- Add getAgentReady/getNodeReady helpers to check infrastructure readiness
- Block DRBD configuration when agent is not ready on target node

API Changes:
- Add RVR.Status fields: Addresses, BackingVolumeSize, DRBDResourceGeneration
- Rename RVR.Status.ActualType → EffectiveType
- Add NodeID() method to RVR and DatameshMember (extract from name suffix)
- Add RVR.SetNameWithNodeID(), RVR.ChooseNewName() for naming logic
- Add common_helpers.go with shared nodeIDFromName() helper
- Add drbdr_conditions.go with DRBDResourceCondConfigured constants
- Add new RVR condition reasons: PendingScheduling, WaitingForReplicatedVolume,
  AgentNotReady, ApplyingConfiguration, PendingDatameshJoin
- Improve DatameshMember CEL validations (name format, typeTransition rules)

Backing Volume Improvements:
- Refactor computeIntendedBackingVolume to return (intended, reason, message)
- Remove separate computeBackingVolumeNotApplicableReason (merged)
- Track BackingVolumeSize in RVR status
- Improve size calculation: use max(spec.size, datamesh.size) for resize

Flow Library:
- Change WithChangeFrom to use merge semantics (strongest state wins)

Stubs for Future Work:
- Add ensure*Status helpers (attachment, peers, disk, quorum) as stubs
- Add reconcileSatisfyEligibleNodesCondition stub

Signed-off-by: David Magton <david.magton@flant.com>
Refactor ReconcileOutcome to separate "stop processing now" (terminal)
from "schedule requeue but continue" (non-terminal) semantics.

Key changes in lib/go/common/reconciliation/flow:
- Add `terminal` and `requeueIntent` fields to ReconcileOutcome
- Remove ambiguous `Requeue()` and `RequeueAfter()` methods
- Add explicit variants:
  - `DoneAndRequeue()` / `DoneAndRequeueAfter()` — terminal with requeue
  - `ContinueAndRequeue()` / `ContinueAndRequeueAfter()` — non-terminal
- Update `ShouldReturn()` to check only `terminal` flag
- Refactor `MergeReconciles()` and `reconcileOutcomeKind()` with helpers
  `requeueDelay()` and `delayToRequeueIntent()` for clarity

Controller updates:
- rvr_controller: use `ContinueAndRequeueAfter()` for LLV validation
  errors to allow status patch before requeue; fix return to preserve
  accumulated requeue intent (`outcome.ToCtrl()` instead of `rf.Done()`)
- rsp_controller: use `DoneAndRequeueAfter()` for world state expiry

Update controller-reconciliation-flow.mdc with new API guidance.

Signed-off-by: David Magton <david.magton@flant.com>
[controller] Implement rvr_controller with datamesh-driven backing volume and DRBD resource management

Signed-off-by: David Magton <david.magton@gmail.com>
dmgtn and others added 13 commits February 9, 2026 15:05
[controller] Harden deployment: leader election, least-privilege RBAC, PSS Restricted, legacy status cleanup

Signed-off-by: David Magton <david.magton@flant.com>
Signed-off-by: Slava V <vyacheslav.voytenok@flant.com>
Signed-off-by: Slava V <vyacheslav.voytenok@flant.com>
- Updated the NewReconciler function to accept a controller namespace parameter, allowing for dynamic namespace configuration based on the POD_NAMESPACE environment variable.
- Adjusted reconciler tests to utilize the new namespace parameter, ensuring consistent behavior during reconciliation.
- Removed the replicatedStorageClassFinalizerName from finalizers in the reconciler tests to streamline finalizer management.

This change improves the flexibility of the RSC controller in multi-namespace environments.

Signed-off-by: Slava V <vyacheslav.voytenok@flant.com>
- Add /sys/ hostPath mount for agent
- Remove drbdadm hostPath mounts
- Remove drbdadm config injection

Signed-off-by: Aleksandr Stefurishin <aleksandr.stefurishin@flant.com>
Signed-off-by: Aleksandr Stefurishin <aleksandr.stefurishin@flant.com>
Signed-off-by: Slava V <vyacheslav.voytenok@flant.com>
Signed-off-by: Slava V <vyacheslav.voytenok@flant.com>
Signed-off-by: Vyacheslav Voytenok <vyacheslav.voytenok@flant.com>
- Changed the single allowed user account to a map of allowed user accounts for better flexibility.
- Updated the validation logic to check against the new map structure.

This enhancement allows for easier management of user permissions in the storage class validation process.

Signed-off-by: Slava V <vyacheslav.voytenok@flant.com>
- Added tests to verify behavior when the storagePool parameter is empty and when it differs from the existing StorageClass.
- Updated the canRecreateStorageClass function to handle cases where the old StorageClass has an empty storagePool parameter, ensuring proper deletion of the parameter during reconciliation.

These changes improve the robustness of the StorageClass reconciliation process.

Signed-off-by: Slava V <vyacheslav.voytenok@flant.com>
- Simplified the `mapRSPToRSC` function by removing unnecessary client parameter and redundant index queries, focusing on the `UsedBy` field for RSC retrieval.
- Updated tests to reflect changes in the mapping logic and ensure correct behavior when RSCs are referenced.
- Improved error messages in validation functions for better clarity.

These changes enhance the efficiency and readability of the RSC mapping process.

Signed-off-by: Slava V <vyacheslav.voytenok@flant.com>
- Updated the `mapRSPToRSC` function to remove the unused context parameter, enhancing readability and simplifying the code.
- This change contributes to a cleaner implementation of the RSC mapping logic.

Signed-off-by: Slava V <vyacheslav.voytenok@flant.com>
@MrTomSawyer MrTomSawyer force-pushed the vvoyt-move-rsc-controller branch from 55634a5 to 3a71d5b Compare February 11, 2026 13:42
Signed-off-by: Vyacheslav Voytenok <vyacheslav.voytenok@flant.com>
- Deleted the `validation.go` file, which contained the validation functions for ReplicatedStorageClass specifications.
- This removal streamlines the codebase by eliminating unused validation logic, contributing to improved maintainability.

Signed-off-by: Slava V <vyacheslav.voytenok@flant.com>
- Deleted the import statement for the `log` package in the RSC controller, as it was not utilized in the code.
- This change helps to clean up the codebase and improve maintainability.

Signed-off-by: Slava V <vyacheslav.voytenok@flant.com>
- Added new constants for storage class parameters in `replicated_storage_class_constants.go`, including auto-diskful options and quorum redundancy settings.
- Updated references in the RSC controller and reconciler to use the new constants, improving code clarity and maintainability.
- Removed the `storageclass.go` file as its contents were integrated into the constants file.

These changes streamline the management of storage class parameters and enhance the overall structure of the codebase.

Signed-off-by: Slava V <vyacheslav.voytenok@flant.com>
…logic

- Rearranged and cleaned up constants in `replicated_storage_class_constants.go`, ensuring consistent formatting and organization.
- Removed legacy parameters related to topology and zones from the reconciliation logic in `reconciler.go`, simplifying the parameter handling.
- Updated tests in `reconciler_test.go` to reflect the removal of unused parameters, enhancing clarity and maintainability.

These changes streamline the ReplicatedStorageClass implementation and improve the overall structure of the codebase.

Signed-off-by: Slava V <vyacheslav.voytenok@flant.com>
- Removed unused constants from `replicated_storage_class_constants.go`, streamlining the parameter definitions.
- Updated the `linstor_resources_watcher.go` to replace references to deleted constants, ensuring the code remains functional.
- Adjusted tests in `storage_class_annotations_test.go` to reflect the changes in constants, enhancing clarity and maintainability.

These modifications improve the organization of storage class parameters and maintain the integrity of the controller logic.

Signed-off-by: Slava V <vyacheslav.voytenok@flant.com>
- Removed unused constants from `replicated_storage_class_constants.go`, streamlining the code.
- Updated the `linstor_node.go` to replace references to deleted constants with a new prefix.
- Adjusted the reconciliation logic in `storage_class_annotations_func.go` to improve handling of storage class annotations based on volume access.
- Refactored tests in `storage_class_annotations_test.go` to align with the updated logic and improve clarity.

These changes enhance the maintainability and organization of the ReplicatedStorageClass implementation.

Signed-off-by: Slava V <vyacheslav.voytenok@flant.com>
- Added a new storage pool parameter to the `computeIntendedStorageClass` function in `reconciler.go`.
- Updated the test in `reconciler_test.go` to verify the inclusion of the new storage pool parameter alongside the existing replicated storage class parameter.

These changes improve the accuracy of the storage class configuration and enhance the robustness of the associated tests.

Signed-off-by: Slava V <vyacheslav.voytenok@flant.com>
Comment thread images/webhooks/handlers/scValidator.go Outdated
@AleksZimin AleksZimin changed the base branch from astef-prototype to astef-prototype-csi March 1, 2026 22:38
@AleksZimin AleksZimin changed the base branch from astef-prototype-csi to astef-prototype March 1, 2026 22:39
- Deleted the `replicated_storage_class_constants.go` file to streamline the codebase.
- Replaced references to removed constants in `controller.go`, `reconciler.go`, and `reconciler_test.go` with new local constants for improved clarity and maintainability.
- Updated tests in `reconciler_test.go` and `controller_suite_test.go` to reflect the changes in constant usage.

These modifications enhance the organization of the ReplicatedStorageClass implementation and ensure consistency across the codebase.

Signed-off-by: Slava V <vyacheslav.voytenok@flant.com>
…eamline the code. This change enhances clarity and maintainability of the webhook handler implementation.

Signed-off-by: Slava V <vyacheslav.voytenok@flant.com>
Signed-off-by: Slava V <vyacheslav.voytenok@flant.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants