occi 1.2.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. data/.gitignore +9 -0
  2. data/.project +32 -0
  3. data/.rspec +1 -0
  4. data/.travis.yml +8 -0
  5. data/.yardopts +1 -0
  6. data/AUTHORS +8 -0
  7. data/Gemfile +35 -14
  8. data/Gemfile.lock +89 -32
  9. data/LICENSE +13 -4
  10. data/README.md +70 -21
  11. data/Rakefile +25 -21
  12. data/lib/OpenNebula/Acl.rb +256 -0
  13. data/lib/OpenNebula/AclPool.rb +53 -0
  14. data/lib/OpenNebula/Group.rb +147 -0
  15. data/lib/OpenNebula/GroupPool.rb +54 -0
  16. data/lib/OpenNebula/Host.rb +143 -0
  17. data/lib/OpenNebula/HostPool.rb +55 -0
  18. data/lib/OpenNebula/Image.rb +256 -0
  19. data/lib/OpenNebula/ImagePool.rb +74 -0
  20. data/lib/OpenNebula/OpenNebula.rb +137 -0
  21. data/lib/OpenNebula/Pool.rb +285 -0
  22. data/lib/OpenNebula/Template.rb +173 -0
  23. data/lib/OpenNebula/TemplatePool.rb +74 -0
  24. data/lib/OpenNebula/User.rb +157 -0
  25. data/lib/OpenNebula/UserPool.rb +53 -0
  26. data/lib/OpenNebula/VirtualMachine.rb +319 -0
  27. data/lib/OpenNebula/VirtualMachinePool.rb +120 -0
  28. data/lib/OpenNebula/VirtualNetwork.rb +229 -0
  29. data/lib/OpenNebula/VirtualNetworkPool.rb +74 -0
  30. data/lib/OpenNebula/XMLUtils.rb +337 -0
  31. data/lib/occi/antlr/.gitignore +18 -0
  32. data/lib/occi/antlr/OCCI.g +164 -0
  33. data/lib/occi/antlr/OCCI.tokens +75 -0
  34. data/lib/occi/antlr/OCCILexer.rb +1532 -0
  35. data/lib/occi/antlr/OCCIParser.rb +2472 -0
  36. data/lib/occi/antlr/README.md +2 -0
  37. data/lib/occi/backend/dummy.rb +232 -0
  38. data/lib/occi/backend/ec2/Compute.rb +310 -0
  39. data/lib/occi/backend/ec2/compute.rb +310 -0
  40. data/lib/occi/backend/ec2/ec2.rb +215 -0
  41. data/lib/occi/backend/manager.rb +131 -0
  42. data/lib/occi/backend/opennebula/compute.rb +360 -0
  43. data/lib/occi/backend/opennebula/network.rb +143 -0
  44. data/lib/occi/backend/opennebula/opennebula.rb +188 -0
  45. data/lib/occi/backend/opennebula/storage.rb +175 -0
  46. data/lib/occi/configuration.rb +118 -0
  47. data/lib/occi/core/action.rb +29 -0
  48. data/lib/occi/core/attribute_properties.rb +54 -0
  49. data/lib/occi/core/attributes.rb +40 -0
  50. data/lib/occi/core/category.rb +62 -0
  51. data/lib/occi/core/collection.rb +27 -0
  52. data/lib/occi/core/entity.rb +135 -0
  53. data/lib/occi/core/kind.rb +55 -0
  54. data/lib/occi/core/link.rb +88 -0
  55. data/lib/occi/core/mixin.rb +43 -0
  56. data/lib/occi/core/resource.rb +73 -0
  57. data/lib/occi/exceptions.rb +59 -0
  58. data/lib/occi/extensions/monitoring/cpu.rb +51 -0
  59. data/lib/occi/extensions/monitoring/memory.rb +49 -0
  60. data/lib/occi/extensions/monitoring/metric.rb +54 -0
  61. data/lib/occi/extensions/monitoring/netrx.rb +49 -0
  62. data/lib/occi/extensions/monitoring/nettx.rb +55 -0
  63. data/lib/occi/extensions/one/VNC.rb +58 -0
  64. data/lib/occi/extensions/one/vnc.rb +58 -0
  65. data/lib/occi/log.rb +47 -0
  66. data/lib/occi/parse.rb +164 -0
  67. data/lib/occi/registry.rb +87 -0
  68. data/lib/occi/server.rb +594 -0
  69. data/lib/occi/version.rb +3 -0
  70. data/occi.gemspec +18 -96
  71. data/spec/occi/antlr/parser_spec.rb +82 -0
  72. data/spec/spec_helper.rb +6 -0
  73. metadata +100 -208
  74. data/.autotest +0 -21
  75. data/.rvmrc +0 -1
  76. data/VERSION +0 -1
  77. data/lib/occi.rb +0 -1
  78. data/lib/occi/client.rb +0 -36
  79. data/lib/occi/compute.rb +0 -4
  80. data/lib/occi/network.rb +0 -4
  81. data/lib/occi/resource.rb +0 -59
  82. data/lib/occi/storage.rb +0 -7
  83. data/test/fixtures/cassettes/compute_all.yml +0 -28
  84. data/test/fixtures/cassettes/compute_create.yml +0 -45
  85. data/test/fixtures/cassettes/compute_destroy.yml +0 -22
  86. data/test/fixtures/cassettes/compute_find.yml +0 -28
  87. data/test/fixtures/cassettes/compute_update.yml +0 -35
  88. data/test/fixtures/cassettes/network_all.yml +0 -28
  89. data/test/fixtures/cassettes/network_create.yml +0 -37
  90. data/test/fixtures/cassettes/network_destroy.yml +0 -22
  91. data/test/fixtures/cassettes/network_find.yml +0 -28
  92. data/test/fixtures/cassettes/storage_all.yml +0 -28
  93. data/test/fixtures/cassettes/storage_create.yml +0 -50
  94. data/test/fixtures/cassettes/storage_destroy.yml +0 -22
  95. data/test/fixtures/cassettes/storage_find.yml +0 -28
  96. data/test/lib/occi/compute_test.rb +0 -91
  97. data/test/lib/occi/network_test.rb +0 -57
  98. data/test/lib/occi/storage_test.rb +0 -67
  99. data/test/test_helper.rb +0 -48
