Skip to content

Commit

Permalink
Merge pull request #15284 from jntullo/enhancement/unassign_miq_server
Browse files Browse the repository at this point in the history
Remove miq_server
  • Loading branch information
abellotti authored Jun 7, 2017
2 parents c374610 + 453b607 commit 3af0dbb
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 4 deletions.
16 changes: 12 additions & 4 deletions app/controllers/api/vms_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -247,18 +247,26 @@ def request_console_resource(type, id = nil, data = nil)
def set_miq_server_resource(type, id, data)
vm = resource_search(id, type, collection_class(type))

miq_server_id = parse_id(data['miq_server'], :servers)
raise 'Must specify a valid miq_server href or id' unless miq_server_id
miq_server = resource_search(miq_server_id, :servers, collection_class(:servers))
miq_server = if data['miq_server'].empty?
nil
else
miq_server_id = parse_id(data['miq_server'], :servers)
raise 'Must specify a valid miq_server href or id' unless miq_server_id
resource_search(miq_server_id, :servers, collection_class(:servers))
end

vm.miq_server = miq_server
action_result(true, "Set miq_server id:#{miq_server.id} for #{vm_ident(vm)}")
action_result(true, "#{miq_server_message(miq_server)} for #{vm_ident(vm)}")
rescue => err
action_result(false, "Failed to set miq_server - #{err}")
end

private

def miq_server_message(miq_server)
miq_server ? "Set miq_server id:#{miq_server.id}" : "Removed miq_server"
end

def validate_edit_data(data)
invalid_keys = data.keys - VALID_EDIT_ATTRS - valid_custom_attrs
raise BadRequestError, "Cannot edit values #{invalid_keys.join(', ')}" if invalid_keys.present?
Expand Down
11 changes: 11 additions & 0 deletions spec/requests/api/vms_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1581,5 +1581,16 @@ def update_raw_power_state(state, *vms)
expect(response.parsed_body).to eq(expected)
expect(response).to have_http_status(:ok)
end

it "can unassign a server if an empty hash is passed" do
vm.miq_server = server
api_basic_authorize action_identifier(:vms, :set_miq_server)

run_post(vms_url(vm.id), :action => 'set_miq_server', :miq_server => {})

expected = {'success' => true, 'message' => "Removed miq_server for VM id:#{vm.id} name:'#{vm.name}'"}
expect(response.parsed_body).to eq(expected)
expect(vm.reload.miq_server).to be_nil
end
end
end

0 comments on commit 3af0dbb

Please sign in to comment.