occi-core 4.1.3 → 4.2.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.
- data/.gitignore +1 -0
- data/Gemfile +8 -0
- data/README.md +49 -17
- data/lib/occi/collection.rb +37 -21
- data/lib/occi/core/action.rb +5 -5
- data/lib/occi/core/action_instance.rb +45 -3
- data/lib/occi/core/actions.rb +2 -1
- data/lib/occi/core/attributes.rb +253 -73
- data/lib/occi/core/categories.rb +1 -0
- data/lib/occi/core/category.rb +25 -8
- data/lib/occi/core/entities.rb +1 -0
- data/lib/occi/core/entity.rb +51 -74
- data/lib/occi/core/kind.rb +15 -11
- data/lib/occi/core/kinds.rb +1 -1
- data/lib/occi/core/link.rb +14 -15
- data/lib/occi/core/links.rb +1 -1
- data/lib/occi/core/mixin.rb +5 -5
- data/lib/occi/core/mixins.rb +2 -2
- data/lib/occi/core/properties.rb +90 -12
- data/lib/occi/core/resource.rb +7 -3
- data/lib/occi/core/resources.rb +2 -2
- data/lib/occi/errors/attribute_definitions_converted_error.rb +5 -0
- data/lib/occi/errors/attribute_missing_error.rb +5 -0
- data/lib/occi/errors/attribute_name_invalid_error.rb +5 -0
- data/lib/occi/errors/attribute_not_defined_error.rb +5 -0
- data/lib/occi/errors/attribute_property_type_error.rb +5 -0
- data/lib/occi/errors/attribute_type_error.rb +5 -0
- data/lib/occi/errors/kind_not_defined_error.rb +5 -0
- data/lib/occi/errors/parser_input_error.rb +5 -0
- data/lib/occi/errors/parser_type_error.rb +5 -0
- data/lib/occi/errors.rb +1 -0
- data/lib/occi/extensions/hashie.rb +25 -0
- data/lib/occi/helpers/comparators/action_instance.rb +22 -0
- data/lib/occi/helpers/comparators/attributes.rb +22 -0
- data/lib/occi/helpers/comparators/categories.rb +22 -0
- data/lib/occi/helpers/comparators/category.rb +22 -0
- data/lib/occi/helpers/comparators/collection.rb +40 -0
- data/lib/occi/helpers/comparators/entities.rb +22 -0
- data/lib/occi/helpers/comparators/entity.rb +22 -0
- data/lib/occi/helpers/comparators/properties.rb +26 -0
- data/lib/occi/helpers/comparators.rb +1 -0
- data/lib/occi/infrastructure/compute.rb +11 -9
- data/lib/occi/infrastructure/network.rb +27 -27
- data/lib/occi/infrastructure/networkinterface.rb +22 -23
- data/lib/occi/infrastructure/os_tpl.rb +1 -1
- data/lib/occi/infrastructure/resource_tpl.rb +1 -1
- data/lib/occi/infrastructure/storage.rb +7 -6
- data/lib/occi/infrastructure/storagelink.rb +4 -4
- data/lib/occi/log.rb +13 -10
- data/lib/occi/model.rb +9 -8
- data/lib/occi/parser/json.rb +11 -9
- data/lib/occi/parser/ova.rb +12 -6
- data/lib/occi/parser/ovf.rb +173 -116
- data/lib/occi/parser/text/constants.rb +87 -0
- data/lib/occi/parser/text.rb +161 -200
- data/lib/occi/parser/xml.rb +10 -8
- data/lib/occi/parser.rb +100 -50
- data/lib/occi/settings.rb +2 -1
- data/lib/occi/version.rb +1 -1
- data/lib/occi-core.rb +6 -4
- data/occi-core.gemspec +0 -7
- data/spec/occi/collection_samples/collection1.json +1 -0
- data/spec/occi/collection_samples/directory2/collection2.json +1 -0
- data/spec/occi/collection_spec.rb +961 -31
- data/spec/occi/core/action_instance_spec.rb +317 -0
- data/spec/occi/core/action_spec.rb +71 -0
- data/spec/occi/core/attributes_spec.rb +582 -27
- data/spec/occi/core/category_spec.rb +194 -18
- data/spec/occi/core/entities_spec.rb +96 -0
- data/spec/occi/core/entity_spec.rb +317 -28
- data/spec/occi/core/kind_spec.rb +127 -16
- data/spec/occi/core/link_spec.rb +35 -0
- data/spec/occi/core/links_spec.rb +130 -0
- data/spec/occi/core/mixins_spec.rb +107 -0
- data/spec/occi/core/properties_spec.rb +167 -0
- data/spec/occi/core/resource_spec.rb +23 -9
- data/spec/occi/core_spec.rb +12 -0
- data/spec/occi/infrastructure/compute_spec.rb +218 -18
- data/spec/occi/infrastructure/network_spec.rb +96 -0
- data/spec/occi/infrastructure/networkinterface_spec.rb +96 -0
- data/spec/occi/infrastructure/storage_spec.rb +33 -0
- data/spec/occi/infrastructure/storagelink_spec.rb +45 -0
- data/spec/occi/log_spec.rb +104 -1
- data/spec/occi/model_spec.rb +251 -39
- data/spec/occi/{test.json → parser/json_samples/test.json} +0 -0
- data/spec/occi/parser/ova_samples/test.dump +0 -0
- data/spec/occi/{test.ova → parser/ova_samples/test.ova} +0 -0
- data/spec/occi/parser/ovf_samples/test.dump +0 -0
- data/spec/occi/{test.ovf → parser/ovf_samples/test.ovf} +0 -0
- data/spec/occi/parser/text_samples/occi_categories.dump +0 -0
- data/spec/occi/parser/text_samples/occi_categories.text +2 -0
- data/spec/occi/parser/text_samples/occi_compute_rocci_server.dump +0 -0
- data/spec/occi/parser/text_samples/occi_compute_rocci_server.resource.dump +0 -0
- data/spec/occi/parser/text_samples/occi_compute_rocci_server.text +10 -0
- data/spec/occi/parser/text_samples/occi_link_resource_instance.dump +0 -0
- data/spec/occi/parser/text_samples/occi_link_resource_instance.text +7 -0
- data/spec/occi/parser/text_samples/occi_link_simple.dump +0 -0
- data/spec/occi/parser/text_samples/occi_link_simple.link_string.dump +0 -0
- data/spec/occi/parser/text_samples/occi_link_simple.text +1 -0
- data/spec/occi/parser/text_samples/occi_link_w_attributes.dump +0 -0
- data/spec/occi/parser/text_samples/occi_link_w_attributes.text +7 -0
- data/spec/occi/parser/text_samples/occi_link_w_category.dump +0 -0
- data/spec/occi/parser/text_samples/occi_link_w_category.text +3 -0
- data/spec/occi/parser/text_samples/occi_model_rocci_server.dump +0 -0
- data/spec/occi/parser/text_samples/occi_model_rocci_server.text +51 -0
- data/spec/occi/parser/text_samples/occi_network_rocci_server.dump +0 -0
- data/spec/occi/parser/text_samples/occi_network_rocci_server.resource.dump +0 -0
- data/spec/occi/parser/text_samples/occi_network_rocci_server.text +11 -0
- data/spec/occi/parser/text_samples/occi_resource_w_attributes.dump +0 -0
- data/spec/occi/parser/text_samples/occi_resource_w_attributes.text +11 -0
- data/spec/occi/parser/text_samples/occi_resource_w_inline_links.dump +0 -0
- data/spec/occi/parser/text_samples/occi_resource_w_inline_links.text +16 -0
- data/spec/occi/parser/text_samples/occi_resource_w_inline_links_only.dump +0 -0
- data/spec/occi/parser/text_samples/occi_resource_w_inline_links_only.text +13 -0
- data/spec/occi/parser/text_samples/occi_storage_rocci_server.dump +0 -0
- data/spec/occi/parser/text_samples/occi_storage_rocci_server.resource.dump +0 -0
- data/spec/occi/parser/text_samples/occi_storage_rocci_server.text +9 -0
- data/spec/occi/parser/text_spec.rb +274 -78
- data/spec/occi/parser/xml_samples/test.xml +352 -0
- data/spec/occi/parser_spec.rb +255 -104
- data/spec/occi-core_spec.rb +31 -0
- data/spec/spec_helper.rb +6 -2
- metadata +110 -111
- checksums.yaml +0 -7
- data/spec/occi/core/attribute_spec.rb +0 -0
data/lib/occi/errors.rb
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Dir[File.join(File.dirname(__FILE__), 'errors', '*.rb')].each { |file| require file.gsub('.rb', '') }
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
##
|
|
2
|
+
# Monkeypatch for Hashie
|
|
3
|
+
module Hashie
|
|
4
|
+
class Hash
|
|
5
|
+
|
|
6
|
+
# Converts a mash back to a hash (with stringified keys)
|
|
7
|
+
def to_hash(options={})
|
|
8
|
+
out = {}
|
|
9
|
+
keys.each do |k|
|
|
10
|
+
if self[k].is_a?(Array)
|
|
11
|
+
k = options[:symbolize_keys] ? k.to_sym : k.to_s
|
|
12
|
+
out[k] ||= []
|
|
13
|
+
self[k].each do |array_object|
|
|
14
|
+
out[k] << (array_object.respond_to?(:to_hash) ? array_object.to_hash : array_object)
|
|
15
|
+
end
|
|
16
|
+
else
|
|
17
|
+
k = options[:symbolize_keys] ? k.to_sym : k.to_s
|
|
18
|
+
out[k] = self[k].respond_to?(:to_hash) ? self[k].to_hash : self[k]
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
out
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module Occi
|
|
2
|
+
module Helpers
|
|
3
|
+
module Comparators
|
|
4
|
+
module ActionInstance
|
|
5
|
+
|
|
6
|
+
def ==(obj)
|
|
7
|
+
return false unless obj && obj.respond_to?(:action) && obj.respond_to?(:attributes)
|
|
8
|
+
(self.action == obj.action) && (self.attributes == obj.attributes)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def eql?(obj)
|
|
12
|
+
self == obj
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def hash
|
|
16
|
+
[self.action, self.attributes].hash
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module Occi
|
|
2
|
+
module Helpers
|
|
3
|
+
module Comparators
|
|
4
|
+
module Attributes
|
|
5
|
+
|
|
6
|
+
def ==(obj)
|
|
7
|
+
return false unless obj && obj.respond_to?(:names)
|
|
8
|
+
self.names == obj.names
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def eql?(obj)
|
|
12
|
+
self == obj
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def hash
|
|
16
|
+
self.names.hash
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module Occi
|
|
2
|
+
module Helpers
|
|
3
|
+
module Comparators
|
|
4
|
+
module Categories
|
|
5
|
+
|
|
6
|
+
def ==(obj)
|
|
7
|
+
return false unless obj && obj.respond_to?(:to_a)
|
|
8
|
+
self.to_a == obj.to_a
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def eql?(obj)
|
|
12
|
+
self == obj
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def hash
|
|
16
|
+
self.to_a.hash
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module Occi
|
|
2
|
+
module Helpers
|
|
3
|
+
module Comparators
|
|
4
|
+
module Category
|
|
5
|
+
|
|
6
|
+
def ==(obj)
|
|
7
|
+
return false unless obj && obj.respond_to?(:type_identifier)
|
|
8
|
+
self.type_identifier == obj.type_identifier
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def eql?(obj)
|
|
12
|
+
self == obj
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def hash
|
|
16
|
+
self.type_identifier.hash
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
module Occi
|
|
2
|
+
module Helpers
|
|
3
|
+
module Comparators
|
|
4
|
+
module Collection
|
|
5
|
+
|
|
6
|
+
REQUIRED_ACCESSORS = [:kinds, :mixins, :actions, :resources, :links, :action].freeze
|
|
7
|
+
|
|
8
|
+
def ==(obj)
|
|
9
|
+
return false unless obj && has_accessors?(obj)
|
|
10
|
+
contents_matches?(obj)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def eql?(obj)
|
|
14
|
+
self == obj
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def hash
|
|
18
|
+
REQUIRED_ACCESSORS.collect { |accessor| self.send(accessor) }.hash
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def has_accessors?(obj)
|
|
22
|
+
result = true
|
|
23
|
+
REQUIRED_ACCESSORS.each { |accessor| result = result && obj.respond_to?(accessor) }
|
|
24
|
+
|
|
25
|
+
result
|
|
26
|
+
end
|
|
27
|
+
private :has_accessors?
|
|
28
|
+
|
|
29
|
+
def contents_matches?(obj)
|
|
30
|
+
result = true
|
|
31
|
+
REQUIRED_ACCESSORS.each { |accessor| result = result && (self.send(accessor) == obj.send(accessor)) }
|
|
32
|
+
|
|
33
|
+
result
|
|
34
|
+
end
|
|
35
|
+
private :contents_matches?
|
|
36
|
+
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module Occi
|
|
2
|
+
module Helpers
|
|
3
|
+
module Comparators
|
|
4
|
+
module Entities
|
|
5
|
+
|
|
6
|
+
def ==(obj)
|
|
7
|
+
return false unless obj && obj.respond_to?(:to_a)
|
|
8
|
+
self.to_a == obj.to_a
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def eql?(obj)
|
|
12
|
+
self == obj
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def hash
|
|
16
|
+
self.to_a.hash
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module Occi
|
|
2
|
+
module Helpers
|
|
3
|
+
module Comparators
|
|
4
|
+
module Entity
|
|
5
|
+
|
|
6
|
+
def ==(obj)
|
|
7
|
+
return false unless obj && obj.respond_to?(:kind) && obj.respond_to?(:attributes)
|
|
8
|
+
(self.kind == obj.kind) && (self.attributes['occi.core.id'] == obj.attributes['occi.core.id'])
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def eql?(obj)
|
|
12
|
+
self == obj
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def hash
|
|
16
|
+
[self.kind, self.attributes['occi.core.id']].hash
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
module Occi
|
|
2
|
+
module Helpers
|
|
3
|
+
module Comparators
|
|
4
|
+
module Properties
|
|
5
|
+
|
|
6
|
+
def ==(obj)
|
|
7
|
+
return false unless obj && obj.respond_to?(:instance_variables)
|
|
8
|
+
|
|
9
|
+
local_attrs = self.instance_variables.map { |ivar| self.instance_variable_get ivar }
|
|
10
|
+
remote_attrs = obj.instance_variables.map { |ivar| obj.instance_variable_get ivar }
|
|
11
|
+
|
|
12
|
+
local_attrs == remote_attrs
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def eql?(obj)
|
|
16
|
+
self == obj
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def hash
|
|
20
|
+
self.instance_variables.map { |ivar| self.instance_variable_get ivar }.hash
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Dir[File.join(File.dirname(__FILE__), 'comparators', '*.rb')].each { |file| require file.gsub('.rb', '') }
|
|
@@ -29,7 +29,7 @@ module Occi
|
|
|
29
29
|
|
|
30
30
|
self.actions = Occi::Core::Actions.new << start << stop << restart << suspend
|
|
31
31
|
|
|
32
|
-
self.attributes = Occi::Core::Attributes.new
|
|
32
|
+
self.attributes = Occi::Core::Attributes.new(Occi::Core::Resource.attributes)
|
|
33
33
|
self.attributes['occi.compute.architecture'] = {:mutable => true,
|
|
34
34
|
:pattern => 'x86|x64'}
|
|
35
35
|
self.attributes['occi.compute.cores'] = {:type => 'number',
|
|
@@ -38,6 +38,8 @@ module Occi
|
|
|
38
38
|
:pattern => '(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*'}
|
|
39
39
|
self.attributes['occi.compute.memory'] = {:type => 'number',
|
|
40
40
|
:mutable => true}
|
|
41
|
+
self.attributes['occi.compute.speed'] = {:type => 'number',
|
|
42
|
+
:mutable => true}
|
|
41
43
|
self.attributes['occi.compute.state'] = {:pattern => 'inactive|active|suspended|error',
|
|
42
44
|
:default => 'inactive'}
|
|
43
45
|
|
|
@@ -51,10 +53,10 @@ module Occi
|
|
|
51
53
|
|
|
52
54
|
require 'occi/infrastructure/resource_tpl'
|
|
53
55
|
require 'occi/infrastructure/os_tpl'
|
|
54
|
-
self.mixins = Occi::Core::Mixins.new << Occi::Infrastructure::
|
|
56
|
+
self.mixins = Occi::Core::Mixins.new << Occi::Infrastructure::ResourceTpl.mixin << Occi::Infrastructure::OsTpl.mixin
|
|
55
57
|
|
|
56
58
|
def architecture
|
|
57
|
-
@attributes.
|
|
59
|
+
@attributes.occi_.compute_.architecture
|
|
58
60
|
end
|
|
59
61
|
|
|
60
62
|
def architecture=(architecture)
|
|
@@ -62,7 +64,7 @@ module Occi
|
|
|
62
64
|
end
|
|
63
65
|
|
|
64
66
|
def cores
|
|
65
|
-
@attributes.
|
|
67
|
+
@attributes.occi_.compute_.cores
|
|
66
68
|
end
|
|
67
69
|
|
|
68
70
|
def cores=(cores)
|
|
@@ -70,7 +72,7 @@ module Occi
|
|
|
70
72
|
end
|
|
71
73
|
|
|
72
74
|
def hostname
|
|
73
|
-
@attributes.
|
|
75
|
+
@attributes.occi_.compute_.hostname
|
|
74
76
|
end
|
|
75
77
|
|
|
76
78
|
def hostname=(hostname)
|
|
@@ -78,7 +80,7 @@ module Occi
|
|
|
78
80
|
end
|
|
79
81
|
|
|
80
82
|
def speed
|
|
81
|
-
@attributes.
|
|
83
|
+
@attributes.occi_.compute_.speed
|
|
82
84
|
end
|
|
83
85
|
|
|
84
86
|
def speed=(speed)
|
|
@@ -86,7 +88,7 @@ module Occi
|
|
|
86
88
|
end
|
|
87
89
|
|
|
88
90
|
def memory
|
|
89
|
-
@attributes.
|
|
91
|
+
@attributes.occi_.compute_.memory
|
|
90
92
|
end
|
|
91
93
|
|
|
92
94
|
def memory=(memory)
|
|
@@ -94,7 +96,7 @@ module Occi
|
|
|
94
96
|
end
|
|
95
97
|
|
|
96
98
|
def state
|
|
97
|
-
@attributes.
|
|
99
|
+
@attributes.occi_.compute_.state
|
|
98
100
|
end
|
|
99
101
|
|
|
100
102
|
def state=(state)
|
|
@@ -119,4 +121,4 @@ module Occi
|
|
|
119
121
|
|
|
120
122
|
end
|
|
121
123
|
end
|
|
122
|
-
end
|
|
124
|
+
end
|
|
@@ -12,13 +12,14 @@ module Occi
|
|
|
12
12
|
|
|
13
13
|
self.actions = Occi::Core::Actions.new << up << down
|
|
14
14
|
|
|
15
|
-
self.attributes = Occi::Core::Attributes.new
|
|
15
|
+
self.attributes = Occi::Core::Attributes.new(Occi::Core::Resource.attributes)
|
|
16
16
|
self.attributes['occi.network.vlan'] = {:type => 'number',
|
|
17
17
|
:mutable => true,
|
|
18
|
-
:pattern => '
|
|
19
|
-
self.attributes['occi.network.label'] = {:type => '
|
|
18
|
+
:pattern => '\d+'}
|
|
19
|
+
self.attributes['occi.network.label'] = {:type => 'string',
|
|
20
20
|
:mutable => true}
|
|
21
|
-
self.attributes['occi.network.state'] ={:
|
|
21
|
+
self.attributes['occi.network.state'] ={:type => 'string',
|
|
22
|
+
:pattern => 'active|inactive|error',
|
|
22
23
|
:default => 'inactive'}
|
|
23
24
|
|
|
24
25
|
self.kind = Occi::Core::Kind.new scheme='http://schemas.ogf.org/occi/infrastructure#',
|
|
@@ -32,16 +33,18 @@ module Occi
|
|
|
32
33
|
require 'occi/infrastructure/network/ipnetwork'
|
|
33
34
|
self.mixins = Occi::Core::Mixins.new << Occi::Infrastructure::Network::Ipnetwork.mixin
|
|
34
35
|
|
|
35
|
-
def ipnetwork(
|
|
36
|
-
if
|
|
37
|
-
|
|
36
|
+
def ipnetwork(add = true)
|
|
37
|
+
if add
|
|
38
|
+
Occi::Log.info "[#{self.class}] Adding mixin IPNetwork"
|
|
39
|
+
@mixins << Occi::Infrastructure::Network::Ipnetwork.mixin
|
|
38
40
|
else
|
|
39
|
-
|
|
41
|
+
Occi::Log.info "[#{self.class}] Removing mixin IPNetwork"
|
|
42
|
+
@mixins.delete Occi::Infrastructure::Network::Ipnetwork.mixin
|
|
40
43
|
end
|
|
41
44
|
end
|
|
42
45
|
|
|
43
46
|
def vlan
|
|
44
|
-
@attributes.
|
|
47
|
+
@attributes.occi_.network_.vlan
|
|
45
48
|
end
|
|
46
49
|
|
|
47
50
|
def vlan=(vlan)
|
|
@@ -49,7 +52,7 @@ module Occi
|
|
|
49
52
|
end
|
|
50
53
|
|
|
51
54
|
def label
|
|
52
|
-
@attributes.
|
|
55
|
+
@attributes.occi_.network_.label
|
|
53
56
|
end
|
|
54
57
|
|
|
55
58
|
def label=(label)
|
|
@@ -57,7 +60,7 @@ module Occi
|
|
|
57
60
|
end
|
|
58
61
|
|
|
59
62
|
def state
|
|
60
|
-
@attributes.
|
|
63
|
+
@attributes.occi_.network_.state
|
|
61
64
|
end
|
|
62
65
|
|
|
63
66
|
def state=(state)
|
|
@@ -67,41 +70,38 @@ module Occi
|
|
|
67
70
|
# IPNetwork Mixin attributes
|
|
68
71
|
|
|
69
72
|
def address
|
|
70
|
-
@attributes.
|
|
73
|
+
@attributes.occi_.network_.address
|
|
71
74
|
end
|
|
72
75
|
|
|
73
76
|
def address=(address)
|
|
74
|
-
|
|
75
|
-
Occi::Log.info 'Adding mixin IPNetwork mixin'
|
|
76
|
-
@mixins << Occi::Infrastructure::Network::Ipnetwork.new
|
|
77
|
-
end
|
|
77
|
+
add_ipnetwork_mixin
|
|
78
78
|
@attributes.occi!.network!.address = address
|
|
79
79
|
end
|
|
80
80
|
|
|
81
81
|
def gateway
|
|
82
|
-
@attributes.
|
|
82
|
+
@attributes.occi_.network_.gateway
|
|
83
83
|
end
|
|
84
84
|
|
|
85
85
|
def gateway=(gateway)
|
|
86
|
-
|
|
87
|
-
Occi::Log.info 'Adding mixin IP network'
|
|
88
|
-
@mixins << Occi::Infrastructure::Network::Ipnetwork.new
|
|
89
|
-
end
|
|
86
|
+
add_ipnetwork_mixin
|
|
90
87
|
@attributes.occi!.network!.gateway = gateway
|
|
91
88
|
end
|
|
92
89
|
|
|
93
90
|
def allocation
|
|
94
|
-
@attributes.
|
|
91
|
+
@attributes.occi_.network_.allocation
|
|
95
92
|
end
|
|
96
93
|
|
|
97
94
|
def allocation=(allocation)
|
|
98
|
-
|
|
99
|
-
Occi::Log.info 'Adding mixin IPNetwork mixin'
|
|
100
|
-
@mixins << Occi::Infrastructure::Network::Ipnetwork.new
|
|
101
|
-
end
|
|
95
|
+
add_ipnetwork_mixin
|
|
102
96
|
@attributes.occi!.network!.allocation = allocation
|
|
103
97
|
end
|
|
104
98
|
|
|
99
|
+
private
|
|
100
|
+
|
|
101
|
+
def add_ipnetwork_mixin
|
|
102
|
+
ipnetwork(true) if @mixins.select { |mixin| mixin.type_identifier == Occi::Infrastructure::Network::Ipnetwork.mixin.type_identifier }.empty?
|
|
103
|
+
end
|
|
104
|
+
|
|
105
105
|
end
|
|
106
106
|
end
|
|
107
|
-
end
|
|
107
|
+
end
|
|
@@ -12,7 +12,7 @@ module Occi
|
|
|
12
12
|
|
|
13
13
|
self.actions = Occi::Core::Actions.new << up << down
|
|
14
14
|
|
|
15
|
-
self.attributes = Occi::Core::Attributes.new
|
|
15
|
+
self.attributes = Occi::Core::Attributes.new(Occi::Core::Link.attributes)
|
|
16
16
|
self.attributes['occi.networkinterface.interface'] ={:mutable => true}
|
|
17
17
|
self.attributes['occi.networkinterface.mac'] = {:mutable => true,
|
|
18
18
|
:pattern => '^([0-9a-fA-F]{2}[:-]){5}([0-9a-fA-F]{2})$'}
|
|
@@ -30,16 +30,18 @@ module Occi
|
|
|
30
30
|
require 'occi/infrastructure/networkinterface/ipnetworkinterface'
|
|
31
31
|
self.mixins = Occi::Core::Mixins.new << Occi::Infrastructure::Networkinterface::Ipnetworkinterface.mixin
|
|
32
32
|
|
|
33
|
-
def ipnetworkinterface(
|
|
34
|
-
if
|
|
35
|
-
|
|
33
|
+
def ipnetworkinterface(add = true)
|
|
34
|
+
if add
|
|
35
|
+
Occi::Log.info "[#{self.class}] Adding mixin IPNetworkInterface"
|
|
36
|
+
@mixins << Occi::Infrastructure::Networkinterface::Ipnetworkinterface.mixin
|
|
36
37
|
else
|
|
37
|
-
|
|
38
|
+
Occi::Log.info "[#{self.class}] Removing mixin IPNetworkInterface"
|
|
39
|
+
@mixins.delete Occi::Infrastructure::Networkinterface::Ipnetworkinterface.mixin
|
|
38
40
|
end
|
|
39
41
|
end
|
|
40
42
|
|
|
41
43
|
def interface
|
|
42
|
-
@attributes.
|
|
44
|
+
@attributes.occi_.networkinterface_.interface
|
|
43
45
|
end
|
|
44
46
|
|
|
45
47
|
def interface=(interface)
|
|
@@ -47,7 +49,7 @@ module Occi
|
|
|
47
49
|
end
|
|
48
50
|
|
|
49
51
|
def mac
|
|
50
|
-
@attributes.
|
|
52
|
+
@attributes.occi_.networkinterface_.mac
|
|
51
53
|
end
|
|
52
54
|
|
|
53
55
|
def mac=(mac)
|
|
@@ -55,7 +57,7 @@ module Occi
|
|
|
55
57
|
end
|
|
56
58
|
|
|
57
59
|
def state
|
|
58
|
-
@attributes.
|
|
60
|
+
@attributes.occi_.networkinterface_.state
|
|
59
61
|
end
|
|
60
62
|
|
|
61
63
|
def state=(state)
|
|
@@ -63,41 +65,38 @@ module Occi
|
|
|
63
65
|
end
|
|
64
66
|
|
|
65
67
|
def address
|
|
66
|
-
@attributes.
|
|
68
|
+
@attributes.occi_.networkinterface_.address
|
|
67
69
|
end
|
|
68
70
|
|
|
69
71
|
def address=(address)
|
|
70
|
-
|
|
71
|
-
Occi::Log.info 'Adding mixin IP network interface'
|
|
72
|
-
@mixins << Occi::Infrastructure::Networkinterface::Ipnetworkinterface.new
|
|
73
|
-
end
|
|
72
|
+
add_ipnetworkinterface_mixin
|
|
74
73
|
@attributes.occi!.networkinterface!.address = address
|
|
75
74
|
end
|
|
76
75
|
|
|
77
76
|
def gateway
|
|
78
|
-
@attributes.
|
|
77
|
+
@attributes.occi_.networkinterface_.gateway
|
|
79
78
|
end
|
|
80
79
|
|
|
81
80
|
def gateway=(gateway)
|
|
82
|
-
|
|
83
|
-
Occi::Log.info 'Adding mixin IP network interface'
|
|
84
|
-
@mixins << Occi::Infrastructure::Networkinterface::Ipnetworkinterface.new
|
|
85
|
-
end
|
|
81
|
+
add_ipnetworkinterface_mixin
|
|
86
82
|
@attributes.occi!.networkinterface!.gateway = gateway
|
|
87
83
|
end
|
|
88
84
|
|
|
89
85
|
def allocation
|
|
90
|
-
@attributes.
|
|
86
|
+
@attributes.occi_.networkinterface_.allocation
|
|
91
87
|
end
|
|
92
88
|
|
|
93
89
|
def allocation=(allocation)
|
|
94
|
-
|
|
95
|
-
Occi::Log.info 'Adding mixin IP network interface'
|
|
96
|
-
@mixins << Occi::Infrastructure::Networkinterface::Ipnetworkinterface.new
|
|
97
|
-
end
|
|
90
|
+
add_ipnetworkinterface_mixin
|
|
98
91
|
@attributes.occi!.networkinterface!.allocation = allocation
|
|
99
92
|
end
|
|
100
93
|
|
|
94
|
+
private
|
|
95
|
+
|
|
96
|
+
def add_ipnetworkinterface_mixin
|
|
97
|
+
ipnetworkinterface(true) if @mixins.select { |mixin| mixin.type_identifier == Occi::Infrastructure::Networkinterface::Ipnetworkinterface.mixin.type_identifier }.empty?
|
|
98
|
+
end
|
|
99
|
+
|
|
101
100
|
end
|
|
102
101
|
end
|
|
103
102
|
end
|
|
@@ -26,9 +26,10 @@ module Occi
|
|
|
26
26
|
|
|
27
27
|
self.actions = Occi::Core::Actions.new << online << offline << backup << snapshot << resize
|
|
28
28
|
|
|
29
|
-
self.attributes = Occi::Core::Attributes.new
|
|
29
|
+
self.attributes = Occi::Core::Attributes.new(Occi::Core::Resource.attributes)
|
|
30
30
|
self.attributes['occi.storage.size'] = {:type => 'number',
|
|
31
|
-
:mutable => true
|
|
31
|
+
:mutable => true,
|
|
32
|
+
:pattern => '\d+' }
|
|
32
33
|
self.attributes['occi.storage.state'] = {:pattern => 'online|offline|backup|snapshot|resize|degraded',
|
|
33
34
|
:default => 'offline'}
|
|
34
35
|
|
|
@@ -41,15 +42,15 @@ module Occi
|
|
|
41
42
|
location = '/storage/'
|
|
42
43
|
|
|
43
44
|
def size
|
|
44
|
-
@attributes.
|
|
45
|
+
@attributes.occi_.storage_['size']
|
|
45
46
|
end
|
|
46
47
|
|
|
47
48
|
def size=(size)
|
|
48
|
-
@attributes.occi!.storage
|
|
49
|
+
@attributes.occi!.storage!['size'] = size
|
|
49
50
|
end
|
|
50
51
|
|
|
51
52
|
def state
|
|
52
|
-
@attributes.
|
|
53
|
+
@attributes.occi_.storage_.state
|
|
53
54
|
end
|
|
54
55
|
|
|
55
56
|
def state=(state)
|
|
@@ -58,4 +59,4 @@ module Occi
|
|
|
58
59
|
|
|
59
60
|
end
|
|
60
61
|
end
|
|
61
|
-
end
|
|
62
|
+
end
|
|
@@ -12,7 +12,7 @@ module Occi
|
|
|
12
12
|
|
|
13
13
|
self.actions = Occi::Core::Actions.new << online << offline
|
|
14
14
|
|
|
15
|
-
self.attributes = Occi::Core::Attributes.new
|
|
15
|
+
self.attributes = Occi::Core::Attributes.new(Occi::Core::Link.attributes)
|
|
16
16
|
self.attributes['occi.storagelink.deviceid'] = {:mutable => true}
|
|
17
17
|
self.attributes['occi.storagelink.mountpoint'] = {:mutable => true}
|
|
18
18
|
self.attributes['occi.storagelink.state'] = {:pattern => 'active|inactive|error',
|
|
@@ -28,7 +28,7 @@ module Occi
|
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
def deviceid
|
|
31
|
-
@attributes.
|
|
31
|
+
@attributes.occi_.storagelink_.deviceid
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
def deviceid=(deviceid)
|
|
@@ -36,7 +36,7 @@ module Occi
|
|
|
36
36
|
end
|
|
37
37
|
|
|
38
38
|
def mountpoint
|
|
39
|
-
@attributes.
|
|
39
|
+
@attributes.occi_.storagelink_.mountpoint
|
|
40
40
|
end
|
|
41
41
|
|
|
42
42
|
def mountpoint=(mountpoint)
|
|
@@ -44,7 +44,7 @@ module Occi
|
|
|
44
44
|
end
|
|
45
45
|
|
|
46
46
|
def state
|
|
47
|
-
@attributes.
|
|
47
|
+
@attributes.occi_.storagelink_.state
|
|
48
48
|
end
|
|
49
49
|
|
|
50
50
|
def state=(state)
|