@@ -0,0 +1,55 @@
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: OCCI Core Kind
19
+ # Author(s): Hayati Bice, Florian Feldhaus, Piotr Kasprzak
20
+ ##############################################################################
21
+
22
+ require 'json'
23
+ require 'occi/core/category'
24
+ require 'occi/core/action'
25
+ require 'occi/core/attribute_properties'
26
+
27
+ module OCCI
28
+ module Core
29
+ class Kind < OCCI::Core::Category
30
+
31
+ attr_accessor :entities
32
+
33
+ def initialize(kind, default = nil)
34
+ @entities = []
35
+ super(kind, default)
36
+ end
37
+
38
+ def entity_type
39
+ case type_identifier
40
+ when "http://schemas.ogf.org/occi/core#resource"
41
+ return OCCI::Core::Resource.name
42
+ when "http://schemas.ogf.org/occi/core#link"
43
+ return OCCI::Core::Link.name
44
+ else
45
+ OCCI::Registry.get_by_id(self[:related].first).entity_type unless self[:term] == 'entity'
46
+ end
47
+ end
48
+
49
+ def location
50
+ '/' + self[:term] + '/'
51
+ end
52
+
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,88 @@
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: OCCI Core Link
19
+ # Author(s): Hayati Bice, Florian Feldhaus, Piotr Kasprzak
20
+ ##############################################################################
21
+
22
+ require 'occi/core/entity'
23
+ require 'occi/core/kind'
24
+ require 'hashie'
25
+
26
+ module OCCI
27
+ module Core
28
+ class Link < Entity
29
+
30
+ # Define appropriate kind
31
+ def self.register
32
+ data = Hashie::Mash.new
33
+ data[:actions] = []
34
+ data[:related] = %w{http://schemas.ogf.org/occi/core#entity}
35
+ data[:term] = "link"
36
+ data[:scheme] = "http://schemas.ogf.org/occi/core#"
37
+ data[:title] = "Link"
38
+
39
+ data.attributes!.occi!.core!.target!.type = "string"
40
+ data.attributes!.occi!.core!.target!.pattern = ".*"
41
+ data.attributes!.occi!.core!.target!.required = false
42
+ data.attributes!.occi!.core!.target!.mutable = true
43
+
44
+ data.attributes!.occi!.core!.source!.type = "string"
45
+ data.attributes!.occi!.core!.source!.pattern = ".*"
46
+ data.attributes!.occi!.core!.source!.required = false
47
+ data.attributes!.occi!.core!.source!.mutable = true
48
+
49
+ kind = OCCI::Core::Kind.new(data)
50
+ OCCI::Registry.register(kind)
51
+ end
52
+
53
+ def target
54
+ return self[:target]
55
+ end
56
+
57
+ def target=(target)
58
+ self[:target] = target
59
+ self.attributes!.occi!.core!.target = target
60
+ end
61
+
62
+ def source
63
+ return self[:source]
64
+ end
65
+
66
+ def source=(source)
67
+ self[:source] = source
68
+ self.attributes!.occi!.core!.source = source
69
+ end
70
+
71
+ def convert_value(val, duping=false) #:nodoc:
72
+ case val
73
+ when self.class
74
+ val.dup
75
+ when ::Hash
76
+ val = val.dup if duping
77
+ self.class.subkey_class.new.merge(val) unless val.kind_of?(Hashie::Mash)
78
+ val
79
+ when Array
80
+ val.collect { |e| convert_value(e) }
81
+ else
82
+ val
83
+ end
84
+ end
85
+
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,43 @@
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: OCCI Core Mixin
19
+ # Author(s): Hayati Bice, Florian Feldhaus, Piotr Kasprzak
20
+ ##############################################################################
21
+
22
+ require 'json'
23
+ require 'occi/core/category'
24
+ require 'occi/core/action'
25
+
26
+ module OCCI
27
+ module Core
28
+ class Mixin < OCCI::Core::Category
29
+
30
+ attr_accessor :entities
31
+
32
+ def initialize(mixin, default = nil)
33
+ @entities = []
34
+ super(mixin, default)
35
+ end
36
+
37
+ def location
38
+ '/mixin/' + self[:term] + '/'
39
+ end
40
+
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,73 @@
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: OCCI Core Resource
19
+ # Author(s): Hayati Bice, Florian Feldhaus, Piotr Kasprzak
20
+ ##############################################################################
21
+
22
+ require 'occi/registry'
23
+ require 'occi/core/entity'
24
+ require 'occi/core/kind'
25
+ require 'hashie'
26
+
27
+ module OCCI
28
+ module Core
29
+ class Resource < Entity
30
+
31
+ def self.register
32
+ data = Hashie::Mash.new
33
+ data[:related] = %w{http://schemas.ogf.org/occi/core#entity}
34
+ data[:term] = "resource"
35
+ data[:scheme] = "http://schemas.ogf.org/occi/core#"
36
+ data[:title] = "Resource"
37
+
38
+ data.attributes!.occi!.core!.summary!.type = "string"
39
+ data.attributes!.occi!.core!.summary!.pattern = ".*"
40
+ data.attributes!.occi!.core!.summary!.required = false
41
+ data.attributes!.occi!.core!.summary!.mutable = true
42
+
43
+ kind = OCCI::Core::Kind.new(data)
44
+ OCCI::Registry.register(kind)
45
+ end
46
+
47
+ def summary
48
+ return self[:summary]
49
+ end
50
+
51
+ def summary=(summary)
52
+ self[:summary] = summary
53
+ self.attributes!.occi!.core!.summary = summary
54
+ end
55
+
56
+ def convert_value(val, duping=false) #:nodoc:
57
+ case val
58
+ when self.class
59
+ val.dup
60
+ when ::Hash
61
+ val = val.dup if duping
62
+ self.class.subkey_class.new.merge(val) unless val.kind_of?(Hashie::Mash)
63
+ val
64
+ when Array
65
+ val.collect { |e| convert_value(e) }
66
+ else
67
+ val
68
+ end
69
+ end
70
+
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,59 @@
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
@@ -0,0 +1,51 @@
1
+ ##############################################################################
2
+ # Copyright 2012 GWDG
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: OCCI monitoring VM cpu usage
19
+ # Author(s): Ali Imran Jehangiri, Florian Feldhaus, Piotr Kasprzak
20
+ ##############################################################################
21
+
22
+ require 'singleton'
23
+ require 'occi/core/mixin'
24
+
25
+ module OCCI
26
+ module Monitor
27
+ class Cpu < OCCI::Core::Mixin
28
+
29
+ # Define appropriate mixin
30
+ begin
31
+ # Define actions
32
+ actions = []
33
+
34
+ related = [OCCI::Monitor::Metric::MIXIN]
35
+ entities = []
36
+
37
+ term = "cpu"
38
+ scheme = "http://example.com/occi/infrastructure/metric/compute#"
39
+ title = "compute.cpu"
40
+
41
+ attributes = OCCI::Core::Attributes.new()
42
+
43
+ MIXIN = OCCI::Core::Mixin.new(term, scheme, title, attributes, actions, related, entities)
44
+ OCCI::CategoryRegistry.register(MIXIN)
45
+ OCCI::Rendering::HTTP::LocationRegistry.register('/metric/compute/cpu', MIXIN)
46
+
47
+
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,49 @@
1
+ ##############################################################################
2
+ # Copyright 2012 GWDG
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: OCCI monitoring VM memory usage
19
+ # Author(s): Ali Imran Jehangiri, Florian Feldhaus, Piotr Kasprzak
20
+ ##############################################################################
21
+
22
+ require 'singleton'
23
+ require 'occi/core/mixin'
24
+
25
+ module OCCI
26
+ module Monitor
27
+ class Memory < OCCI::Core::Mixin
28
+
29
+ # Define appropriate mixin
30
+ begin
31
+ # Define actions
32
+ actions = []
33
+
34
+ related = [OCCI::Monitor::Metric::MIXIN]
35
+ entities = []
36
+
37
+ term = "memory"
38
+ scheme = "http://example.com/occi/infrastructure/metric/compute#"
39
+ title = "compute.memory"
40
+
41
+ attributes = OCCI::Core::Attributes.new()
42
+ MIXIN = OCCI::Core::Mixin.new(term, scheme, title, attributes, actions, related, entities)
43
+ OCCI::CategoryRegistry.register(MIXIN)
44
+ OCCI::Rendering::HTTP::LocationRegistry.register('/metric/compute/memory', MIXIN)
45
+
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,54 @@
1
+ ##############################################################################
2
+ # Copyright 2012 GWDG
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: OCCI monitoring metric
19
+ # Author(s): Ali Imran Jehangiri, Florian Feldhaus, Piotr Kasprzak
20
+ ##############################################################################
21
+
22
+ require 'singleton'
23
+
24
+ require 'occi/core/mixin'
25
+
26
+ module OCCI
27
+ module Monitor
28
+ class Metric < OCCI::Core::Mixin
29
+
30
+ # Define appropriate mixin
31
+ begin
32
+ # Define actions
33
+ actions = []
34
+
35
+ related = []
36
+ entities = []
37
+
38
+ term = "metric"
39
+ scheme = "http://schemas.ogf.org/occi/monitoring#"
40
+ title = "Metric"
41
+
42
+ attributes = OCCI::Core::Attributes.new()
43
+ attributes << OCCI::Core::Attribute.new(name = 'value', mutable = false, mandatory = true, unique = true)
44
+ attributes << OCCI::Core::Attribute.new(name = 'timestamp', mutable = false, mandatory = true, unique = true)
45
+ attributes << OCCI::Core::Attribute.new(name = 'samplerate', mutable = true, mandatory = false, unique = true)
46
+ attributes << OCCI::Core::Attribute.new(name = 'resolution', mutable = true, mandatory = false, unique = true)
47
+ attributes << OCCI::Core::Attribute.new(name = 'unit', mutable = false, mandatory = true, unique = true)
48
+
49
+ MIXIN = OCCI::Core::Mixin.new(term, scheme, title, attributes, actions, related, entities)
50
+ OCCI::CategoryRegistry.register(MIXIN)
51
+ end
52
+ end
53
+ end
54
+ end