diff --git a/app/controllers/api/container_volumes_controller.rb b/app/controllers/api/container_volumes_controller.rb index 06a966c599..27a7a0c16a 100644 --- a/app/controllers/api/container_volumes_controller.rb +++ b/app/controllers/api/container_volumes_controller.rb @@ -1,4 +1,51 @@ module Api class ContainerVolumesController < BaseController + 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) + + vm = resource_search(vm_id, :vms) + + unless vm.supports?(:attach) + raise BadRequestError, "VM does not support attach" + end + + {: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(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? + 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, data)} + end + rescue => err + action_result(false, err.to_s) + end + + 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 + 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