From 9674354fb848670814fa850da8593c85f403e712 Mon Sep 17 00:00:00 2001 From: chitra607 Date: Thu, 17 Jul 2025 07:21:03 +0000 Subject: [PATCH 1/4] Openshift attach/detach volume --- .../api/container_volumes_controller.rb | 48 +++++++++++++++++++ config/api.yml | 9 +++- 2 files changed, 56 insertions(+), 1 deletion(-) diff --git a/app/controllers/api/container_volumes_controller.rb b/app/controllers/api/container_volumes_controller.rb index 06a966c599..56521010aa 100644 --- a/app/controllers/api/container_volumes_controller.rb +++ b/app/controllers/api/container_volumes_controller.rb @@ -1,4 +1,52 @@ module Api class ContainerVolumesController < BaseController + def attach_resource(type, id, data = {}) + vm_id = data["vm_id"] || params[:c_id] + raise BadRequestError, "Must specify a vm_id" if vm_id.blank? + + pvc_name = data["pvc_name"] || params.dig(:resource, :pvc_name) + volume_name = data["volume_name"] || params.dig(:resource, :volume_name) + + vm = resource_search(vm_id, :vms) + + unless vm.supports?(:attach) + raise BadRequestError, "VM does not support attach" + end + + {:task_id => vm.raw_attach_volume( vm, pvc_name, volume_name)} + rescue => err + action_result(false, err.to_s) + end + + def create_and_attach_volume_resource(type, id, data = {}) + vm_id = data["vm_id"] || params[:c_id] + raise BadRequestError, "Must specify a vm_id" if vm_id.blank? + + volume_name = data["volume_name"] || params.dig(:resource, :volume_name) + volume_size = data["volume_size"] || params.dig(:resource, :volume_size) + + vm = resource_search(vm_id, :vms) + + unless vm.supports?(:attach) + raise BadRequestError, "VM does not support attach" + end + + {:task_id => vm.create_pvc( vm, volume_name, volume_size)} + rescue => err + action_result(false, err.to_s) + end + + def detach_resource(type, id, data = {}) + vm_id = data["vm_id"] || params[:c_id] + raise BadRequestError, "Must specify a vm_id" if data["vm_id"].blank? + + volume_name = data["volume_name"] || params.dig(:resource, :volume_name) + + vm = resource_search(vm_id, :vms) + {:task_id => vm.raw_detach_volume(vm, volume_name)} + rescue => err + action_result(false, err.to_s) + end + end end diff --git a/config/api.yml b/config/api.yml index 4ff601c747..5523ca6997 100644 --- a/config/api.yml +++ b/config/api.yml @@ -1211,7 +1211,7 @@ :description: Container Volumes :identifier: persistent_volume :klass: ContainerVolume - :verbs: *gp + :verbs: *gpppd :options: - :collection - :custom_actions @@ -1226,6 +1226,13 @@ :get: - :name: read :identifier: persistent_volume_show + :post: + - :name: attach + :identifier: vm_common_add_volume + - :name: create_and_attach_volume + :identifier: vm_common_add_volume + - :name: detach + :identifier: vm_common_remove_volume :containers: :description: Containers :identifier: container From 270cebeb16a3844333b73a49b149d925b0a5b814 Mon Sep 17 00:00:00 2001 From: chitra607 Date: Thu, 17 Jul 2025 10:54:02 +0000 Subject: [PATCH 2/4] updated --- app/controllers/api/container_volumes_controller.rb | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/app/controllers/api/container_volumes_controller.rb b/app/controllers/api/container_volumes_controller.rb index 56521010aa..ac607d9710 100644 --- a/app/controllers/api/container_volumes_controller.rb +++ b/app/controllers/api/container_volumes_controller.rb @@ -1,6 +1,6 @@ module Api class ContainerVolumesController < BaseController - def attach_resource(type, id, data = {}) + def attach_resource(data = {}) vm_id = data["vm_id"] || params[:c_id] raise BadRequestError, "Must specify a vm_id" if vm_id.blank? @@ -13,16 +13,16 @@ def attach_resource(type, id, data = {}) raise BadRequestError, "VM does not support attach" end - {:task_id => vm.raw_attach_volume( vm, pvc_name, volume_name)} + {:task_id => vm.raw_attach_volume(vm, pvc_name, volume_name)} rescue => err action_result(false, err.to_s) end - def create_and_attach_volume_resource(type, id, data = {}) + def create_and_attach_volume_resource(data = {}) vm_id = data["vm_id"] || params[:c_id] raise BadRequestError, "Must specify a vm_id" if vm_id.blank? - volume_name = data["volume_name"] || params.dig(:resource, :volume_name) + volume_name = data["volume_name"] || params.dig(:resource, :volume_name) volume_size = data["volume_size"] || params.dig(:resource, :volume_size) vm = resource_search(vm_id, :vms) @@ -31,12 +31,12 @@ def create_and_attach_volume_resource(type, id, data = {}) raise BadRequestError, "VM does not support attach" end - {:task_id => vm.create_pvc( vm, volume_name, volume_size)} + {:task_id => vm.create_pvc(vm, volume_name, volume_size)} rescue => err action_result(false, err.to_s) end - def detach_resource(type, id, data = {}) + def detach_resource(data = {}) vm_id = data["vm_id"] || params[:c_id] raise BadRequestError, "Must specify a vm_id" if data["vm_id"].blank? @@ -47,6 +47,5 @@ def detach_resource(type, id, data = {}) rescue => err action_result(false, err.to_s) end - end end From e54015db2eb9c592642f2c45224261c016729a85 Mon Sep 17 00:00:00 2001 From: chitra607 Date: Fri, 18 Jul 2025 10:18:23 +0000 Subject: [PATCH 3/4] updated --- .../api/container_volumes_controller.rb | 58 ++++++++++--------- 1 file changed, 32 insertions(+), 26 deletions(-) diff --git a/app/controllers/api/container_volumes_controller.rb b/app/controllers/api/container_volumes_controller.rb index ac607d9710..b61d53068e 100644 --- a/app/controllers/api/container_volumes_controller.rb +++ b/app/controllers/api/container_volumes_controller.rb @@ -1,49 +1,55 @@ module Api class ContainerVolumesController < BaseController - def attach_resource(data = {}) - vm_id = data["vm_id"] || params[:c_id] - raise BadRequestError, "Must specify a vm_id" if vm_id.blank? + def attach_resource(type, id, data = {}) + api_resource(type, id, "Attaching Resource to") do |container_volume| + vm_id = data["vm_id"] || params[:c_id] + raise BadRequestError, "Must specify a vm_id" if vm_id.blank? - pvc_name = data["pvc_name"] || params.dig(:resource, :pvc_name) - volume_name = data["volume_name"] || params.dig(:resource, :volume_name) + pvc_name = data["pvc_name"] || params.dig(:resource, :pvc_name) + volume_name = data["volume_name"] || params.dig(:resource, :volume_name) - vm = resource_search(vm_id, :vms) + vm = resource_search(vm_id, :vms) - unless vm.supports?(:attach) - raise BadRequestError, "VM does not support attach" - end + unless vm.supports?(:attach) + raise BadRequestError, "VM does not support attach" + end - {:task_id => vm.raw_attach_volume(vm, pvc_name, volume_name)} + {:task_id => container_volume.attach_volume_queue(User.current_userid, vm, pvc_name, volume_name)} + end rescue => err action_result(false, err.to_s) end - def create_and_attach_volume_resource(data = {}) - vm_id = data["vm_id"] || params[:c_id] - raise BadRequestError, "Must specify a vm_id" if vm_id.blank? + def create_and_attach_volume_resource(type, id, data = {}) + api_resource(type, id, "Attaching Resource to") do |container_volume| + vm_id = data["vm_id"] || params[:c_id] + raise BadRequestError, "Must specify a vm_id" if vm_id.blank? - volume_name = data["volume_name"] || params.dig(:resource, :volume_name) - volume_size = data["volume_size"] || params.dig(:resource, :volume_size) + volume_name = data["volume_name"] || params.dig(:resource, :volume_name) + volume_size = data["volume_size"] || params.dig(:resource, :volume_size) - vm = resource_search(vm_id, :vms) + vm = resource_search(vm_id, :vms) - unless vm.supports?(:attach) - raise BadRequestError, "VM does not support attach" - end + unless vm.supports?(:attach) + raise BadRequestError, "VM does not support attach" + end - {:task_id => vm.create_pvc(vm, volume_name, volume_size)} + {:task_id => container_volume.create_pvc_queue(User.current_userid, vm, volume_name, volume_size)} + end rescue => err action_result(false, err.to_s) end - def detach_resource(data = {}) - vm_id = data["vm_id"] || params[:c_id] - raise BadRequestError, "Must specify a vm_id" if data["vm_id"].blank? + def detach_resource(type, id, data = {}) + api_resource(type, id, "Detaching Resource to") do |container_volume| + vm_id = data["vm_id"] || params[:c_id] + raise BadRequestError, "Must specify a vm_id" if data["vm_id"].blank? - volume_name = data["volume_name"] || params.dig(:resource, :volume_name) + volume_name = data["volume_name"] || params.dig(:resource, :volume_name) - vm = resource_search(vm_id, :vms) - {:task_id => vm.raw_detach_volume(vm, volume_name)} + vm = resource_search(vm_id, :vms) + {:task_id => container_volume.detach_volume_queue(User.current_userid, vm, volume_name)} + end rescue => err action_result(false, err.to_s) end From f9eb2187785ff0a064cccb2da536b0ac3a298d5f Mon Sep 17 00:00:00 2001 From: chitra607 Date: Tue, 2 Sep 2025 09:25:53 +0000 Subject: [PATCH 4/4] updated infra volume attach/detach api --- app/controllers/api/container_volumes_controller.rb | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/app/controllers/api/container_volumes_controller.rb b/app/controllers/api/container_volumes_controller.rb index b61d53068e..27a7a0c16a 100644 --- a/app/controllers/api/container_volumes_controller.rb +++ b/app/controllers/api/container_volumes_controller.rb @@ -24,17 +24,13 @@ def create_and_attach_volume_resource(type, id, data = {}) api_resource(type, id, "Attaching Resource to") do |container_volume| vm_id = data["vm_id"] || params[:c_id] raise BadRequestError, "Must specify a vm_id" if vm_id.blank? - - volume_name = data["volume_name"] || params.dig(:resource, :volume_name) - volume_size = data["volume_size"] || params.dig(:resource, :volume_size) - vm = resource_search(vm_id, :vms) unless vm.supports?(:attach) raise BadRequestError, "VM does not support attach" end - {:task_id => container_volume.create_pvc_queue(User.current_userid, vm, volume_name, volume_size)} + {:task_id => container_volume.create_pvc_queue(User.current_userid, vm, data)} end rescue => err action_result(false, err.to_s) @@ -44,9 +40,7 @@ def detach_resource(type, id, data = {}) api_resource(type, id, "Detaching Resource to") do |container_volume| vm_id = data["vm_id"] || params[:c_id] raise BadRequestError, "Must specify a vm_id" if data["vm_id"].blank? - volume_name = data["volume_name"] || params.dig(:resource, :volume_name) - vm = resource_search(vm_id, :vms) {:task_id => container_volume.detach_volume_queue(User.current_userid, vm, volume_name)} end