Skip to content

Commit 5e39086

Browse files
authored
Merge pull request #1159 from kbrock/edit_resource_vms
condense api_actions to api_resource for vms
2 parents e54b49c + 06dadf2 commit 5e39086

File tree

2 files changed

+46
-144
lines changed

2 files changed

+46
-144
lines changed

Diff for: app/controllers/api/vms_controller.rb

+34-100
Original file line numberDiff line numberDiff line change
@@ -55,27 +55,23 @@ def delete_resource(type, id, _data = nil)
5555
end
5656

5757
def set_owner_resource(type, id = nil, data = nil)
58-
raise BadRequestError, "Must specify an id for setting the owner of a #{type} resource" unless id
58+
api_resource(type, id, "Setting owner of") do |vm|
59+
owner = data.blank? ? "" : data["owner"].strip
60+
raise BadRequestError, "Must specify an owner" if owner.blank?
5961

60-
owner = data.blank? ? "" : data["owner"].strip
61-
raise BadRequestError, "Must specify an owner" if owner.blank?
62+
user = User.lookup_by_identity(owner)
63+
raise BadRequestError, "Invalid user #{owner} specified" unless user
6264

63-
api_action(type, id) do |klass|
64-
vm = resource_search(id, type, klass)
65-
api_log_info("Setting owner of #{vm_ident(vm)}")
66-
67-
set_owner_vm(vm, owner)
65+
vm.update!(:evm_owner => user, :miq_group => user.current_group)
66+
{}
6867
end
6968
end
7069

7170
def add_lifecycle_event_resource(type, id = nil, data = nil)
72-
raise BadRequestError, "Must specify an id for adding a Lifecycle Event to a #{type} resource" unless id
73-
74-
api_action(type, id) do |klass|
75-
vm = resource_search(id, type, klass)
76-
api_log_info("Adding Lifecycle Event to #{vm_ident(vm)}")
77-
78-
add_lifecycle_event_vm(vm, lifecycle_event_from_data(data))
71+
lifecycle_event = lifecycle_event_from_data(data)
72+
api_resource(type, id, "Adding Life Cycle Event #{lifecycle_event['event']} to") do |vm|
73+
LifecycleEvent.create_event(vm, lifecycle_event)
74+
{}
7975
end
8076
end
8177

@@ -88,11 +84,11 @@ def add_event_resource(type, id = nil, data = nil)
8884

8985
data ||= {}
9086

91-
api_action(type, id) do |klass|
92-
vm = resource_search(id, type, klass)
93-
api_log_info("Adding Event to #{vm_ident(vm)}")
87+
api_resource(type, id, "Adding Event to") do |vm|
88+
event_timestamp = data["event_time"].blank? ? Time.now.utc : data["event_time"].to_s.to_time(:utc)
9489

95-
vm_event(vm, data["event_type"].to_s, data["event_message"].to_s, data["event_time"].to_s)
90+
vm.add_ems_event(data["event_type"].to_s, data["event_message"].to_s, event_timestamp)
91+
{}
9692
end
9793
end
9894

@@ -107,18 +103,13 @@ def reboot_guest_resource(type, id = nil, _data = nil)
107103
central_admin :reboot_guest_resource, :reboot_guest
108104

109105
def rename_resource(type, id, data = {})
110-
raise BadRequestError, "Must specify an id for renaming a #{type} resource" unless id
111-
112106
new_name = data.blank? ? "" : data["new_name"].strip
113-
raise BadRequestError, "Must specify a new_name" if new_name.blank?
107+
api_resource(type, id, "Renaming", :supports => :rename) do |vm|
108+
raise BadRequestError, "Must specify a new_name" if new_name.blank?
114109

115-
api_action(type, id) do |klass|
116-
vm = resource_search(id, type, klass)
117-
api_log_info("Renaming #{vm_ident(vm)} to #{new_name}")
110+
task_id = vm.rename_queue(User.current_user.userid, new_name)
118111

