occi 2.0.6 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. data/.gitignore +1 -0
  2. data/.yardopts +1 -1
  3. data/Gemfile +3 -20
  4. data/Gemfile.lock +10 -59
  5. data/README.md +64 -2
  6. data/etc/model/infrastructure/compute.json +115 -0
  7. data/etc/model/infrastructure/ipnetwork.json +43 -0
  8. data/etc/model/infrastructure/ipnetworkinterface.json +43 -0
  9. data/etc/model/infrastructure/network.json +56 -0
  10. data/etc/model/infrastructure/networkinterface.json +40 -0
  11. data/etc/model/infrastructure/os_template.json +9 -0
  12. data/etc/model/infrastructure/resource_template.json +9 -0
  13. data/etc/model/infrastructure/storage.json +75 -0
  14. data/etc/model/infrastructure/storagelink.json +38 -0
  15. data/lib/occi/collection.rb +34 -0
  16. data/lib/occi/core/action.rb +0 -21
  17. data/lib/occi/core/attribute_properties.rb +0 -21
  18. data/lib/occi/core/attributes.rb +1 -20
  19. data/lib/occi/core/category.rb +0 -21
  20. data/lib/occi/core/entity.rb +7 -28
  21. data/lib/occi/core/kind.rb +1 -22
  22. data/lib/occi/core/link.rb +3 -23
  23. data/lib/occi/core/mixin.rb +0 -22
  24. data/lib/occi/core/resource.rb +3 -24
  25. data/lib/occi/log.rb +24 -22
  26. data/lib/occi/model.rb +102 -0
  27. data/lib/occi/{parse.rb → parser.rb} +73 -56
  28. data/lib/occi/version.rb +1 -1
  29. data/lib/occi.rb +17 -17
  30. data/lib/{occi/antlr → occiantlr}/.gitignore +0 -0
  31. data/lib/{occi/antlr/OCCI.g → occiantlr/OCCIANTLR.g} +17 -50
  32. data/lib/{occi/antlr/OCCI.tokens → occiantlr/OCCIANTLR.tokens} +4 -2
  33. data/lib/{occi/antlr/OCCILexer.rb → occiantlr/OCCIANTLRLexer.rb} +597 -555
  34. data/lib/occiantlr/OCCIANTLRParser.rb +2232 -0
  35. data/lib/{occi/antlr → occiantlr}/README.md +0 -0
  36. data/occi.gemspec +3 -0
  37. data/spec/occi/collection_spec.rb +19 -0
  38. data/spec/occi/log_spec.rb +16 -0
  39. data/spec/occi/model_spec.rb +26 -0
  40. data/spec/occi/parser_spec.rb +12 -0
  41. data/spec/occiantlr/parser_spec.rb +84 -0
  42. metadata +78 -14
  43. data/lib/occi/antlr/OCCIParser.rb +0 -2472
  44. data/lib/occi/core/collection.rb +0 -27
  45. data/lib/occi/exceptions.rb +0 -59
  46. data/lib/occi/registry.rb +0 -87
  47. data/spec/occi/antlr/parser_spec.rb +0 -82
