Class: Pvectl::Services::SetContainer
- Inherits:
-
Object
- Object
- Pvectl::Services::SetContainer
- Defined in:
- lib/pvectl/services/set_container.rb
Overview
Orchestrates non-interactive container configuration updates.
Takes key-value pairs directly (no editor), computes diff against current config, and applies changes via the API. Supports dry-run mode and optimistic locking via digest.
Instance Method Summary collapse
-
#execute(ctid:, params:) ⇒ Models::ContainerOperationResult?
Executes the non-interactive container config update.
-
#initialize(container_repository:, options: {}) ⇒ SetContainer
constructor
Creates a new SetContainer service.
Constructor Details
#initialize(container_repository:, options: {}) ⇒ SetContainer
Creates a new SetContainer service.
24 25 26 27 |
# File 'lib/pvectl/services/set_container.rb', line 24 def initialize(container_repository:, options: {}) @container_repository = container_repository @options = end |
Instance Method Details
#execute(ctid:, params:) ⇒ Models::ContainerOperationResult?
Executes the non-interactive container config update.
Fetches current config, computes diff against requested params, and applies changes via the API (unless dry-run).
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/pvectl/services/set_container.rb', line 37 def execute(ctid:, params:) container = @container_repository.get(ctid) return not_found_result(ctid) unless container config = @container_repository.fetch_config(container.node, ctid) resource_info = { vmid: ctid, node: container.node, status: container.status } changes = compute_diff(config, params) if changes[:changed].empty? && changes[:added].empty? && changes[:removed].empty? return nil end resource_info[:diff] = changes if @options[:dry_run] return build_result(resource_info, success: true) end update_params = build_update_params(changes, config) @container_repository.update(ctid, container.node, update_params) build_result(resource_info, success: true) rescue StandardError => e build_result({ vmid: ctid }, success: false, error: e.) end |