You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltacloud.apache.org by mf...@apache.org on 2013/02/22 11:32:24 UTC
[4/12] git commit: Move the logic from Machine.create_from_json and
Machine.create_from_xml into MachineCreate
Move the logic from Machine.create_from_json and Machine.create_from_xml
into MachineCreate
Project: http://git-wip-us.apache.org/repos/asf/deltacloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltacloud/commit/0ffdf176
Tree: http://git-wip-us.apache.org/repos/asf/deltacloud/tree/0ffdf176
Diff: http://git-wip-us.apache.org/repos/asf/deltacloud/diff/0ffdf176
Branch: refs/heads/master
Commit: 0ffdf1760223f1c07b3c547988a01f8710d56404
Parents: 91e0b38
Author: David Lutterkort <lu...@redhat.com>
Authored: Sat Feb 9 21:54:42 2013 +0100
Committer: Michal fojtik <mf...@redhat.com>
Committed: Thu Feb 21 15:31:31 2013 +0100
----------------------------------------------------------------------
server/lib/cimi/collections/machines.rb | 7 +--
server/lib/cimi/models/machine.rb | 71 -------------------------
server/lib/cimi/models/machine_create.rb | 29 ++++++++++
3 files changed, 31 insertions(+), 76 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/deltacloud/blob/0ffdf176/server/lib/cimi/collections/machines.rb
----------------------------------------------------------------------
diff --git a/server/lib/cimi/collections/machines.rb b/server/lib/cimi/collections/machines.rb
index 9a71bb1..5025e58 100644
--- a/server/lib/cimi/collections/machines.rb
+++ b/server/lib/cimi/collections/machines.rb
@@ -46,11 +46,8 @@ module CIMI::Collections
operation :create, :with_capability => :create_instance do
description "Create a new Machine entity."
control do
- if grab_content_type(request.content_type, request.body) == :json
- new_machine = Machine.create_from_json(request.body.read, self)
- else
- new_machine = Machine.create_from_xml(request.body.read, self)
- end
+ mc = MachineCreate.parse(request.body, request.content_type)
+ new_machine = mc.create(self)
headers_for_create new_machine
respond_to do |format|
format.json { new_machine.to_json }
http://git-wip-us.apache.org/repos/asf/deltacloud/blob/0ffdf176/server/lib/cimi/models/machine.rb
----------------------------------------------------------------------
diff --git a/server/lib/cimi/models/machine.rb b/server/lib/cimi/models/machine.rb
index 1b8e28a..f32bdfb 100644
--- a/server/lib/cimi/models/machine.rb
+++ b/server/lib/cimi/models/machine.rb
@@ -50,77 +50,6 @@ class CIMI::Model::Machine < CIMI::Model::Base
end
end
- def self.create_from_json(body, context)
- json = JSON.parse(body)
- additional_params={}
- machine_template = json['machineTemplate']
- if !machine_template['href'].nil?
- template = current_db.machine_templates_dataset.first(:id => machine_template['href'].split('/').last)
- raise 'Could not find the MachineTemplate' if template.nil?
- hardware_profile_id = template.machine_config.split('/').last
- image_id = template.machine_image.split('/').last
- json['realm'] = template.realm
- else
- hardware_profile_id = machine_template['machineConfig']["href"].split('/').last
- image_id = machine_template['machineImage']["href"].split('/').last
- if machine_template.has_key? 'credential'
- additional_params[:keyname] = machine_template['credential']["href"].split('/').last
- end
- end
- if machine_template.has_key? "initialState"
- additional_params[:initial_state] = machine_template["initialState"].strip
- end
- additional_params[:name] = json['name'] if json['name']
- additional_params[:realm_id] = json['realm'] if json['realm']
- instance = context.driver.create_instance(context.credentials, image_id, {
- :hwp_id => hardware_profile_id
- }.merge(additional_params))
-
- # Store attributes that are not supported by the backend cloud to local
- # database:
- machine = from_instance(instance, context)
- machine.name = json['name'] || machine.name
- machine.description = json['description']
- machine.extract_properties!(json)
- machine.save
- machine
- end
-
- def self.create_from_xml(body, context)
- xml = XmlSimple.xml_in(body)
- additional_params = {}
- if xml['machineTemplate'][0]['href']
- template = current_db.machine_templates_dataset.first(:id => xml['machineTemplate'][0]['href'].split('/').last)
- hardware_profile_id = template.machine_config.split('/').last
- image_id = template.machine_image.split('/').last
- xml['realm'] = [ template.realm ]
- else
- machine_template = xml['machineTemplate'][0]
- hardware_profile_id = machine_template['machineConfig'].first["href"].split('/').last
- image_id = machine_template['machineImage'].first["href"].split('/').last
- if machine_template.has_key? 'credential'
- additional_params[:keyname] = machine_template['credential'][0]["href"].split('/').last
- end
- end
- if xml["machineTemplate"][0].has_key? "initialState"
- additional_params[:initial_state] = xml["machineTemplate"][0]["initialState"].first.strip
- end
- additional_params[:name] = xml['name'][0] if xml['name']
- additional_params[:realm_id] = xml['realm'][0] if xml['realm']
- instance = context.driver.create_instance(context.credentials, image_id, {
- :hwp_id => hardware_profile_id
- }.merge(additional_params))
-
- # Store attributes that are not supported by the backend cloud to local
- # database:
- machine = from_instance(instance, context)
- machine.name = xml['name'] || machine.name
- machine.description = xml['description']
- machine.extract_properties!(xml)
- machine.save
- machine
- end
-
def perform(action, context, &block)
begin
if context.driver.send(:"#{action.name}_instance", context.credentials, self.id.split("/").last)
http://git-wip-us.apache.org/repos/asf/deltacloud/blob/0ffdf176/server/lib/cimi/models/machine_create.rb
----------------------------------------------------------------------
diff --git a/server/lib/cimi/models/machine_create.rb b/server/lib/cimi/models/machine_create.rb
index 8f9fc89..c0b107c 100644
--- a/server/lib/cimi/models/machine_create.rb
+++ b/server/lib/cimi/models/machine_create.rb
@@ -15,4 +15,33 @@
class CIMI::Model::MachineCreate < CIMI::Model::Base
ref :machine_template
+ text :realm
+
+ def create(ctx)
+ params = {}
+ if machine_template.href
+ template = machine_template.find(ctx)
+ params[:hwp_id] = template.machine_config.ref_id(ctx)
+ image_id = template.machine_image.ref_id(ctx)
+ else
+ # FIXME: What if either of these href's isn't there ? What if the user
+ # tries to override some aspect of the machine_config/machine_image ?
+ params[:hwp_id] = machine_template.machine_config.href.split('/').last
+ image_id = machine_template.machine_image.href.split('/').last
+ if machine_template.credential.href
+ params[:keyname] = machine_template.credential.href.split('/').last
+ end
+ end
+
+ params[:name] = name if name
+ params[:realm_id] = realm if realm
+ instance = ctx.driver.create_instance(ctx.credentials, image_id, params)
+
+ result = CIMI::Model::Machine::from_instance(instance, ctx)
+ result.name = name if name
+ result.description = description if description
+ result.property = property if property
+ result.save
+ result
+ end
end