119-
result = validate_vm_for_action(vm, "rename")
120-
result = rename_vm(vm, new_name) if result[:success]
121-
result
112+
action_result(true, "Renaming #{model_ident(vm, type)} to #{new_name}", :task_id => task_id)
122113
end
123114
end
124115
central_admin :rename_resource, :rename
@@ -154,20 +145,21 @@ def request_console_resource(type, id = nil, data = nil)
154145
end
155146

156147
def set_miq_server_resource(type, id, data)
157-
vm = resource_search(id, type)
158-
159-
miq_server = if data['miq_server'].empty?
160-
nil
161-
else
162-
miq_server_id = parse_id(data['miq_server'], :servers)
163-
raise 'Must specify a valid miq_server href or id' unless miq_server_id
164-
resource_search(miq_server_id, :servers)
165-
end
166-
167-
vm.miq_server = miq_server
168-
action_result(true, "#{miq_server_message(miq_server)} for #{vm_ident(vm)}")
169-
rescue => err
170-
action_result(false, "Failed to set miq_server - #{err}")
148+
if data['miq_server'].empty?
149+
api_resource(type, id, "Removing miq_server from") do |vm|
150+
vm.miq_server = nil
151+
{}
152+
end
153+
else
154+
api_resource(type, id, "Setting miq_server for") do |vm|
155+
miq_server_id = parse_id(data['miq_server'], :servers)
156+
raise BadRequestError, 'Must specify a valid miq_server href or id' unless miq_server_id
157+
158+
miq_server = resource_search(miq_server_id, :servers)
159+
vm.miq_server = miq_server
160+
{}
161+
end
162+
end
171163
end
172164

173165
def request_retire_resource(type, id = nil, data = nil)
@@ -200,69 +192,11 @@ def options
200192

201193
private
202194

203-
def miq_server_message(miq_server)
204-
miq_server ? "Set miq_server id:#{miq_server.id}" : "Removed miq_server"
205-
end
206-
207-
def vm_ident(vm)
208-
"VM id:#{vm.id} name:'#{vm.name}'"
209-
end
210-
211-
def validate_vm_for_action(vm, action)
212-
action_result(vm.supports?(action), vm.unsupported_reason(action.to_sym))
213-
end
214-
215-
def validate_vm_for_remote_console(vm, protocol = nil)
216-
protocol ||= "mks"
217-
vm.validate_remote_console_acquire_ticket(protocol)
218-
action_result(true, "")
219-
rescue MiqException::RemoteConsoleNotSupportedError => err
220-
action_result(false, err.message)
221-
end
222-
223-
def set_owner_vm(vm, owner)
224-
desc = "#{vm_ident(vm)} setting owner to '#{owner}'"
225-
user = User.lookup_by_identity(owner)
226-
raise "Invalid user #{owner} specified" unless user
227-
vm.evm_owner = user
228-
vm.miq_group = user.current_group unless user.nil?
229-
vm.save!
230-
action_result(true, desc)
231-
rescue => err
232-
action_result(false, err.to_s)
233-
end
234-
235-
def add_lifecycle_event_vm(vm, lifecycle_event)
236-
desc = "#{vm_ident(vm)} adding lifecycle event=#{lifecycle_event['event']} message=#{lifecycle_event['message']}"
237-
event = LifecycleEvent.create_event(vm, lifecycle_event)
238-
action_result(event.present?, desc)
239-
rescue => err
240-
action_result(false, err.to_s)
241-
end
242-
243195
def lifecycle_event_from_data(data)
244196
data ||= {}
245197
data = data.slice("event", "status", "message", "created_by")
246198
data.keys.each { |k| data[k] = data[k].to_s }
247199
data
248200
end
249-
250-
def vm_event(vm, event_type, event_message, event_time)
251-
desc = "Adding Event type=#{event_type} message=#{event_message}"
252-
event_timestamp = event_time.blank? ? Time.now.utc : event_time.to_time(:utc)
253-
254-
vm.add_ems_event(event_type, event_message, event_timestamp)
255-
action_result(true, desc)
256-
rescue => err
257-
action_result(false, err.to_s)
258-
end
259-
260-
def rename_vm(vm, new_name)
261-
desc = "#{vm_ident(vm)} renaming to #{new_name}"
262-
task_id = vm.rename_queue(User.current_user.userid, new_name)
263-
action_result(true, desc, :task_id => task_id)
264-
rescue => err
265-
action_result(false, err.to_s)
266-
end
267201
end
268202
end

