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
[8/12] git commit: CIMI: Added more EntityCreate models for CIMI
CIMI: Added more EntityCreate models for CIMI
- AddressCreate
- AddressTemplateCreate
- CredentialCreate
- CredentialTemplateCreate
- MachineImageCreate
- NetworkCreate
As part of this patch, all 'create' operations were moved
to these EntityCreate models.
Project: http://git-wip-us.apache.org/repos/asf/deltacloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltacloud/commit/bb6aed45
Tree: http://git-wip-us.apache.org/repos/asf/deltacloud/tree/bb6aed45
Diff: http://git-wip-us.apache.org/repos/asf/deltacloud/diff/bb6aed45
Branch: refs/heads/master
Commit: bb6aed4531459f3ec570e0f1dd43af7516bf011b
Parents: 32b99b7
Author: Michal Fojtik <mf...@redhat.com>
Authored: Mon Feb 11 16:45:37 2013 +0100
Committer: Michal fojtik <mf...@redhat.com>
Committed: Fri Feb 22 11:32:02 2013 +0100
----------------------------------------------------------------------
server/lib/cimi/collections/address_templates.rb | 7 +--
server/lib/cimi/collections/addresses.rb | 7 +--
server/lib/cimi/collections/credentials.rb | 7 +--
server/lib/cimi/collections/machine_images.rb | 3 +-
server/lib/cimi/collections/machine_templates.rb | 2 +-
server/lib/cimi/collections/networks.rb | 7 +--
server/lib/cimi/models.rb | 6 ++-
server/lib/cimi/models/address.rb | 35 +---------
server/lib/cimi/models/address_create.rb | 51 ++++++++++++++
server/lib/cimi/models/address_template.rb | 56 ++--------------
server/lib/cimi/models/address_template_create.rb | 44 ++++++++++++
server/lib/cimi/models/base.rb | 15 ++---
server/lib/cimi/models/credential.rb | 2 +-
server/lib/cimi/models/credential_create.rb | 46 +++++++++++++
server/lib/cimi/models/credential_template.rb | 24 +++++++
server/lib/cimi/models/machine_image.rb | 27 +-------
server/lib/cimi/models/machine_image_create.rb | 41 +++++++++++
server/lib/cimi/models/network.rb | 38 -----------
server/lib/cimi/models/network_create.rb | 41 +++++++++++
server/lib/cimi/models/network_template.rb | 5 +-
server/lib/cimi/models/schema.rb | 1 -
server/support/cimi/address_template.xml | 2 +-
server/support/cimi/credential.json | 10 +++
server/support/cimi/machine_image.xml | 1 -
server/support/cimi/network.json | 9 +++
25 files changed, 303 insertions(+), 184 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/deltacloud/blob/bb6aed45/server/lib/cimi/collections/address_templates.rb
----------------------------------------------------------------------
diff --git a/server/lib/cimi/collections/address_templates.rb b/server/lib/cimi/collections/address_templates.rb
index d1bbe7d..72e167d 100644
--- a/server/lib/cimi/collections/address_templates.rb
+++ b/server/lib/cimi/collections/address_templates.rb
@@ -45,11 +45,8 @@ module CIMI::Collections
operation :create do
description "Create new AddressTemplate"
control do
- if current_content_type == :json
- new_address_template = CIMI::Model::AddressTemplate.create_from_json(request.body.read, self)
- else
- new_address_template = CIMI::Model::AddressTemplate.create_from_xml(request.body.read, self)
- end
+ addr_templ = CIMI::Model::AddressTemplateCreate.parse(request.body, request.content_type)
+ new_address_template = addr_templ.create(self)
headers_for_create new_address_template
respond_to do |format|
format.json { new_address_template.to_json }
http://git-wip-us.apache.org/repos/asf/deltacloud/blob/bb6aed45/server/lib/cimi/collections/addresses.rb
----------------------------------------------------------------------
diff --git a/server/lib/cimi/collections/addresses.rb b/server/lib/cimi/collections/addresses.rb
index 4217da6..c34068d 100644
--- a/server/lib/cimi/collections/addresses.rb
+++ b/server/lib/cimi/collections/addresses.rb
@@ -47,11 +47,8 @@ module CIMI::Collections
operation :create, :with_capability => :create_address do
description "Create a new Address"
control do
- if current_content_type == :json
- address = CIMI::Model::Address.create(request.body.read, self, :json)
- else
- address = CIMI::Model::Address.create(request.body.read, self, :xml)
- end
+ addr = CIMI::Model::AddressCreate.parse(request.body, request.content_type)
+ address = addr.create(self)
respond_to do |format|
format.xml { address.to_xml }
format.json { address.to_json }
http://git-wip-us.apache.org/repos/asf/deltacloud/blob/bb6aed45/server/lib/cimi/collections/credentials.rb
----------------------------------------------------------------------
diff --git a/server/lib/cimi/collections/credentials.rb b/server/lib/cimi/collections/credentials.rb
index fcaf458..8d90be6 100644
--- a/server/lib/cimi/collections/credentials.rb
+++ b/server/lib/cimi/collections/credentials.rb
@@ -46,11 +46,8 @@ module CIMI::Collections
operation :create, :with_capability => :create_key do
description "Show specific machine admin"
control do
- if current_content_type == :json
- new_admin = Credential.create_from_json(request.body.read, self)
- else
- new_admin = Credential.create_from_xml(request.body.read, self)
- end
+ c = CIMI::Model::CredentialCreate.parse(request.body, request.content_type)
+ new_admin = c.create(self)
headers_for_create new_admin
respond_to do |format|
format.json { new_admin.to_json }
http://git-wip-us.apache.org/repos/asf/deltacloud/blob/bb6aed45/server/lib/cimi/collections/machine_images.rb
----------------------------------------------------------------------
diff --git a/server/lib/cimi/collections/machine_images.rb b/server/lib/cimi/collections/machine_images.rb
index 663c651..ee0033c 100644
--- a/server/lib/cimi/collections/machine_images.rb
+++ b/server/lib/cimi/collections/machine_images.rb
@@ -46,7 +46,8 @@ module CIMI::Collections
operation :create, :with_capability => :create_image do
description "Create a new machine image."
control do
- machine_image = CIMI::Model::MachineImage.create(request.body, self)
+ mi = CIMI::Model::MachineImageCreate.parse(request.body, request.content_type)
+ machine_image = mi.create(self)
headers_for_create machine_image
respond_to do |format|
format.xml { machine_image.to_xml }
http://git-wip-us.apache.org/repos/asf/deltacloud/blob/bb6aed45/server/lib/cimi/collections/machine_templates.rb
----------------------------------------------------------------------
diff --git a/server/lib/cimi/collections/machine_templates.rb b/server/lib/cimi/collections/machine_templates.rb
index 8734319..6bdd1f2 100644
--- a/server/lib/cimi/collections/machine_templates.rb
+++ b/server/lib/cimi/collections/machine_templates.rb
@@ -45,7 +45,7 @@ module CIMI::Collections
operation :create do
description "Create new machine template"
control do
- mt = MachineTemplateCreate.parse(request.body, request.content_type)
+ mt = CIMI::Model::MachineTemplateCreate.parse(request.body, request.content_type)
new_machine_template = mt.create(self)
headers_for_create new_machine_template
respond_to do |format|
http://git-wip-us.apache.org/repos/asf/deltacloud/blob/bb6aed45/server/lib/cimi/collections/networks.rb
----------------------------------------------------------------------
diff --git a/server/lib/cimi/collections/networks.rb b/server/lib/cimi/collections/networks.rb
index 16e4c9c..0f32827 100644
--- a/server/lib/cimi/collections/networks.rb
+++ b/server/lib/cimi/collections/networks.rb
@@ -46,11 +46,8 @@ module CIMI::Collections
operation :create, :with_capability => :create_network do
description "Create a new Network"
control do
- if current_content_type == :json
- network = Network.create(request.body.read, self, :json)
- else
- network = Network.create(request.body.read, self, :xml)
- end
+ n = CIMI::Model::NetworkCreate.parse(request.body, request.content_type)
+ network = n.create(self)
respond_to do |format|
format.xml { network.to_xml}
format.json { network.to_json }
http://git-wip-us.apache.org/repos/asf/deltacloud/blob/bb6aed45/server/lib/cimi/models.rb
----------------------------------------------------------------------
diff --git a/server/lib/cimi/models.rb b/server/lib/cimi/models.rb
index dd93e8f..a86d6a9 100644
--- a/server/lib/cimi/models.rb
+++ b/server/lib/cimi/models.rb
@@ -61,6 +61,8 @@ require_relative './models/cloud_entry_point'
CIMI::Model::ResourceMetadata.acts_as_root_entity
require_relative './models/credential'
+require_relative './models/credential_template'
+require_relative './models/credential_create'
require_relative './models/volume'
require_relative './models/volume_template'
require_relative './models/volume_configuration'
@@ -68,17 +70,19 @@ require_relative './models/volume_image'
require_relative './models/machine'
require_relative './models/machine_configuration'
require_relative './models/machine_image'
+require_relative './models/machine_image_create'
require_relative './models/machine_template'
require_relative './models/machine_template_create'
require_relative './models/machine_create'
require_relative './models/network_port'
require_relative './models/network'
-require_relative './models/network_template'
require_relative './models/network_configuration'
require_relative './models/network_port_template'
require_relative './models/network_port_configuration'
require_relative './models/address'
require_relative './models/address_template'
+require_relative './models/address_template_create'
+require_relative './models/address_create'
require_relative './models/forwarding_group'
require_relative './models/forwarding_group_template'
require_relative './models/system_template'
http://git-wip-us.apache.org/repos/asf/deltacloud/blob/bb6aed45/server/lib/cimi/models/address.rb
----------------------------------------------------------------------
diff --git a/server/lib/cimi/models/address.rb b/server/lib/cimi/models/address.rb
index 61d55dd..57e8be1 100644
--- a/server/lib/cimi/models/address.rb
+++ b/server/lib/cimi/models/address.rb
@@ -49,30 +49,6 @@ class CIMI::Model::Address < CIMI::Model::Base
end
end
- def self.create(request_body, context, type)
- input = (type == :xml)? XmlSimple.xml_in(request_body, {"ForceArray"=>false, "NormaliseSpace"=>2}) : JSON.parse(request_body)
- if input['addressTemplate'] and input["addressTemplate"]["href"] #by reference
- address_template = CIMI::Model::AddressTemplate.find(context.href_id(input["addressTemplate"]["href"], :address_templates), context)
- else
- case type
- when :json
- address_template = CIMI::Model::AddressTemplate.from_json(JSON.generate(input["addressTemplate"]))
- when :xml
- xml = XmlSimple.xml_in(request_body, {"NormaliseSpace"=>2})
- address_template = CIMI::Model::AddressTemplate.from_xml(XmlSimple.xml_out(xml["addressTemplate"][0]))
- end
- end
- params = {:name=>input["name"], :description=>input["description"], :address_template=>address_template, :env=>context }
- raise CIMI::Model::BadRequest.new("Bad request - missing required parameters. Client sent: #{request_body} which produced #{params.inspect}") if params.has_value?(nil)
- address = context.driver.create_address(context.credentials, params)
- result = from_address(address, context)
- result.name = input['name'] if input['name']
- result.description = input['description'] if input['description']
- result.extract_properties!(input)
- result.save
- result
- end
-
def self.delete!(id, context)
context.driver.delete_address(context.credentials, id)
new(:id => id).destroy
@@ -86,16 +62,13 @@ class CIMI::Model::Address < CIMI::Model::Base
:id => context.address_url(address.id),
:description => "Address #{address.id}",
:ip => address.id,
- :allocation => "dynamic", #or "static"
- :default_gateway => "unknown", #wtf
- :dns => "unknown", #wtf
+ :allocation => "dynamic",
+ :default_gateway => "unknown",
+ :dns => "unknown",
:protocol => protocol_from_address(address.id),
:mask => "unknown",
:resource => (address.instance_id) ? {:href=> context.machine_url(address.instance_id)} : nil,
- :network => nil #unknown
- #optional:
- #:hostname =>
- #:
+ :network => nil
)
end
http://git-wip-us.apache.org/repos/asf/deltacloud/blob/bb6aed45/server/lib/cimi/models/address_create.rb
----------------------------------------------------------------------
diff --git a/server/lib/cimi/models/address_create.rb b/server/lib/cimi/models/address_create.rb
new file mode 100644
index 0000000..a20613f
--- /dev/null
+++ b/server/lib/cimi/models/address_create.rb
@@ -0,0 +1,51 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership. The
+# ASF licenses this file to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance with the
+# License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+class CIMI::Model::AddressCreate < CIMI::Model::Base
+
+ ref :address_template, :required => true
+
+ def create(context)
+ validate!
+
+ if address_template.href?
+ template = address_template.find(ctx)
+ end
+
+ params = {
+ :name => name,
+ :description => description,
+ :address_template => template,
+ :env => context # FIXME: We should not pass the context to the driver (!)
+ }
+
+ unless context.driver.respond_to? :create_address
+ raise Deltacloud::Exceptions.exception_from_status(
+ 501,
+ "Creating Address is not supported by the current driver"
+ )
+ end
+
+ address = context.driver.create_address(context.credentials, params)
+
+ result = CIMI::Model::Address.from_address(address, context)
+ result.name = name if name
+ result.description = description if description
+ result.property = property if property
+ result.save
+ result
+ end
+
+end
http://git-wip-us.apache.org/repos/asf/deltacloud/blob/bb6aed45/server/lib/cimi/models/address_template.rb
----------------------------------------------------------------------
diff --git a/server/lib/cimi/models/address_template.rb b/server/lib/cimi/models/address_template.rb
index eea4385..143b9dc 100644
--- a/server/lib/cimi/models/address_template.rb
+++ b/server/lib/cimi/models/address_template.rb
@@ -17,20 +17,8 @@ class CIMI::Model::AddressTemplate < CIMI::Model::Base
acts_as_root_entity
- text :ip
-
- text :hostname
-
- text :allocation
-
- text :default_gateway
-
- text :dns
-
- text :protocol
-
- text :mask
-
+ text :ip, :required => true
+ text :hostname, :allocation, :default_gateway, :dns, :protocol, :mask
href :network
array :operations do
@@ -55,41 +43,6 @@ class CIMI::Model::AddressTemplate < CIMI::Model::Base
end
end
- def self.create_from_json(body, context)
- json = JSON.parse(body)
- new_template = current_db.add_address_template(
- :name => json['name'],
- :description => json['description'],
- :hostname => json['hostname'],
- :ip => json['ip'],
- :allocation => json['allocation'],
- :default_gateway => json['default_gateway'],
- :dns => json['dns'],
- :protocol => json['protocol'],
- :mask => json['mask'],
- :ent_properties => json['properties'] ? json['properties'].to_json : {}
- )
- from_db(new_template, context)
- end
-
- def self.create_from_xml(body, context)
- xml = XmlSimple.xml_in(body)
- xml['property'] ||= []
- new_template = current_db.add_address_template(
- :name => xml['name'].first,
- :description => xml['description'].first,
- :ip => xml['ip'].first,
- :hostname => xml['hostname'].first,
- :allocation => xml['allocation'].first,
- :default_gateway => xml['default_gateway'].first,
- :dns => xml['dns'].first,
- :protocol => xml['protocol'].nil? ? nil : xml['protocol'].first,
- :mask => xml['mask'].first,
- :ent_properties => xml['property'] ? JSON::dump(xml['property'].inject({}) { |r, p| r[p['key']]=p['content']; r }) : {}
- )
- from_db(new_template, context)
- end
-
def self.delete!(id, context)
current_db.address_templates.first(:id => id).destroy
end
@@ -110,7 +63,10 @@ class CIMI::Model::AddressTemplate < CIMI::Model::Base
:mask => model.mask,
:property => (model.ent_properties ? JSON::parse(model.ent_properties) : nil),
:operations => [
- { :href => context.destroy_address_template_url(model.id), :rel => 'http://schemas.dmtf.org/cimi/1/action/delete' }
+ {
+ :href => context.destroy_address_template_url(model.id),
+ :rel => 'http://schemas.dmtf.org/cimi/1/action/delete'
+ }
]
)
end
http://git-wip-us.apache.org/repos/asf/deltacloud/blob/bb6aed45/server/lib/cimi/models/address_template_create.rb
----------------------------------------------------------------------
diff --git a/server/lib/cimi/models/address_template_create.rb b/server/lib/cimi/models/address_template_create.rb
new file mode 100644
index 0000000..e9ce3d3
--- /dev/null
+++ b/server/lib/cimi/models/address_template_create.rb
@@ -0,0 +1,44 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership. The
+# ASF licenses this file to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance with the
+# License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+class CIMI::Model::AddressTemplateCreate < CIMI::Model::Base
+
+ text :ip, :required => true
+ text :hostname, :required => true
+ text :allocation, :required => true
+ text :default_gateway, :required => true
+ text :dns, :required => true
+ text :protocol, :required => true
+ text :mask, :required => true
+
+ href :network
+
+ def create(context)
+ validate!
+ new_template = context.current_db.add_address_template(
+ :name => name,
+ :description => description,
+ :hostname => hostname,
+ :ip => ip,
+ :allocation => allocation,
+ :default_gateway => default_gateway,
+ :dns => dns,
+ :protocol => protocol,
+ :mask => mask,
+ :ent_properties => property.to_json
+ )
+ CIMI::Model::AddressTemplate.from_db(new_template, context)
+ end
+end
http://git-wip-us.apache.org/repos/asf/deltacloud/blob/bb6aed45/server/lib/cimi/models/base.rb
----------------------------------------------------------------------
diff --git a/server/lib/cimi/models/base.rb b/server/lib/cimi/models/base.rb
index a9264ef..2e3351d 100644
--- a/server/lib/cimi/models/base.rb
+++ b/server/lib/cimi/models/base.rb
@@ -81,7 +81,7 @@ module CIMI::Model
class ValidationError < StandardError
def initialize(attr_list, format)
- @lst = attr_list.map { |a| a.send("#{format}_name") }
+ @lst = attr_list
super("Required attributes not set: #{name}")
end
@@ -142,15 +142,10 @@ module CIMI::Model
end
def validate!(format=:xml)
- failed_attrs = []
- self.class.required_attributes.each do |attr|
- unless attr.valid?(send(attr.name))
- failed_attrs << attr
- end
- end
- unless failed_attrs.empty?
- raise CIMI::Model::ValidationError.new(failed_attrs, format)
- end
+ failed_attrs = self.class.required_attributes.map do |attr|
+ attr.send("#{format}_name") unless attr.valid?(send(attr.name))
+ end.compact
+ raise CIMI::Model::ValidationError.new(failed_attrs, format) unless failed_attrs.empty?
end
# FIXME: Kludge around the fact that we do not have proper *Create
http://git-wip-us.apache.org/repos/asf/deltacloud/blob/bb6aed45/server/lib/cimi/models/credential.rb
----------------------------------------------------------------------
diff --git a/server/lib/cimi/models/credential.rb b/server/lib/cimi/models/credential.rb
index f363d06..872248f 100644
--- a/server/lib/cimi/models/credential.rb
+++ b/server/lib/cimi/models/credential.rb
@@ -17,7 +17,7 @@ class CIMI::Model::Credential < CIMI::Model::Base
acts_as_root_entity
- text :username
+ text :username, :password, :key
text :password
text :key
http://git-wip-us.apache.org/repos/asf/deltacloud/blob/bb6aed45/server/lib/cimi/models/credential_create.rb
----------------------------------------------------------------------
diff --git a/server/lib/cimi/models/credential_create.rb b/server/lib/cimi/models/credential_create.rb
new file mode 100644
index 0000000..6479769
--- /dev/null
+++ b/server/lib/cimi/models/credential_create.rb
@@ -0,0 +1,46 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership. The
+# ASF licenses this file to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance with the
+# License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+class CIMI::Model::CredentialCreate < CIMI::Model::Base
+
+ ref :credential_template, :required => true
+
+ def create(context)
+ validate!
+
+ unless context.driver.respond_to? :create_key
+ raise Deltacloud::Exceptions.exception_from_status(
+ 501,
+ "Creating Credential is not supported by the current driver"
+ )
+ end
+
+ if credential_template.href?
+ template = credential_template.find(ctx)
+ else
+ template = credential_template
+ end
+
+ key = context.driver.create_key(context.credentials, :key_name => name)
+
+ result = CIMI::Model::Credential.from_key(key, context)
+ result.name = name if name
+ result.description = description if description
+ result.property = property if property
+ result.save
+ result
+
+ end
+end
http://git-wip-us.apache.org/repos/asf/deltacloud/blob/bb6aed45/server/lib/cimi/models/credential_template.rb
----------------------------------------------------------------------
diff --git a/server/lib/cimi/models/credential_template.rb b/server/lib/cimi/models/credential_template.rb
new file mode 100644
index 0000000..1148c42
--- /dev/null
+++ b/server/lib/cimi/models/credential_template.rb
@@ -0,0 +1,24 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership. The
+# ASF licenses this file to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance with the
+# License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+class CIMI::Model::CredentialTemplate < CIMI::Model::Base
+
+ text :username, :required => true
+ text :password, :required => true
+ text :key, :required => true
+
+ # TODO: tbd
+
+end
http://git-wip-us.apache.org/repos/asf/deltacloud/blob/bb6aed45/server/lib/cimi/models/machine_image.rb
----------------------------------------------------------------------
diff --git a/server/lib/cimi/models/machine_image.rb b/server/lib/cimi/models/machine_image.rb
index a44a721..74f48ef 100644
--- a/server/lib/cimi/models/machine_image.rb
+++ b/server/lib/cimi/models/machine_image.rb
@@ -44,34 +44,11 @@ class CIMI::Model::MachineImage < CIMI::Model::Base
:description => image.description,
:state => image.state || 'UNKNOWN',
:type => "IMAGE",
- :created => image.creation_time.nil? ? Time.now.xmlschema : Time.parse(image.creation_time.to_s).xmlschema
+ :created => image.creation_time.nil? ?
+ Time.now.xmlschema : Time.parse(image.creation_time.to_s).xmlschema
)
end
- def self.create(request_body, context)
- # The 'imageLocation' attribute is mandatory in CIMI, however in Deltacloud
- # there is no way how to figure out from what Machine the MachineImage was
- # created from. For that we need to store this attribute in properties.
- #
- if context.current_content_type == :xml
- input = XmlSimple.xml_in(request_body.read, {"ForceArray"=>false,"NormaliseSpace"=>2})
- raise 'imageLocation attribute is mandatory' unless input['imageLocation']
- input['property'] ||= {}
- else
- input = JSON.parse(request_body.read)
- raise 'imageLocation attribute is mandatory' unless input['imageLocation']
- input['properties'] ||= []
- end
- params = {:id => context.href_id(input["imageLocation"], :machines), :name=>input["name"], :description=>input["description"]}
- image = context.driver.create_image(context.credentials, params)
- result = from_image(image, context)
- result.name = input['name'] if input['name']
- result.description = input['description'] if input['description']
- result.extract_properties!(input)
- result.save
- result
- end
-
def self.delete!(image_id, context)
context.driver.destroy_image(context.credentials, image_id)
new(:id => image_id).destroy
http://git-wip-us.apache.org/repos/asf/deltacloud/blob/bb6aed45/server/lib/cimi/models/machine_image_create.rb
----------------------------------------------------------------------
diff --git a/server/lib/cimi/models/machine_image_create.rb b/server/lib/cimi/models/machine_image_create.rb
new file mode 100644
index 0000000..365d640
--- /dev/null
+++ b/server/lib/cimi/models/machine_image_create.rb
@@ -0,0 +1,41 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership. The
+# ASF licenses this file to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance with the
+# License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+class CIMI::Model::MachineImageCreate < CIMI::Model::Base
+
+ text :type, :required => true
+ text :image_location, :required => true
+ href :related_image
+
+ def create(context)
+ validate!
+
+ params = {
+ :id => context.href_id(image_location, :machines),
+ :name => name,
+ :description => description
+ }
+
+ img = context.driver.create_image(context.credentials, params)
+
+ result = CIMI::Model::MachineImage.from_image(img, context)
+ result.name = name if name
+ result.description = description if description
+ result.property = property if property
+ result.save
+ result
+ end
+
+end
http://git-wip-us.apache.org/repos/asf/deltacloud/blob/bb6aed45/server/lib/cimi/models/network.rb
----------------------------------------------------------------------
diff --git a/server/lib/cimi/models/network.rb b/server/lib/cimi/models/network.rb
index e9d133f..789e83f 100644
--- a/server/lib/cimi/models/network.rb
+++ b/server/lib/cimi/models/network.rb
@@ -52,25 +52,6 @@ class CIMI::Model::Network < CIMI::Model::Base
networks
end
- def self.create(request_body, context, type)
- input = (type == :xml)? XmlSimple.xml_in(request_body, {"ForceArray"=>false,"NormaliseSpace"=>2}) : JSON.parse(request_body)
- if input["networkTemplate"]["href"] #template by reference
- network_config, forwarding_group = get_by_reference(input, context)
- else
- if input["networkTemplate"]["networkConfig"]["href"] # configuration by reference
- network_config = CIMI::Model::NetworkConfiguration.find(context.href_id(input["networkTemplate"]["networkConfig"]["href"],
- :network_configurations), context)
- else #configuration by value
- network_config = get_by_value(request_body, type)
- end
- forwarding_group = CIMI::Model::ForwardingGroup.find(context.href_id(input["networkTemplate"]["forwardingGroup"]["href"],
- :forwarding_groups), context)
- end
- params = {:network_config => network_config, :forwarding_group => forwarding_group, :name=>input["name"],
- :description=>input["description"], :env=>context}
- raise CIMI::Model::BadRequest.new("Bad request - missing required parameters. Client sent: #{request_body} which produced #{params.inspect}") if params.has_value?(nil)
- context.driver.create_network(context.credentials, params)
- end
def self.delete!(id, context)
context.driver.delete_network(context.credentials, id)
@@ -88,23 +69,4 @@ class CIMI::Model::Network < CIMI::Model::Base
end
end
- private
-
- def self.get_by_reference(input, context)
- network_template = CIMI::Model::NetworkTemplate.find(context.href_id(input["networkTemplate"]["href"], :network_templates), context)
- network_config = CIMI::Model::NetworkConfiguration.find(context.href_id(network_template.network_config.href, :network_configurations), context)
- forwarding_group = CIMI::Model::ForwardingGroup.find(context.href_id(network_template.forwarding_group.href, :forwarding_groups), context)
- return network_config, forwarding_group
- end
-
- def self.get_by_value(request_body, type)
- if type == :xml
- xml_arrays = XmlSimple.xml_in(request_body, {"NormaliseSpace"=>2})
- network_config = CIMI::Model::NetworkConfiguration.from_xml(XmlSimple.xml_out(xml_arrays["networkTemplate"][0]["networkConfig"][0]))
- else
- json = JSON.parse(request_body)
- network_config = CIMI::Model::NetworkConfiguration.from_json(JSON.generate(json["networkTemplate"]["networkConfig"]))
- end
- end
-
end
http://git-wip-us.apache.org/repos/asf/deltacloud/blob/bb6aed45/server/lib/cimi/models/network_create.rb
----------------------------------------------------------------------
diff --git a/server/lib/cimi/models/network_create.rb b/server/lib/cimi/models/network_create.rb
new file mode 100644
index 0000000..006a064
--- /dev/null
+++ b/server/lib/cimi/models/network_create.rb
@@ -0,0 +1,41 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership. The
+# ASF licenses this file to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance with the
+# License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+class CIMI::Model::Network < CIMI::Model::Base
+
+ ref :network_template, :required => true
+
+ def create(context)
+ validate!
+
+ if network_template.href?
+ template = network_template.find(context)
+ end
+
+ params = {
+ :network_config => template.network_config.find(context),
+ :forwarding_group => template.forwarding_group.find(context),
+ :name => name,
+ :description => description,
+ :env => context # FIXME: We should not pass the context to the driver (!)
+ }
+
+ network = context.driver.create_network(context.credentials, params)
+ network.property = property if property
+ network.save
+ network
+ end
+
+end
http://git-wip-us.apache.org/repos/asf/deltacloud/blob/bb6aed45/server/lib/cimi/models/network_template.rb
----------------------------------------------------------------------
diff --git a/server/lib/cimi/models/network_template.rb b/server/lib/cimi/models/network_template.rb
index 09eadd0..a16c094 100644
--- a/server/lib/cimi/models/network_template.rb
+++ b/server/lib/cimi/models/network_template.rb
@@ -17,9 +17,8 @@ class CIMI::Model::NetworkTemplate < CIMI::Model::Base
acts_as_root_entity
- href :network_config
-
- href :forwarding_group
+ ref :network_config, :required => true
+ ref :forwarding_group, :required => true
array :operations do
scalar :rel, :href
http://git-wip-us.apache.org/repos/asf/deltacloud/blob/bb6aed45/server/lib/cimi/models/schema.rb
----------------------------------------------------------------------
diff --git a/server/lib/cimi/models/schema.rb b/server/lib/cimi/models/schema.rb
index 39f4a13..215ebfc 100644
--- a/server/lib/cimi/models/schema.rb
+++ b/server/lib/cimi/models/schema.rb
@@ -217,7 +217,6 @@ class CIMI::Model::Schema
a.valid?(value.send(a.name))
}
end
-
end
class Array < Attribute
http://git-wip-us.apache.org/repos/asf/deltacloud/blob/bb6aed45/server/support/cimi/address_template.xml
----------------------------------------------------------------------
diff --git a/server/support/cimi/address_template.xml b/server/support/cimi/address_template.xml
index 828c47c..8762627 100644
--- a/server/support/cimi/address_template.xml
+++ b/server/support/cimi/address_template.xml
@@ -3,7 +3,7 @@
<ip>10.0.0.1</ip>
<hostname>my-example.hostname.com</hostname>
<allocation>static</allocation>
- <default_gateway>10.0.0.250</default_gateway>
+ <defaultGateway>10.0.0.250</defaultGateway>
<dns>8.8.8.8</dns>
<mask>255.255.255.0</mask>
<protocol>ipv4</protocol>
http://git-wip-us.apache.org/repos/asf/deltacloud/blob/bb6aed45/server/support/cimi/credential.json
----------------------------------------------------------------------
diff --git a/server/support/cimi/credential.json b/server/support/cimi/credential.json
new file mode 100644
index 0000000..b884915
--- /dev/null
+++ b/server/support/cimi/credential.json
@@ -0,0 +1,10 @@
+{
+ "resourceURI": "http://schemas.dmtf.org/cimi/1/CredentialCreate",
+ "name": "myCredential",
+ "description": "A super secret credential",
+ "credentialTemplate": {
+ "username" : "mockuser",
+ "password" : "mockpassword",
+ "key" : "testkey"
+ }
+}
http://git-wip-us.apache.org/repos/asf/deltacloud/blob/bb6aed45/server/support/cimi/machine_image.xml
----------------------------------------------------------------------
diff --git a/server/support/cimi/machine_image.xml b/server/support/cimi/machine_image.xml
index 8ec28a6..e00f2b1 100644
--- a/server/support/cimi/machine_image.xml
+++ b/server/support/cimi/machine_image.xml
@@ -3,5 +3,4 @@
<description>Description of my new Machine</description>
<type>IMAGE</type>
<imageLocation>http://localhost:3001/cimi/machines/inst1</imageLocation>
- <property key="test_image">image_value</property>
</MachineImageCreate>
http://git-wip-us.apache.org/repos/asf/deltacloud/blob/bb6aed45/server/support/cimi/network.json
----------------------------------------------------------------------
diff --git a/server/support/cimi/network.json b/server/support/cimi/network.json
new file mode 100644
index 0000000..8d48cd6
--- /dev/null
+++ b/server/support/cimi/network.json
@@ -0,0 +1,9 @@
+{
+ "resourceURI": "http://schemas.dmtf.org/cimi/1/NetworkCreate",
+ "name": "myAwesomeNetwork",
+ "description": "Sample network description",
+ "networkTemplate": {
+ "networkConfig" : { 'href' => 'http://localhost:3001/cimi/network_configurations/network_config1' }
+ "forwardingGroup" : { 'href' => 'http://localhost:3001/cimi/forwarding_groups/group1' }
+ }
+}