occi-core 4.0.0.alpha.1
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.
- checksums.yaml +7 -0
- data/.gitignore +15 -0
- data/.rspec +1 -0
- data/.travis.yml +43 -0
- data/.yardopts +1 -0
- data/AUTHORS +9 -0
- data/Gemfile +11 -0
- data/LICENSE +13 -0
- data/README.md +212 -0
- data/Rakefile +28 -0
- data/config/occi.yml +4 -0
- data/ext/mkrf_conf.rb +35 -0
- data/lib/occi/collection.rb +192 -0
- data/lib/occi/core/action.rb +32 -0
- data/lib/occi/core/action_instance.rb +38 -0
- data/lib/occi/core/actions.rb +20 -0
- data/lib/occi/core/attribute.rb +99 -0
- data/lib/occi/core/attributes.rb +172 -0
- data/lib/occi/core/categories.rb +51 -0
- data/lib/occi/core/category.rb +153 -0
- data/lib/occi/core/entities.rb +47 -0
- data/lib/occi/core/entity.rb +264 -0
- data/lib/occi/core/kind.rb +58 -0
- data/lib/occi/core/kinds.rb +22 -0
- data/lib/occi/core/link.rb +95 -0
- data/lib/occi/core/links.rb +34 -0
- data/lib/occi/core/mixin.rb +55 -0
- data/lib/occi/core/mixins.rb +41 -0
- data/lib/occi/core/properties.rb +35 -0
- data/lib/occi/core/related.rb +7 -0
- data/lib/occi/core/resource.rb +78 -0
- data/lib/occi/core/resources.rb +14 -0
- data/lib/occi/core.rb +31 -0
- data/lib/occi/helpers/inspect.rb +12 -0
- data/lib/occi/infrastructure/compute.rb +122 -0
- data/lib/occi/infrastructure/network/ipnetwork.rb +27 -0
- data/lib/occi/infrastructure/network.rb +107 -0
- data/lib/occi/infrastructure/networkinterface/ipnetworkinterface.rb +27 -0
- data/lib/occi/infrastructure/networkinterface.rb +103 -0
- data/lib/occi/infrastructure/os_tpl.rb +19 -0
- data/lib/occi/infrastructure/resource_tpl.rb +19 -0
- data/lib/occi/infrastructure/storage.rb +61 -0
- data/lib/occi/infrastructure/storagelink.rb +56 -0
- data/lib/occi/infrastructure.rb +25 -0
- data/lib/occi/log.rb +66 -0
- data/lib/occi/model.rb +86 -0
- data/lib/occi/parser/json.rb +34 -0
- data/lib/occi/parser/ova.rb +35 -0
- data/lib/occi/parser/ovf.rb +154 -0
- data/lib/occi/parser/text.rb +234 -0
- data/lib/occi/parser/xml.rb +18 -0
- data/lib/occi/parser.rb +78 -0
- data/lib/occi/settings.rb +9 -0
- data/lib/occi/version.rb +3 -0
- data/lib/occi-core.rb +50 -0
- data/occi-core.gemspec +36 -0
- data/spec/occi/collection_spec.rb +38 -0
- data/spec/occi/core/attribute_spec.rb +0 -0
- data/spec/occi/core/attributes_spec.rb +42 -0
- data/spec/occi/core/categories_spec.rb +27 -0
- data/spec/occi/core/category_spec.rb +38 -0
- data/spec/occi/core/entity_spec.rb +46 -0
- data/spec/occi/core/resource_spec.rb +18 -0
- data/spec/occi/infrastructure/compute_spec.rb +29 -0
- data/spec/occi/log_spec.rb +14 -0
- data/spec/occi/model_spec.rb +50 -0
- data/spec/occi/parser/text_spec.rb +31 -0
- data/spec/occi/parser_spec.rb +114 -0
- data/spec/occi/test.json +33 -0
- data/spec/occi/test.ova +0 -0
- data/spec/occi/test.ovf +198 -0
- data/spec/spec_helper.rb +25 -0
- metadata +304 -0
data/lib/occi/core.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'occi/core/properties'
|
2
|
+
require 'occi/core/attribute'
|
3
|
+
require 'occi/core/attributes'
|
4
|
+
require 'occi/core/category'
|
5
|
+
require 'occi/core/categories'
|
6
|
+
require 'occi/core/related'
|
7
|
+
require 'occi/core/kind'
|
8
|
+
require 'occi/core/kinds'
|
9
|
+
require 'occi/core/mixin'
|
10
|
+
require 'occi/core/mixins'
|
11
|
+
require 'occi/core/action'
|
12
|
+
require 'occi/core/action_instance'
|
13
|
+
require 'occi/core/actions'
|
14
|
+
require 'occi/core/entities'
|
15
|
+
require 'occi/core/entity'
|
16
|
+
require 'occi/core/link'
|
17
|
+
require 'occi/core/links'
|
18
|
+
require 'occi/core/resource'
|
19
|
+
require 'occi/core/resources'
|
20
|
+
|
21
|
+
module Occi
|
22
|
+
module Core
|
23
|
+
|
24
|
+
extend Occi
|
25
|
+
|
26
|
+
def self.kinds
|
27
|
+
Occi::Core::Kinds.new << Occi::Core::Entity.kind << Occi::Core::Link.kind << Occi::Core::Resource.kind
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,122 @@
|
|
1
|
+
module Occi
|
2
|
+
module Infrastructure
|
3
|
+
class Compute < Occi::Core::Resource
|
4
|
+
|
5
|
+
start = Occi::Core::Action.new scheme='http://schemas.ogf.org/occi/infrastructure/compute/action#',
|
6
|
+
term='start',
|
7
|
+
title='start compute instance'
|
8
|
+
|
9
|
+
stop = Occi::Core::Action.new scheme='http://schemas.ogf.org/occi/infrastructure/compute/action#',
|
10
|
+
term='stop',
|
11
|
+
title='stop compute instance'
|
12
|
+
stop.attributes['method'] = {:mutable => true,
|
13
|
+
:pattern => 'graceful|acpioff|poweroff',
|
14
|
+
:default => 'poweroff'}
|
15
|
+
|
16
|
+
restart = Occi::Core::Action.new scheme='http://schemas.ogf.org/occi/infrastructure/compute/action#',
|
17
|
+
term='restart',
|
18
|
+
title='restart compute instance'
|
19
|
+
restart.attributes['method'] = {:mutable => true,
|
20
|
+
:pattern => 'graceful|warm|cold',
|
21
|
+
:default => 'cold'}
|
22
|
+
|
23
|
+
suspend = Occi::Core::Action.new scheme='http://schemas.ogf.org/occi/infrastructure/compute/action#',
|
24
|
+
term='suspend',
|
25
|
+
title='suspend compute instance'
|
26
|
+
suspend.attributes['metod'] = {:mutable => true,
|
27
|
+
:pattern => 'hibernate|suspend',
|
28
|
+
:default => 'suspend'}
|
29
|
+
|
30
|
+
self.actions = Occi::Core::Actions.new << start << stop << restart << suspend
|
31
|
+
|
32
|
+
self.attributes = Occi::Core::Attributes.new
|
33
|
+
self.attributes['occi.compute.architecture'] = {:mutable => true,
|
34
|
+
:pattern => 'x86|x64'}
|
35
|
+
self.attributes['occi.compute.cores'] = {:type => 'number',
|
36
|
+
:mutable => true}
|
37
|
+
self.attributes['occi.compute.hostname'] = {:mutable => true,
|
38
|
+
:pattern => '(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*'}
|
39
|
+
self.attributes['occi.compute.memory'] = {:type => 'number',
|
40
|
+
:mutable => true}
|
41
|
+
self.attributes['occi.compute.state'] = {:pattern => 'inactive|active|suspended|error',
|
42
|
+
:default => 'inactive'}
|
43
|
+
|
44
|
+
self.kind = Occi::Core::Kind.new scheme='http://schemas.ogf.org/occi/infrastructure#',
|
45
|
+
term='compute',
|
46
|
+
title = 'compute resource',
|
47
|
+
attributes=self.attributes,
|
48
|
+
related=Occi::Core::Related.new << Occi::Core::Resource.kind,
|
49
|
+
actions = self.actions,
|
50
|
+
location = '/compute/'
|
51
|
+
|
52
|
+
require 'occi/infrastructure/resource_tpl'
|
53
|
+
require 'occi/infrastructure/os_tpl'
|
54
|
+
self.mixins = Occi::Core::Mixins.new << Occi::Infrastructure::Resource_tpl.mixin << Occi::Infrastructure::Os_tpl.mixin
|
55
|
+
|
56
|
+
def architecture
|
57
|
+
@attributes.occi.compute.architecture if @attributes.occi.compute if @attributes.occi
|
58
|
+
end
|
59
|
+
|
60
|
+
def architecture=(architecture)
|
61
|
+
@attributes.occi!.compute!.architecture = architecture
|
62
|
+
end
|
63
|
+
|
64
|
+
def cores
|
65
|
+
@attributes.occi.compute.cores if @attributes.occi.compute if @attributes.occi
|
66
|
+
end
|
67
|
+
|
68
|
+
def cores=(cores)
|
69
|
+
@attributes.occi!.compute!.cores = cores
|
70
|
+
end
|
71
|
+
|
72
|
+
def hostname
|
73
|
+
@attributes.occi.compute.hostname if @attributes.occi.compute if @attributes.occi
|
74
|
+
end
|
75
|
+
|
76
|
+
def hostname=(hostname)
|
77
|
+
@attributes.occi!.compute!.hostname = hostname
|
78
|
+
end
|
79
|
+
|
80
|
+
def speed
|
81
|
+
@attributes.occi.compute.speed if @attributes.occi.compute if @attributes.occi
|
82
|
+
end
|
83
|
+
|
84
|
+
def speed=(speed)
|
85
|
+
@attributes.occi!.compute!.speed = speed
|
86
|
+
end
|
87
|
+
|
88
|
+
def memory
|
89
|
+
@attributes.occi.compute.memory if @attributes.occi.compute if @attributes.occi
|
90
|
+
end
|
91
|
+
|
92
|
+
def memory=(memory)
|
93
|
+
@attributes.occi!.compute!.memory = memory
|
94
|
+
end
|
95
|
+
|
96
|
+
def state
|
97
|
+
@attributes.occi.compute.state if @attributes.occi.compute if @attributes.occi
|
98
|
+
end
|
99
|
+
|
100
|
+
def state=(state)
|
101
|
+
@attributes.occi!.compute!.state = state
|
102
|
+
end
|
103
|
+
|
104
|
+
def storagelink(target, mixins=[], attributes=Occi::Core::Attributes.new)
|
105
|
+
link(target, Occi::Infrastructure::Storagelink.kind, mixins, attributes, rel=Occi::Infrastructure::Storage.type_identifier)
|
106
|
+
end
|
107
|
+
|
108
|
+
def networkinterface(target, mixins=[], attributes=Occi::Core::Attributes.new)
|
109
|
+
link(target, Occi::Infrastructure::Networkinterface.kind, mixins, attributes)
|
110
|
+
end
|
111
|
+
|
112
|
+
def storagelinks
|
113
|
+
@links.select { |link| link.kind == Occi::Infrastructure::Storagelink.kind }
|
114
|
+
end
|
115
|
+
|
116
|
+
def networkinterfaces
|
117
|
+
@links.select { |link| link.kind == Occi::Infrastructure::Networkinterface.kind }
|
118
|
+
end
|
119
|
+
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Occi
|
2
|
+
module Infrastructure
|
3
|
+
class Network
|
4
|
+
module Ipnetwork
|
5
|
+
|
6
|
+
mattr_accessor :attributes, :mixin
|
7
|
+
|
8
|
+
self.attributes = Occi::Core::Attributes.new
|
9
|
+
self.attributes['occi.network.address'] = {:mutable => true,
|
10
|
+
:pattern => '(^\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*(\\/(\\d|\\d\\d|1[0-1]\\d|12[0-8]))$)|(^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/(\\d|[1-2]\\d|3[0-2]))$)'}
|
11
|
+
self.attributes['occi.network.gateway'] = {:mutable => true,
|
12
|
+
:pattern => '(^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$)|(^\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*)'}
|
13
|
+
self.attributes['occi.network.allocation'] = {:mutable => true,
|
14
|
+
:pattern => 'dynamic|static'}
|
15
|
+
|
16
|
+
self.mixin = Occi::Core::Mixin.new scheme='http://schemas.ogf.org/occi/infrastructure/network#',
|
17
|
+
term='ipnetwork',
|
18
|
+
title='IP network mixin',
|
19
|
+
attributes=self.attributes,
|
20
|
+
related=Occi::Core::Related.new << Occi::Infrastructure::Network.kind,
|
21
|
+
actions=Occi::Core::Actions.new,
|
22
|
+
location='/mixins/ipnetwork/'
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
module Occi
|
2
|
+
module Infrastructure
|
3
|
+
class Network < Occi::Core::Resource
|
4
|
+
|
5
|
+
up = Occi::Core::Action.new scheme='http://schemas.ogf.org/occi/infrastructure/network/action#',
|
6
|
+
term='up',
|
7
|
+
title='activate network'
|
8
|
+
|
9
|
+
down = Occi::Core::Action.new scheme='http://schemas.ogf.org/occi/infrastructure/network/action#',
|
10
|
+
term='down',
|
11
|
+
title='deactivate network'
|
12
|
+
|
13
|
+
self.actions = Occi::Core::Actions.new << up << down
|
14
|
+
|
15
|
+
self.attributes = Occi::Core::Attributes.new
|
16
|
+
self.attributes['occi.network.vlan'] = {:type => 'number',
|
17
|
+
:mutable => true,
|
18
|
+
:pattern => 'x86|x64'}
|
19
|
+
self.attributes['occi.network.label'] = {:type => 'number',
|
20
|
+
:mutable => true}
|
21
|
+
self.attributes['occi.network.state'] ={:pattern => 'active|inactive|error',
|
22
|
+
:default => 'inactive'}
|
23
|
+
|
24
|
+
self.kind = Occi::Core::Kind.new scheme='http://schemas.ogf.org/occi/infrastructure#',
|
25
|
+
term='network',
|
26
|
+
title = 'network resource',
|
27
|
+
attributes=self.attributes,
|
28
|
+
related=Occi::Core::Related.new << Occi::Core::Resource.kind,
|
29
|
+
actions = self.actions,
|
30
|
+
location = '/network/'
|
31
|
+
|
32
|
+
require 'occi/infrastructure/network/ipnetwork'
|
33
|
+
self.mixins = Occi::Core::Mixins.new << Occi::Infrastructure::Network::Ipnetwork.mixin
|
34
|
+
|
35
|
+
def ipnetwork(boolean=true)
|
36
|
+
if boolean
|
37
|
+
mixins << Occi::Infrastructure::Network::Ipnetwork.mixin.type_identifier
|
38
|
+
else
|
39
|
+
mixins.delete Occi::Infrastructure::Network::Ipnetwork.mixin.type_identifier
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def vlan
|
44
|
+
@attributes.occi.nework.vlan if @attributes.occi.network if @attributes.occi
|
45
|
+
end
|
46
|
+
|
47
|
+
def vlan=(vlan)
|
48
|
+
@attributes.occi!.network!.vlan = vlan
|
49
|
+
end
|
50
|
+
|
51
|
+
def label
|
52
|
+
@attributes.occi.nework.label if @attributes.occi.network if @attributes.occi
|
53
|
+
end
|
54
|
+
|
55
|
+
def label=(label)
|
56
|
+
@attributes.occi!.network!.label = label
|
57
|
+
end
|
58
|
+
|
59
|
+
def state
|
60
|
+
@attributes.occi.nework.state if @attributes.occi.network if @attributes.occi
|
61
|
+
end
|
62
|
+
|
63
|
+
def state=(state)
|
64
|
+
@attributes.occi!.network!.state = state
|
65
|
+
end
|
66
|
+
|
67
|
+
# IPNetwork Mixin attributes
|
68
|
+
|
69
|
+
def address
|
70
|
+
@attributes.occi.network.address if @attributes.occi.network if @attributes.occi
|
71
|
+
end
|
72
|
+
|
73
|
+
def address=(address)
|
74
|
+
if @mixins.select { |mixin| mixin.kind_of? Occi::Infrastructure::Network::Ipnetwork }.empty?
|
75
|
+
Occi::Log.info 'Adding mixin IPNetwork mixin'
|
76
|
+
@mixins << Occi::Infrastructure::Network::Ipnetwork.new
|
77
|
+
end
|
78
|
+
@attributes.occi!.network!.address = address
|
79
|
+
end
|
80
|
+
|
81
|
+
def gateway
|
82
|
+
@attributes.occi.network.gateway if @attributes.occi.network if @attributes.occi
|
83
|
+
end
|
84
|
+
|
85
|
+
def gateway=(gateway)
|
86
|
+
if @mixins.select { |mixin| mixin.kind_of? Occi::Infrastructure::Network::Ipnetwork }.empty?
|
87
|
+
Occi::Log.info 'Adding mixin IP network'
|
88
|
+
@mixins << Occi::Infrastructure::Network::Ipnetwork.new
|
89
|
+
end
|
90
|
+
@attributes.occi!.network!.gateway = gateway
|
91
|
+
end
|
92
|
+
|
93
|
+
def allocation
|
94
|
+
@attributes.occi.network.allocation if @attributes.occi.network if @attributes.occi
|
95
|
+
end
|
96
|
+
|
97
|
+
def allocation=(allocation)
|
98
|
+
if @mixins.select { |mixin| mixin.kind_of? Occi::Infrastructure::Network::Ipnetwork }.empty?
|
99
|
+
Occi::Log.info 'Adding mixin IPNetwork mixin'
|
100
|
+
@mixins << Occi::Infrastructure::Network::Ipnetwork.new
|
101
|
+
end
|
102
|
+
@attributes.occi!.network!.allocation = allocation
|
103
|
+
end
|
104
|
+
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Occi
|
2
|
+
module Infrastructure
|
3
|
+
class Networkinterface
|
4
|
+
module Ipnetworkinterface
|
5
|
+
|
6
|
+
mattr_accessor :attributes, :mixin
|
7
|
+
|
8
|
+
self.attributes = Occi::Core::Attributes.new
|
9
|
+
self.attributes['occi.networkinterface.address'] = {:mutable => true,
|
10
|
+
:pattern => '(^\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*(\\/(\\d|\\d\\d|1[0-1]\\d|12[0-8]))$)|(^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/(\\d|[1-2]\\d|3[0-2]))$)'}
|
11
|
+
self.attributes['occi.networkinterface.gateway'] = {:mutable => true,
|
12
|
+
:pattern => '(^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$)|(^\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*)'}
|
13
|
+
self.attributes['occi.networkinterface.allocation'] = {:mutable => true,
|
14
|
+
:pattern => 'dynamic|static'}
|
15
|
+
|
16
|
+
self.mixin = Occi::Core::Mixin.new scheme='http://schemas.ogf.org/occi/infrastructure/networkinterface#',
|
17
|
+
term='ipnetworkinterface',
|
18
|
+
title='IP network interface mixin',
|
19
|
+
attributes=self.attributes,
|
20
|
+
related=Occi::Core::Related.new << Occi::Infrastructure::Networkinterface.kind,
|
21
|
+
actions=Occi::Core::Actions.new,
|
22
|
+
location='/mixins/ipnetworkinterface/'
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
module Occi
|
2
|
+
module Infrastructure
|
3
|
+
class Networkinterface < Occi::Core::Link
|
4
|
+
|
5
|
+
up = Occi::Core::Action.new scheme='http://schemas.ogf.org/occi/infrastructure/networkinterface/action#',
|
6
|
+
term='up',
|
7
|
+
title='activate networkinterface'
|
8
|
+
|
9
|
+
down = Occi::Core::Action.new scheme='http://schemas.ogf.org/occi/infrastructure/networkinterface/action#',
|
10
|
+
term='down',
|
11
|
+
title='deactivate networkinterface'
|
12
|
+
|
13
|
+
self.actions = Occi::Core::Actions.new << up << down
|
14
|
+
|
15
|
+
self.attributes = Occi::Core::Attributes.new
|
16
|
+
self.attributes['occi.networkinterface.interface'] ={:mutable => true}
|
17
|
+
self.attributes['occi.networkinterface.mac'] = {:mutable => true,
|
18
|
+
:pattern => '^([0-9a-fA-F]{2}[:-]){5}([0-9a-fA-F]{2})$'}
|
19
|
+
self.attributes['occi.networkinterface.state'] = {:pattern => 'active|inactive|error',
|
20
|
+
:default => 'inactive'}
|
21
|
+
|
22
|
+
self.kind = Occi::Core::Kind.new scheme='http://schemas.ogf.org/occi/infrastructure#',
|
23
|
+
term='networkinterface',
|
24
|
+
title = 'networkinterface link',
|
25
|
+
attributes = self.attributes,
|
26
|
+
related = Occi::Core::Related.new << Occi::Core::Link.kind,
|
27
|
+
actions = self.actions,
|
28
|
+
location = '/networkinterface/'
|
29
|
+
|
30
|
+
require 'occi/infrastructure/networkinterface/ipnetworkinterface'
|
31
|
+
self.mixins = Occi::Core::Mixins.new << Occi::Infrastructure::Networkinterface::Ipnetworkinterface.mixin
|
32
|
+
|
33
|
+
def ipnetworkinterface(boolean=true)
|
34
|
+
if boolean
|
35
|
+
@mixins << Occi::Infrastructure::Networkinterface::Ipnetworkinterface.type_identifier
|
36
|
+
else
|
37
|
+
mixins.delete Occi::Infrastructure::Networkinterface::Ipnetworkinterface.type_identifier
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def interface
|
42
|
+
@attributes.occi.networkinterface.interface if @attributes.occi.networkinterface if @attributes.occi
|
43
|
+
end
|
44
|
+
|
45
|
+
def interface=(interface)
|
46
|
+
@attributes.occi!.networkinterface!.interface = interface
|
47
|
+
end
|
48
|
+
|
49
|
+
def mac
|
50
|
+
@attributes.occi.networkinterface.mac if @attributes.occi.networkinterface if @attributes.occi
|
51
|
+
end
|
52
|
+
|
53
|
+
def mac=(mac)
|
54
|
+
@attributes.occi!.networkinterface!.mac = mac
|
55
|
+
end
|
56
|
+
|
57
|
+
def state
|
58
|
+
@attributes.occi.networkinterface.state if @attributes.occi.networkinterface if @attributes.occi
|
59
|
+
end
|
60
|
+
|
61
|
+
def state=(state)
|
62
|
+
@attributes.occi!.networkinterface!.state = state
|
63
|
+
end
|
64
|
+
|
65
|
+
def address
|
66
|
+
@attributes.occi.networkinterface.address if @attributes.occi.networkinterface if @attributes.occi
|
67
|
+
end
|
68
|
+
|
69
|
+
def address=(address)
|
70
|
+
if @mixins.select { |mixin| mixin.kind_of? Occi::Infrastructure::Networkinterface::Ipnetworkinterface }.empty?
|
71
|
+
Occi::Log.info 'Adding mixin IP network interface'
|
72
|
+
@mixins << Occi::Infrastructure::Networkinterface::Ipnetworkinterface.new
|
73
|
+
end
|
74
|
+
@attributes.occi!.networkinterface!.address = address
|
75
|
+
end
|
76
|
+
|
77
|
+
def gateway
|
78
|
+
@attributes.occi.networkinterface.gateway if @attributes.occi.networkinterface if @attributes.occi
|
79
|
+
end
|
80
|
+
|
81
|
+
def gateway=(gateway)
|
82
|
+
if @mixins.select { |mixin| mixin.kind_of? Occi::Infrastructure::Networkinterface::Ipnetworkinterface }.empty?
|
83
|
+
Occi::Log.info 'Adding mixin IP network interface'
|
84
|
+
@mixins << Occi::Infrastructure::Networkinterface::Ipnetworkinterface.new
|
85
|
+
end
|
86
|
+
@attributes.occi!.networkinterface!.gateway = gateway
|
87
|
+
end
|
88
|
+
|
89
|
+
def allocation
|
90
|
+
@attributes.occi.networkinterface.allocation if @attributes.occi.networkinterface if @attributes.occi
|
91
|
+
end
|
92
|
+
|
93
|
+
def allocation=(allocation)
|
94
|
+
if @mixins.select { |mixin| mixin.kind_of? Occi::Infrastructure::Networkinterface::Ipnetworkinterface }.empty?
|
95
|
+
Occi::Log.info 'Adding mixin IP network interface'
|
96
|
+
@mixins << Occi::Infrastructure::Networkinterface::Ipnetworkinterface.new
|
97
|
+
end
|
98
|
+
@attributes.occi!.networkinterface!.allocation = allocation
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Occi
|
2
|
+
module Infrastructure
|
3
|
+
module Os_tpl
|
4
|
+
|
5
|
+
mattr_accessor :attributes, :mixin
|
6
|
+
|
7
|
+
self.attributes = Occi::Core::Attributes.new
|
8
|
+
|
9
|
+
self.mixin = Occi::Core::Mixin.new scheme='http://schemas.ogf.org/occi/infrastructure#',
|
10
|
+
term='os_tpl',
|
11
|
+
title='operating system template',
|
12
|
+
attributes=self.attributes,
|
13
|
+
related=Occi::Core::Categories.new << Occi::Infrastructure::Compute.kind,
|
14
|
+
actions=Occi::Core::Actions.new,
|
15
|
+
location='/mixins/os_tpl/'
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Occi
|
2
|
+
module Infrastructure
|
3
|
+
module Resource_tpl
|
4
|
+
|
5
|
+
mattr_accessor :attributes, :mixin
|
6
|
+
|
7
|
+
self.attributes = Occi::Core::Attributes.new
|
8
|
+
|
9
|
+
self.mixin = Occi::Core::Mixin.new scheme='http://schemas.ogf.org/occi/infrastructure#',
|
10
|
+
term='resource_tpl',
|
11
|
+
title='resource template',
|
12
|
+
attributes=self.attributes,
|
13
|
+
related=Occi::Core::Categories.new << Occi::Infrastructure::Compute.kind,
|
14
|
+
actions=Occi::Core::Actions.new,
|
15
|
+
location='/mixins/resource_tpl/'
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module Occi
|
2
|
+
module Infrastructure
|
3
|
+
class Storage < Occi::Core::Resource
|
4
|
+
|
5
|
+
online = Occi::Core::Action.new scheme='http://schemas.ogf.org/occi/infrastructure/storage/action#',
|
6
|
+
term='online',
|
7
|
+
title='activate storage'
|
8
|
+
|
9
|
+
offline = Occi::Core::Action.new scheme='http://schemas.ogf.org/occi/infrastructure/storage/action#',
|
10
|
+
term='offline',
|
11
|
+
title='deactivate storage'
|
12
|
+
|
13
|
+
backup = Occi::Core::Action.new scheme='http://schemas.ogf.org/occi/infrastructure/storage/action#',
|
14
|
+
term='backup',
|
15
|
+
title='backup storage'
|
16
|
+
|
17
|
+
snapshot = Occi::Core::Action.new scheme='http://schemas.ogf.org/occi/infrastructure/storage/action#',
|
18
|
+
term='snapshot',
|
19
|
+
title='snapshot storage'
|
20
|
+
|
21
|
+
resize = Occi::Core::Action.new scheme='http://schemas.ogf.org/occi/infrastructure/storage/action#',
|
22
|
+
term='resize',
|
23
|
+
title='resize storage'
|
24
|
+
resize.attributes['size'] = {:type => 'number',
|
25
|
+
:mutable => true}
|
26
|
+
|
27
|
+
self.actions = Occi::Core::Actions.new << online << offline << backup << snapshot << resize
|
28
|
+
|
29
|
+
self.attributes = Occi::Core::Attributes.new
|
30
|
+
self.attributes['occi.storage.size'] = {:type => 'number',
|
31
|
+
:mutable => true}
|
32
|
+
self.attributes['occi.storage.state'] = {:pattern => 'online|offline|backup|snapshot|resize|degraded',
|
33
|
+
:default => 'offline'}
|
34
|
+
|
35
|
+
self.kind = Occi::Core::Kind.new scheme='http://schemas.ogf.org/occi/infrastructure#',
|
36
|
+
term='storage',
|
37
|
+
title = 'storage resource',
|
38
|
+
attributes = self.attributes,
|
39
|
+
related = Occi::Core::Related.new << Occi::Core::Resource.kind,
|
40
|
+
actions = self.actions,
|
41
|
+
location = '/storage/'
|
42
|
+
|
43
|
+
def size
|
44
|
+
@attributes.occi.storage.size if @attributes.occi.storage if @attributes.occi
|
45
|
+
end
|
46
|
+
|
47
|
+
def size=(size)
|
48
|
+
@attributes.occi!.storage!.size = size
|
49
|
+
end
|
50
|
+
|
51
|
+
def state
|
52
|
+
@attributes.occi.storage.state if @attributes.occi.storage if @attributes.occi
|
53
|
+
end
|
54
|
+
|
55
|
+
def state=(state)
|
56
|
+
@attributes.occi!.storage!.state = state
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module Occi
|
2
|
+
module Infrastructure
|
3
|
+
class Storagelink < Occi::Core::Link
|
4
|
+
|
5
|
+
online = Occi::Core::Action.new scheme='http://schemas.ogf.org/occi/infrastructure/storagelink/action#',
|
6
|
+
term='online',
|
7
|
+
title='activate storagelink'
|
8
|
+
|
9
|
+
offline = Occi::Core::Action.new scheme='http://schemas.ogf.org/occi/infrastructure/storagelink/action#',
|
10
|
+
term='offline',
|
11
|
+
title='deactivate storagelink'
|
12
|
+
|
13
|
+
self.actions = Occi::Core::Actions.new << online << offline
|
14
|
+
|
15
|
+
self.attributes = Occi::Core::Attributes.new
|
16
|
+
self.attributes['occi.storagelink.deviceid'] = {:mutable => true}
|
17
|
+
self.attributes['occi.storagelink.mountpoint'] = {:mutable => true}
|
18
|
+
self.attributes['occi.storagelink.state'] = {:pattern => 'active|inactive|error',
|
19
|
+
:default => 'inactive'}
|
20
|
+
|
21
|
+
self.kind = Occi::Core::Kind.new scheme='http://schemas.ogf.org/occi/infrastructure#',
|
22
|
+
term='storagelink',
|
23
|
+
title = 'storage link',
|
24
|
+
attributes = self.attributes,
|
25
|
+
related = Occi::Core::Related.new << Occi::Core::Link.kind,
|
26
|
+
actions = self.actions,
|
27
|
+
location = '/storagelink/'
|
28
|
+
|
29
|
+
|
30
|
+
def deviceid
|
31
|
+
@attributes.occi.storagelink.deviceid if @attributes.occi.storagelink if @attributes.occi
|
32
|
+
end
|
33
|
+
|
34
|
+
def deviceid=(deviceid)
|
35
|
+
@attributes.occi!.storagelink!.deviceid = deviceid
|
36
|
+
end
|
37
|
+
|
38
|
+
def mountpoint
|
39
|
+
@attributes.occi.storagelink.mountpoint if @attributes.occi.storagelink if @attributes.occi
|
40
|
+
end
|
41
|
+
|
42
|
+
def mountpoint=(mountpoint)
|
43
|
+
@attributes.occi!.storagelink!.mountpoint = mountpoint
|
44
|
+
end
|
45
|
+
|
46
|
+
def state
|
47
|
+
@attributes.occi.storagelink.state if @attributes.occi.storagelink if @attributes.occi
|
48
|
+
end
|
49
|
+
|
50
|
+
def state=(state)
|
51
|
+
@attributes.occi!.storagelink!.state = state
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'occi/infrastructure/compute'
|
2
|
+
require 'occi/infrastructure/storage'
|
3
|
+
require 'occi/infrastructure/storagelink'
|
4
|
+
require 'occi/infrastructure/network'
|
5
|
+
require 'occi/infrastructure/networkinterface'
|
6
|
+
|
7
|
+
module Occi
|
8
|
+
module Infrastructure
|
9
|
+
|
10
|
+
extend Occi
|
11
|
+
|
12
|
+
def self.kinds
|
13
|
+
Occi::Core::Kinds.new << Occi::Infrastructure::Compute.kind << Occi::Infrastructure::Storage.kind << Occi::Infrastructure::Network.kind << Occi::Infrastructure::Networkinterface.kind << Occi::Infrastructure::Storagelink.kind
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.mixins
|
17
|
+
Occi::Infrastructure::Compute.mixins + Occi::Infrastructure::Storage.mixins + Occi::Infrastructure::Network.mixins + Occi::Infrastructure::Networkinterface.mixins + Occi::Infrastructure::Storagelink.mixins
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.actions
|
21
|
+
Occi::Infrastructure::Compute.actions + Occi::Infrastructure::Storage.actions + Occi::Infrastructure::Network.actions + Occi::Infrastructure::Networkinterface.actions + Occi::Infrastructure::Storagelink.actions
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|