Diff for: spec/requests/vms_spec.rb

+12-44
Original file line numberDiff line numberDiff line change
@@ -1046,15 +1046,15 @@ def query_match_regexp(*tables)
10461046

10471047
post(vm_url, :params => gen_request(:set_owner, "owner" => "bad_user"))
10481048

1049-
expect_single_action_result(:success => false, :message => /.*/, :href => api_vm_url(nil, vm))
1049+
expect_bad_request(/Invalid user/)
10501050
end
10511051

10521052
it "set_owner to a vm" do
10531053
api_basic_authorize action_identifier(:vms, :set_owner)
10541054

10551055
post(vm_url, :params => gen_request(:set_owner, "owner" => @user.userid))
10561056

1057-
expect_single_action_result(:success => true, :message => "setting owner", :href => api_vm_url(nil, vm))
1057+
expect_single_action_result(:success => true, :message => /Setting owner/i, :href => api_vm_url(nil, vm))
10581058
expect(vm.reload.evm_owner).to eq(@user)
10591059
end
10601060

@@ -1063,7 +1063,7 @@ def query_match_regexp(*tables)
10631063

10641064
post(api_vms_url, :params => gen_request(:set_owner, {"owner" => @user.userid}, vm1_url, vm2_url))
10651065

1066-
expect_multiple_action_result(2)
1066+
expect_multiple_action_result(2, :success => true, :message => /Setting owner/i)
10671067
expect_result_resources_to_include_hrefs("results", [api_vm_url(nil, vm1), api_vm_url(nil, vm2)])
10681068
expect(vm1.reload.evm_owner).to eq(@user)
10691069
expect(vm2.reload.evm_owner).to eq(@user)
@@ -1218,7 +1218,7 @@ def query_match_regexp(*tables)
12181218

12191219
post(vm_url, :params => gen_request(:add_lifecycle_event, events[0]))
12201220

1221-
expect_single_action_result(:success => true, :message => /adding lifecycle event/i, :href => api_vm_url(nil, vm))
1221+
expect_single_action_result(:success => true, :message => /adding life cycle event/i, :href => api_vm_url(nil, vm))
12221222
expect(vm.lifecycle_events.size).to eq(1)
12231223
expect(vm.lifecycle_events.first.event).to eq(events[0][:event])
12241224
end
@@ -1229,7 +1229,7 @@ def query_match_regexp(*tables)
12291229
post(api_vms_url, :params => gen_request(:add_lifecycle_event,
12301230
events.collect { |e| {:href => vm_url}.merge(e) }))
12311231

1232-
expect_multiple_action_result(3)
1232+
expect_multiple_action_result(3, :success => true)
12331233
expect(vm.lifecycle_events.size).to eq(events.size)
12341234
expect(vm.lifecycle_events.collect(&:event)).to match_array(events.collect { |e| e[:event] })
12351235
end
@@ -1307,22 +1307,8 @@ def query_match_regexp(*tables)
13071307
)
13081308
)
13091309