@@ -1,27 +0,0 @@
1
- module OCCI
2
- module Core
3
- class Collection
4
- attr_accessor :kinds
5
- attr_accessor :mixins
6
- attr_accessor :actions
7
- attr_accessor :resources
8
- attr_accessor :links
9
-
10
- def initialize(kinds=[], mixins=[], actions=[], resources=[], links=[])
11
- @kinds = kinds
12
- @mixins = mixins
13
- @actions = actions
14
- @resources = resources
15
- @links = links
16
- end
17
-
18
- def categories
19
- @kinds + @mixins + @actions
20
- end
21
-
22
- def entities
23
- @resources + @links
24
- end
25
- end
26
- end
27
- end
@@ -1,59 +0,0 @@
1
- ##############################################################################
2
- # Copyright 2011 Service Computing group, TU Dortmund
3
- #
4
- # Licensed under the Apache License, Version 2.0 (the "License");
5
- # you may not use this file except in compliance with the License.
6
- # You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- # Unless required by applicable law or agreed to in writing, software
11
- # distributed under the License is distributed on an "AS IS" BASIS,
12
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- # See the License for the specific language governing permissions and
14
- # limitations under the License.
15
- ##############################################################################
16
-
17
- ##############################################################################
18
- # Description: registry for all Category/Kind/Mixin instances currently
19
- # known to the OCCI server
20
- # Author(s): Hayati Bice, Florian Feldhaus, Piotr Kasprzak
21
- ##############################################################################
22
-
23
- module OCCI
24
-
25
- # Tried to create an already existing mixin
26
- class MixinAlreadyExistsError < RuntimeError;
27
- end
28
-
29
- class CategoryNotFoundException < RuntimeError;
30
- end
31
-
32
- class CategoryMissingException < RuntimeError;
33
- end
34
-
35
- class MixinNotFoundException < RuntimeError;
36
- end
37
-
38
- class MixinCreationException < RuntimeError;
39
- end
40
-
41
- class LocationAlreadyRegisteredException < RuntimeError;
42
- end
43
-
44
- class LocationNotRegisteredException < RuntimeError;
45
- end
46
-
47
- # Tried to create an already existing mixin
48
- class BackendError < RuntimeError;
49
- end
50
-
51
- class ParserException < RuntimeError;
52
- end
53
-
54
- class ContentTypeNotSupported < RuntimeError;
55
- end
56
-
57
- class CategoryNotFound < RuntimeError;
58
- end
59
- end
data/lib/occi/registry.rb DELETED
@@ -1,87 +0,0 @@
1
- ##############################################################################
2
- # Copyright 2011 Service Computing group, TU Dortmund
3
- #
4
- # Licensed under the Apache License, Version 2.0 (the "License");
5
- # you may not use this file except in compliance with the License.
6
- # You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- # Unless required by applicable law or agreed to in writing, software
11
- # distributed under the License is distributed on an "AS IS" BASIS,
12
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- # See the License for the specific language governing permissions and
14
- # limitations under the License.
15
- ##############################################################################
16
-
17
- ##############################################################################
18
- # Description: registry for all Category/Kind/Mixin instances currently
19
- # known to the OCCI server
20
- # Author(s): Hayati Bice, Florian Feldhaus, Piotr Kasprzak
21
- ##############################################################################
22
-
23
- require 'occi/log'
24
-
25
- module OCCI
26
- # ---------------------------------------------------------------------------------------------------------------------
27
- module Registry
28
-
29
- @@categories = {}
30
- @@locations = {}
31
-
32
- def self.reset()
33
- @@categories.each_value.each {|category| category.entities = [] if category.entities}
34
- end
35
-
36
- # ---------------------------------------------------------------------------------------------------------------------
37
- def self.register(category)
38
- OCCI::Log.debug("### Registering category #{category.type_identifier}")
39
- @@categories[category.type_identifier] = category
40
- @@locations[category.location] = category.type_identifier unless category.kind_of?(OCCI::Core::Action)
41
- end
42
-
43
- # ---------------------------------------------------------------------------------------------------------------------
44
- def self.unregister(category)
45
- OCCI::Log.debug("### Unregistering category #{category.type_identifier}")
46
- @@categories.delete(category.type_identifier)
47
- @@locations.delete(category.location) unless category.kind_of?(OCCI :Core::Action)
48
- end
49
-
50
- # Returns the category corresponding to a given type identifier
51
- #
52
- # @param [URI] type identifier of a category
53
- def self.get_by_id(id)
54
- @@categories.fetch(id) { OCCI::Log.debug("Category with id #{id} not found"); nil }
55
- end
56
-
57
- # Returns the category corresponding to a given location
58
- #
59
- # @param [URI] Location of a category
60
- def self.get_by_location(location)
61
- id = @@locations.fetch(location) { OCCI::Log.debug("Category with location #{location} not found"); nil }
62
- self.get_by_id(id)
63
- end
64
-
65
- # Return all categories from category registry. If filter is present, return only the categories specified by filter
66
- #
67
- # @param [Hashie:Hash] filter
68
- # @return [Hashie::Mash] collection
69
- def self.get(filter = [])
70
- collection = Hashie::Mash.new({:kinds => [], :mixins => [], :actions => []})
71
- filter.each do |cat|
72
- category = get_by_id(cat.type_identifier)
73
- collection.kinds << category if category.kind_of?(OCCI::Core::Kind)
74
- collection.mixins << category if category.kind_of?(OCCI::Core::Mixin)
75
- collection.actions << category if category.kind_of?(OCCI::Core::Action)
76
- end
77
- if filter.empty?
78
- @@categories.each_value do |category|
79
- collection.kinds << category if category.kind_of? OCCI::Core::Kind
80
- collection.mixins << category if category.kind_of? OCCI::Core::Mixin
81
- collection.actions << category if category.kind_of? OCCI::Core::Action
82
- end
83
- end
84
- return collection
85
- end
86
- end
87
- end
@@ -1,82 +0,0 @@
1
- require 'rspec'
2
- require 'hashie'
3
-
4
- require 'occi/antlr/OCCIParser'
5
-
6
- module OCCI
7
- describe Parser do
8
- describe "#Category" do
9
- it "is parsed successful" do
10
- ATTRIBUTE = {:mutable => true, :required => false, :type => {:string => {}}, :default => ''}
11
- term = 'entity'
12
- scheme = 'http://schemas.ogf.org/occi/core#'
13
- class_type = 'kind'
14
- title = 'Storage Resource How\'s your quotes escaping?\"'
15
- rel = 'http://schemas.ogf.org/occi/core#resource'
16
- location = '/storage/'
17
- attributes = Hashie::Mash.new
18
- attributes.occi!.storage!.size = ATTRIBUTE
19
- attributes.occi!.storage!.state = ATTRIBUTE
20
- attributes_string = 'occi.storage.size occi.storage.state'
21
- actions = Array.new
22
- actions << 'http://schemas.ogf.org/occi/infrastructure/storage/action#resize'
23
- actions << 'http://schemas.ogf.org/occi/infrastructure/storage/action#online'
24
-
25
- category_string = %Q{Category: #{term}; scheme="#{scheme}"; class="#{class_type}"; title="#{title}"; rel="#{rel}"; location="#{location}"; attributes="#{attributes_string}"; actions="#{actions.join(' ')}"}
26
-
27
- category = Parser.new(category_string).category
28
- kind = category[:kinds].first
29
- kind[:term].should == term
30
- kind[:scheme].should == scheme
31
- kind[:title].should == title
32
- kind[:related].should == rel
33
- kind[:location].should == location
34
- kind[:attributes].should == attributes
35
- kind[:actions].should == actions
36
- end
37
- end
38
-
39
- describe "#Link" do
40
- it "is parsed successful" do
41
- target = '/network/123'
42
- rel = 'http://schemas.ogf.org/occi/infrastructure#network'
43
- self_location = '/link/networkinterface/456'
44
- category = 'http://schemas.ogf.org/occi/infrastructure#networkinterface'
45
- attributes = Hashie::Mash.new
46
- attributes.occi!.networkinterface!.interface = '"eth0"'
47
- attributes.occi!.networkinterface!.mac = '"00:11:22:33:44:55"'
48
- attributes.occi!.networkinterface!.state = '"active"'
49
- attributes_string = %Q{occi.networkinterface.interface="eth0";occi.networkinterface.mac="00:11:22:33:44:55";occi.networkinterface.state="active"}
50
- link_string = %Q{Link: <#{target}>; rel="#{rel}"; self="#{self_location}"; category="#{category}"; #{attributes_string}}
51
-
52
- link = OCCI::Parser.new(link_string).link
53
- link[:target].should == target
54
- link[:rel].should == rel
55
- link[:self].should == self_location
56
- link[:category].should == category
57
- link[:attributes].should == attributes
58
- end
59
- end
60
-
61
- describe "#X-OCCI-Attribute" do
62
- it "is parsed successful" do
63
- attribute = Hashie::Mash.new
64
- attribute.occi!.compute!.architecture = '"x86_64"'
65
-
66
- x_occi_attributes_string = %Q{X-OCCI-Attribute: occi.compute.architecture="x86_64"}
67
-
68
- x_occi_attribute = OCCI::Parser.new(x_occi_attributes_string).x_occi_attribute
69
- x_occi_attribute.should == attribute
70
- end
71
- end
72
-
73
- describe "#X-OCCI-Location" do
74
- it "is parsed successful" do
75
- location = URI.parse('http://example.com/compute/123')
76
- location_string = %Q{X-OCCI-Location: #{location.to_s}}
77
- x_occi_location = OCCI::Parser.new(location_string).x_occi_location
78
- x_occi_location.should == location
79
- end
80
- end
81
- end
82
- end