1310-
expected = {
1311-
"results" => a_collection_containing_exactly(
1312-
{
1313-
"message" => a_string_matching(/adding event .*etype1/i),
1314-
"success" => true,
1315-
"href" => api_vm_url(nil, vm1)
1316-
},
1317-
{
1318-
"message" => a_string_matching(/adding event .*etype2/i),
1319-
"success" => true,
1320-
"href" => api_vm_url(nil, vm2)
1321-
}
1322-
)
1323-
}
1324-
expect(response.parsed_body).to include(expected)
1325-
expect(response).to have_http_status(:ok)
1310+
expect_multiple_action_result(2, :success => true, :message => /Adding Event/i)
1311+
expect_result_resources_to_include_hrefs("results", [api_vm_url(nil, vm1), api_vm_url(nil, vm2)])
13261312
end
13271313
end
13281314

@@ -1940,12 +1926,7 @@ def query_match_regexp(*tables)
19401926

19411927
post(api_vm_url(nil, vm), :params => { :action => 'set_miq_server', :miq_server => { :href => api_server_url(nil, server)} })
19421928

1943-
expected = {
1944-
'success' => true,
1945-
'message' => "Set miq_server id:#{server.id} for VM id:#{vm.id} name:'#{vm.name}'"
1946-
}
1947-
expect(response).to have_http_status(:ok)
1948-
expect(response.parsed_body).to eq(expected)
1929+
expect_single_action_result(:success => true, :message => /Setting miq_server for Vm id: #{vm.id} name: '#{vm.name}'/)
19491930
expect(vm.reload.miq_server).to eq(server)
19501931
end
19511932

@@ -1963,14 +1944,7 @@ def query_match_regexp(*tables)
19631944
}
19641945
)
19651946

1966-
expected = {
1967-
'results' => [
1968-
{ 'success' => true, 'message' => "Set miq_server id:#{server.id} for VM id:#{vm.id} name:'#{vm.name}'" },
1969-
{ 'success' => true, 'message' => "Set miq_server id:#{server2.id} for VM id:#{vm1.id} name:'#{vm1.name}'" }
1970-
]
1971-
}
1972-
expect(response).to have_http_status(:ok)
1973-
expect(response.parsed_body).to eq(expected)
1947+
expect_multiple_action_result(2, :success => true, :message => /Setting miq_server for Vm/i)
19741948
expect(vm.reload.miq_server).to eq(server)
19751949
expect(vm1.reload.miq_server).to eq(server2)
19761950
end
@@ -1979,14 +1953,10 @@ def query_match_regexp(*tables)
19791953
api_basic_authorize action_identifier(:vms, :set_miq_server)
19801954

19811955
post(api_vm_url(nil, vm), :params => { :action => 'set_miq_server', :miq_server => { :href => api_vm_url(nil, 1) } })
1982-
1983-
expected = { 'success' => false, 'message' => 'Failed to set miq_server - Must specify a valid miq_server href or id' }
1984-
expect(response.parsed_body).to eq(expected)
1985-
expect(response).to have_http_status(:bad_request)
1956+
expect_bad_request(/Must specify a valid miq_server href or id/)
19861957

19871958
post(api_vm_url(nil, vm), :params => { :action => 'set_miq_server', :miq_server => { :id => nil } })
1988-
expect(response.parsed_body).to eq(expected)
1989-
expect(response).to have_http_status(:bad_request)
1959+
expect_bad_request(/Must specify a valid miq_server href or id/)
19901960
end
19911961

19921962
it "can unassign a server if an empty hash is passed" do
@@ -1995,9 +1965,7 @@ def query_match_regexp(*tables)
19951965

19961966
post(api_vm_url(nil, vm), :params => { :action => 'set_miq_server', :miq_server => {} })
19971967

1998-
expected = {'success' => true, 'message' => "Removed miq_server for VM id:#{vm.id} name:'#{vm.name}'"}
1999-
expect(response.parsed_body).to eq(expected)
2000-
expect(vm.reload.miq_server).to be_nil
1968+
expect_single_action_result(:success => true, :message => "Removing miq_server from Vm id: #{vm.id} name: '#{vm.name}'")
20011969
end
20021970
end
20031971

0 commit comments

Comments
 (0)