occi-core 4.2.9 → 4.2.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 048de127a2481ac6c0fffea83b1c94f6823e8204
4
- data.tar.gz: a3428c76af76ab77a58d8835ab9843c651c5ea1e
3
+ metadata.gz: 24ac48413195e65ec6847bb7d4c3ebad5a13e910
4
+ data.tar.gz: 039a79688fea638a32f959e5faa7dbba6e71938a
5
5
  SHA512:
6
- metadata.gz: cc0813f8ebfbacbabd56be0c9dd01fc30ed29c21c966c53c2b534e3d5b6436e8693337d3a1d5421a5e91bf8311ea0d03e00f559c73d36196fa1cd485a2b49b05
7
- data.tar.gz: 4ccef9118f96d9e260f42a7b3101e719b2d9498d88236893eb63f3f09f5f64d4a8111609e8dc71f54e918464fc313d620fecb345eaf04065eb625b3dcabeebfc
6
+ metadata.gz: aa4eeb03ceadf69c476ace568a61d1517b166043a3e0104a0451b569a91f16882a258144ae48254a2ca2d9e7c4c0ec62be9a1c5b9cc9cf62b6fcebd92ecc92f8
7
+ data.tar.gz: f601b3b6bde0c77b61da0c2d7c817761060d2556ff4b716d6f787ae9c5f80e25a2b31e3ca4039ac2c698efb10333f37f2aece544b4c5c04878d9d5d7af5ba29c
data/README.md CHANGED
@@ -14,14 +14,10 @@ Requirements
14
14
  * RubyGems have to be installed
15
15
  * Rake has to be installed (e.g., `gem install rake`)
16
16
 
17
- ### Dependencies
18
- * `libxslt1-dev` or `libxslt-devel`
19
- * `libxml2-dev`or `libxml2-devel`
20
-
21
17
  ### Examples
22
18
  #### For distros based on Debian:
23
19
  ~~~
24
- apt-get install ruby rubygems ruby-dev libxslt1-dev libxml2-dev
20
+ apt-get install ruby rubygems ruby-dev
25
21
  ~~~
26
22
  ~~~
27
23
  ruby -v
@@ -31,7 +27,7 @@ ruby -v
31
27
 
32
28
  #### For distros based on RHEL:
33
29
  ~~~
34
- yum install libxml2-devel libxslt-devel ruby-devel openssl-devel gcc gcc-c++ ruby rubygems
30
+ yum install ruby-devel openssl-devel gcc gcc-c++ ruby rubygems
35
31
  ~~~
36
32
  ~~~
37
33
  ruby -v
@@ -132,30 +128,6 @@ OCCI messages can be parsed to an OCCI collection for example like
132
128
  body = %Q|Category: compute; scheme="http://schemas.ogf.org/occi/infrastructure#"; class="kind"|
133
129
  collection=Occi::Parser.parse(media_type, body)
134
130
 
135
- ### Parsing OVF / OVA files
136
-
137
- Parsing of OVF/OVA files is partly supported and will be improved in future versions.
138
-
139
- The example in [DMTF DSP 2021](http://www.dmtf.org/sites/default/files/standards/documents/DSP2021_1.0.0.tar) is
140
- bundled with rOCCI and can be parsed to an OCCI collection with
141
-
142
- require 'open-uri'
143
- ova=open 'https://raw.github.com/gwdg/rOCCI/master/spec/occi/test.ova'
144
- collection=Occi::Parser.ova(ova.read)
145
-
146
- Currently only the following entries of OVF files are parsed
147
-
148
- * File in References
149
- * Disk in the DiskSection
150
- * Network in the NetworkSection
151
- * In the VirutalSystemSection:
152
- * Info
153
- * in the VirtualHardwareSection the items regarding
154
- * Processor
155
- * Memory
156
- * Ethernet Adapter
157
- * Parallel port
158
-
159
131
  ### Using the OCCI model
160
132
 
161
133
  The occi-core gem includes all OCCI Core classes necessary to handly arbitrary OCCI objects.
data/lib/occi/parser.rb CHANGED
@@ -86,12 +86,6 @@ module Occi
86
86
  collection = parse_body_plain(body, category, entity_type)
87
87
  when 'application/occi+json', 'application/json'
88
88
  collection = Occi::Parser::Json.collection body
89
- when 'application/occi+xml', 'application/xml'
90
- collection = Occi::Parser::Xml.collection body
91
- when 'application/ovf', 'application/ovf+xml'
92
- collection = Occi::Parser::Ovf.collection body
93
- when 'application/ova'
94
- collection = Occi::Parser::Ova.collection body
95
89
  else
96
90
  raise Occi::Errors::ParserTypeError, "Content type #{media_type} not supported"
97
91
  end
data/lib/occi/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Occi
2
- VERSION = "4.2.9" unless defined?(::Occi::VERSION)
2
+ VERSION = "4.2.10" unless defined?(::Occi::VERSION)
3
3
  end
data/lib/occi-core.rb CHANGED
@@ -10,7 +10,6 @@ require 'active_support/notifications'
10
10
 
11
11
  require 'logger'
12
12
  require 'uuidtools'
13
- require 'nokogiri'
14
13
  require 'rubygems/package'
15
14
  require 'zlib'
16
15
  require 'tempfile'
data/occi-core.gemspec CHANGED
@@ -21,7 +21,6 @@ Gem::Specification.new do |gem|
21
21
  gem.add_dependency 'json'
22
22
  gem.add_dependency 'hashie'
23
23
  gem.add_dependency 'uuidtools', '>=2.1.3'
24
- gem.add_dependency 'nokogiri', '~>1.6.0'
25
24
  gem.add_dependency 'activesupport', '~>4.0.0'
26
25
  gem.add_dependency 'settingslogic'
27
26
 
@@ -86,48 +86,6 @@ module Occi
86
86
  end
87
87
  end
88
88
 
89
- it "parses an OVF file" do
90
- media_type = 'application/ovf+xml'
91
- body = File.read('spec/occi/parser/ovf_samples/test.ovf')
92
- collection = Occi::Parser.parse(media_type, body)
93
-
94
- collection.resources.each { |res| res.id="noid" } #Equalize auto-generated IDs
95
-
96
- expected = Marshal.load(File.open("spec/occi/parser/ovf_samples/test.dump", "rb"))
97
- expect(collection).to eql expected
98
- end
99
-
100
- it 'copes with faulty OVF' #do
101
- # expect{ Occi::Parser.parse('application/ovf', "{This is not an OVF}")}.to raise_error(Occi::Errors::ParserInputError)
102
- # end
103
-
104
- it "parses an OVA container" do
105
- media_type = 'application/ova'
106
- body = File.read('spec/occi/parser/ova_samples/test.ova')
107
- collection = Occi::Parser.parse(media_type, body)
108
-
109
- collection.resources.each { |res| res.id="noid" } #Equalize auto-generated IDs
110
-
111
- expected = Marshal.load(File.open("spec/occi/parser/ova_samples/test.dump", "rb"))
112
- expect(collection).to eql expected
113
- end
114
-
115
- it 'copes with faulty OVA' do
116
- expect{ Occi::Parser.parse('application/ova', "{This is not an OVA}")}.to raise_error(Occi::Errors::ParserInputError)
117
- end
118
-
119
- # ZS 11 Oct 2013: XML format not yet properly specified
120
- # it "parses a XML file" do
121
- # media_type = 'application/xml'
122
- # body = File.read('spec/occi/parser/xml_samples/test.xml')
123
- # collection = Occi::Parser.parse(media_type, body)
124
- #
125
- # end
126
-
127
- it 'copes with faulty XML' do
128
- expect{ collection = Occi::Parser.parse('application/xml', "{This is not a XML}") }.to raise_error(Occi::Errors::ParserInputError)
129
- end
130
-
131
89
  it 'copes with non-existent MIME-type' do
132
90
  expect{ collection = Occi::Parser.parse('application/notexist', 'X-OCCI-Location: http://example.com:8090/a/b/vm1"') }.to raise_error(Occi::Errors::ParserTypeError)
133
91
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: occi-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.9
4
+ version: 4.2.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Florian Feldhaus
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2014-02-09 00:00:00.000000000 Z
13
+ date: 2014-02-15 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: json
@@ -54,20 +54,6 @@ dependencies:
54
54
  - - '>='
55
55
  - !ruby/object:Gem::Version
56
56
  version: 2.1.3
57
- - !ruby/object:Gem::Dependency
58
- name: nokogiri
59
- requirement: !ruby/object:Gem::Requirement
60
- requirements:
61
- - - ~>
62
- - !ruby/object:Gem::Version
63
- version: 1.6.0
64
- type: :runtime
65
- prerelease: false
66
- version_requirements: !ruby/object:Gem::Requirement
67
- requirements:
68
- - - ~>
69
- - !ruby/object:Gem::Version
70
- version: 1.6.0
71
57
  - !ruby/object:Gem::Dependency
72
58
  name: activesupport
73
59
  requirement: !ruby/object:Gem::Requirement
@@ -173,11 +159,8 @@ files:
173
159
  - lib/occi/model.rb
174
160
  - lib/occi/parser.rb
175
161
  - lib/occi/parser/json.rb
176
- - lib/occi/parser/ova.rb
177
- - lib/occi/parser/ovf.rb
178
162
  - lib/occi/parser/text.rb
179
163
  - lib/occi/parser/text/constants.rb
180
- - lib/occi/parser/xml.rb
181
164
  - lib/occi/settings.rb
182
165
  - lib/occi/version.rb
183
166
  - occi-core.gemspec
@@ -207,10 +190,6 @@ files:
207
190
  - spec/occi/log_spec.rb
208
191
  - spec/occi/model_spec.rb
209
192
  - spec/occi/parser/json_samples/test.json
210
- - spec/occi/parser/ova_samples/test.dump
211
- - spec/occi/parser/ova_samples/test.ova
212
- - spec/occi/parser/ovf_samples/test.dump
213
- - spec/occi/parser/ovf_samples/test.ovf
214
193
  - spec/occi/parser/text_samples/occi_categories.dump
215
194
  - spec/occi/parser/text_samples/occi_categories.text
216
195
  - spec/occi/parser/text_samples/occi_compute_rocci_server.dump
@@ -240,7 +219,6 @@ files:
240
219
  - spec/occi/parser/text_samples/occi_storage_rocci_server.resource.dump
241
220
  - spec/occi/parser/text_samples/occi_storage_rocci_server.text
242
221
  - spec/occi/parser/text_spec.rb
243
- - spec/occi/parser/xml_samples/test.xml
244
222
  - spec/occi/parser_spec.rb
245
223
  - spec/spec_helper.rb
246
224
  homepage: https://github.com/gwdg/rOCCI-core
@@ -1,41 +0,0 @@
1
- module Occi
2
- module Parser
3
- module Ova
4
-
5
- # @param [String] string
6
- # @return [Occi::Collection]
7
- def self.collection(string)
8
- Occi::Log.debug "[#{self}] Parsing ova format"
9
- tar = Gem::Package::TarReader.new(StringIO.new(string))
10
- ovf = mf = cert = nil
11
- files = {}
12
-
13
- tar.each do |entry|
14
- tempfile = Tempfile.new(entry.full_name)
15
- tempfile.write(entry.read)
16
- tempfile.close
17
- files[entry.full_name] = tempfile.path
18
-
19
- ovf = tempfile.path if entry.full_name.end_with? '.ovf'
20
- mf = tempfile.path if entry.full_name.end_with? '.mf'
21
- cert = tempfile.path if entry.full_name.end_with? '.cert'
22
- end
23
-
24
- Occi::Log.debug "[#{self}] In ova found: #{ovf} #{mf} #{cert}"
25
- raise Occi::Errors::ParserInputError, 'No ovf file found' unless ovf
26
-
27
- File.read(mf).each_line do |line|
28
- line = line.scan(/SHA1\(([^\)]*)\)= (.*)/).flatten
29
- name = line.first
30
- sha1 = line.last
31
-
32
- Occi::Log.debug "[#{self}] SHA1 hash #{Digest::SHA1.hexdigest(files[name])}"
33
- raise Occi::Errors::ParserInputError, "SHA1 mismatch for file #{name}" unless Digest::SHA1.hexdigest(File.read(files[name])) == sha1
34
- end if mf
35
-
36
- Occi::Parser::Ovf.collection(File.read(ovf), files)
37
- end
38
-
39
- end
40
- end
41
- end
@@ -1,211 +0,0 @@
1
- module Occi
2
- module Parser
3
- module Ovf
4
-
5
- # Declaring Class constants for OVF XML namespaces (defined in OVF specification ver.1.1)
6
- OVF ="http://schemas.dmtf.org/ovf/envelope/1"
7
- RASD ="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData"
8
- VSSD ="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData"
9
- OVFENV="http://schemas.dmtf.org/ovf/environment/1"
10
- CIM ="http://schemas.dmtf.org/wbem/wscim/1/common"
11
-
12
- class << self
13
-
14
- # @param [String] string
15
- # @param [Hash] files key value pairs of file names and paths to the file
16
- def collection(string, files={})
17
- collection = Occi::Collection.new
18
- doc = Nokogiri::XML(string)
19
-
20
- references = parse_references(doc, files)
21
- parse_storage(doc, references, collection)
22
- parse_network(doc, collection)
23
- parse_compute(doc, references, collection)
24
-
25
- collection
26
- end
27
-
28
- def parse_references(doc, files)
29
- references = {}
30
-
31
- doc.xpath('envelope:Envelope/envelope:References/envelope:File', 'envelope' => "#{OVF}").each do |file|
32
- href = URI.parse(file.attributes['href'].to_s)
33
- references[file.attributes['id'].to_s] = if href.relative?
34
- files[href.to_s] ? "file://#{files[href.to_s]}" : "file://#{href.to_s}"
35
- else
36
- href.to_s
37
- end
38
- end
39
-
40
- references
41
- end
42
-
43
- def parse_storage(doc, references, collection)
44
- doc.xpath('envelope:Envelope/envelope:DiskSection/envelope:Disk', 'envelope' => "#{OVF}").each do |disk|
45
- storage = Occi::Infrastructure::Storage.new
46
-
47
- if disk.attributes['fileRef']
48
- parse_storage_disk_file(disk, storage, references)
49
- else
50
- parse_storage_disk_alloc(disk, storage, references)
51
- end
52
-
53
- collection.resources << storage
54
- end
55
-
56
- collection
57
- end
58
-
59
- def parse_storage_disk_file(disk, storage, references)
60
- storagelink = Occi::Infrastructure::Storagelink.new
61
- storagelink.title = disk.attributes['fileRef'].to_s
62
- storagelink.target = references[disk.attributes['fileRef'].to_s]
63
-
64
- storage.title = disk.attributes['diskId'].to_s
65
- storage.links << storagelink
66
-
67
- storage
68
- end
69
-
70
- def parse_storage_disk_alloc(disk, storage)
71
- #OCCI accepts storage size in GB
72
- #OVF ver 1.1: The capacity of a virtual disk shall be specified by the ovf:capacity attribute with an xs:long integer
73
- #value. The default unit odf allocation shall be bytes. The optional string attribute
74
- #ovf:capacityAllocationUnits may be used to specify a particular unit of allocation.
75
- alloc_units = disk.attributes['capacityAllocationUnits'].to_s
76
-
77
- if alloc_units.empty?
78
- # The capacity is defined in bytes, convert to GB and pass it to OCCI
79
- capacity = disk.attributes['capacity'].to_s.to_i
80
- else
81
- alloc_unit_bytes = alloc_units_bytes(alloc_units)
82
- capacity = calculate_capacity_bytes(disk.attributes['capacity'].to_s, alloc_unit_bytes)
83
- end
84
-
85
- capacity_gb = calculate_capacity_gb(capacity)
86
- storage.size = capacity_gb.to_s if capacity_gb
87
- storage.title = disk.attributes['diskId'].to_s if disk.attributes['diskId']
88
-
89
- storage
90
- end
91
-
92
- def parse_network(doc, collection)
93
- doc.xpath('envelope:Envelope/envelope:NetworkSection/envelope:Network', 'envelope' => "#{OVF}").each do |nw|
94
- network = Occi::Infrastructure::Network.new
95
- network.title = nw.attributes['name'].to_s
96
- collection.resources << network
97
- end
98
-
99
- collection
100
- end
101
-
102
- def parse_compute(doc, references, collection)
103
- # Iteration through all the virtual hardware sections,and a sub-iteration on each Item defined in the Virtual Hardware section
104
- doc.xpath('envelope:Envelope/envelope:VirtualSystem', 'envelope' => "#{OVF}").each do |virtsys|
105
- compute = Occi::Infrastructure::Compute.new
106
-
107
- doc.xpath('envelope:Envelope/envelope:VirtualSystem/envelope:VirtualHardwareSection', 'envelope' => "#{OVF}").each do |virthwsec|
108
- compute.summary = virthwsec.xpath("item:Info/text()", 'item' => "#{RASD}").to_s
109
- parse_compute_resources(collection, compute, virthwsec)
110
- end
111
-
112
- collection.resources << compute
113
- end
114
-
115
- collection
116
- end
117
-
118
- def parse_compute_resources(collection, compute, virthwsec)
119
- virthwsec.xpath('envelope:Item', 'envelope' => "#{OVF}").each do |resource_alloc|
120
- resType = resource_alloc.xpath("item:ResourceType/text()", 'item' => "#{RASD}")
121
-
122
- case resType.to_s
123
- when "4" then
124
- # 4 is the ResourceType for memory in the CIM_ResourceAllocationSettingData
125
- parse_compute_memory(resource_alloc, compute)
126
- when "3" then
127
- # 3 is the ResourceType for processor in the CIM_ResourceAllocationSettingData
128
- compute.cores = resource_alloc.xpath("item:VirtualQuantity/text()", 'item' => "#{RASD}").to_s.to_i
129
- when "10" then
130
- # extract the network
131
- parse_compute_network(resource_alloc, compute, collection)
132
- when "17" then
133
- # extract the mountpoint
134
- parse_compute_storage(resource_alloc, compute, collection)
135
- end
136
-
137
- ##Add the cpu architecture
138
- #system_sec = virthwsec.xpath('envelope:System', 'envelope' => "#{OVF}")
139
- #compute.architecture = system_sec.xpath('vssd_:VirtualSystemType/text()', 'vssd_' => "#{VSSD}")
140
- end
141
-
142
- compute
143
- end
144
-
145
- def parse_compute_memory(resource_alloc, compute)
146
- alloc_units = resource_alloc.xpath("item:AllocationUnits/text()", 'item' => "#{RASD}").to_s
147
-
148
- alloc_unit_bytes = alloc_units_bytes(alloc_units)
149
- capacity = calculate_capacity_bytes(resource_alloc.xpath("item:VirtualQuantity/text()", 'item' => "#{RASD}").to_s, alloc_unit_bytes)
150
- capacity_gb = calculate_capacity_gb(capacity)
151
-
152
- compute.memory = capacity_gb
153
- # compute.attributes.occi!.compute!.memory = resource_alloc.xpath("item:VirtualQuantity/text()", 'item' => "#{RASD}").to_s.to_i
154
-
155
- compute
156
- end
157
-
158
- def parse_compute_network(resource_alloc, compute, collection)
159
- id = resource_alloc.xpath("item:Connection/text()", 'item' => "#{RASD}").to_s
160
- network = collection.resources.select { |resource| resource.title == id }.first
161
- raise Occi::Errors::ParserInputError, "Network with id #{id} not found" unless network
162
-
163
- networkinterface = compute.networkinterface(network)
164
- networkinterface.title = resource_alloc.xpath("item:ElementName/text()", 'item' => "#{RASD}").to_s
165
-
166
- compute
167
- end
168
-
169
- def parse_compute_storage(resource_alloc, compute, collection)
170
- host_resource = resource_alloc.xpath("item:HostResource/text()", 'item' => "#{RASD}").to_s
171
-
172
- if host_resource.start_with? 'ovf:/disk/'
173
- id = host_resource.gsub('ovf:/disk/', '')
174
- storage = collection.resources.select { |resource| resource.title == id }.first
175
- raise Occi::Errors::ParserInputError, "Disk with id #{id} not found" unless storage
176
- elsif host_resource.start_with? 'ovf:/file/'
177
- raise Occi::Errors::ParserInputError, 'OVF files are not supported!'
178
- #id = host_resource.gsub('ovf:/file/', '')
179
- #storagelink.attributes.occi!.core!.target = references[id]
180
- end
181
-
182
- storagelink = compute.storagelink(storage)
183
- storagelink.title = resource_alloc.xpath("item:ElementName/text()", 'item' => "#{RASD}").to_s
184
-
185
- compute
186
- end
187
-
188
- def calculate_capacity_bytes(capacity, alloc_units_bytes)
189
- total_capacity_bytes = alloc_units_bytes * capacity.to_i
190
- total_capacity_bytes
191
- end
192
-
193
- def calculate_capacity_gb(capacity)
194
- capacity_gb = capacity.to_f/(2**30)
195
- capacity_gb
196
- end
197
-
198
- def alloc_units_bytes(alloc_units)
199
- units = alloc_units.split('*')
200
- #check units[1] is nil??
201
- units[1].strip!
202
- alloc_vars = units[1].split('^')
203
- alloc_units_bytes = (alloc_vars[0].to_i**alloc_vars[1].to_i)
204
- alloc_units_bytes
205
- end
206
-
207
- end
208
-
209
- end
210
- end
211
- end
@@ -1,20 +0,0 @@
1
- module Occi
2
- module Parser
3
- module Xml
4
- # @param [String] string
5
- # @return [Occi::Collection]
6
- def self.collection(string)
7
-
8
- begin
9
- parsed_xml = Nokogiri::XML(string) { |config| config.strict.nonet }
10
- rescue Nokogiri::XML::SyntaxError => perr
11
- Occi::Log.error "[#{self}] Failed to parse XML input: #{perr.message}"
12
- raise Occi::Errors::ParserInputError, perr.message
13
- end
14
-
15
- hash = Hashie::Mash.new(Hash.from_xml(parsed_xml))
16
- Occi::Collection.new(hash)
17
- end
18
- end
19
- end
20
- end
Binary file
Binary file
Binary file
@@ -1,198 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3
- xmlns:vssd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData"
4
- xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData"
5
- xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1"
6
- xmlns="http://schemas.dmtf.org/ovf/envelope/1"
7
- xsi:schemaLocation="http://schemas.dmtf.org/ovf/envelope/1 ../dsp8023.xsd">
8
-
9
- <!-- This example reference a local schema file, to validate against online schema use:
10
- xsi:schemaLocation="http://schemas.dmtf.org/ovf/envelope/1 http://schemas.dmtf.org/ovf/envelope/1/dsp8023_1.0.0.xsd"
11
- -->
12
-
13
- <!-- References to all external files -->
14
- <References>
15
- <File ovf:id="lamp" ovf:href="http://example.com/lamp.vmdk" ovf:size="180114671"/>
16
- </References>
17
- <!-- Describes meta-information about all virtual disks in the package -->
18
- <DiskSection>
19
- <Info>List of the virtual disks used in the package</Info>
20
- <Disk ovf:diskId="lamp" ovf:fileRef="lamp" ovf:capacity="4294967296"
21
- ovf:populatedSize="1924967692"
22
- ovf:format="http://www.vmware.com/interfaces/specifications/vmdk.html#streamOptimized"/>
23
- </DiskSection>
24
- <!-- Describes all networks used in the package -->
25
- <NetworkSection>
26
- <Info>Logical networks used in the package</Info>
27
- <Network ovf:name="VM Network">
28
- <Description>The network that the LAMP Service will be available
29
- on</Description>
30
- </Network>
31
- </NetworkSection>
32
- <VirtualSystem ovf:id="MyLampService">
33
- <Info>Single-VM Virtual appliance with LAMP stack</Info>
34
- <Name>LAMP Virtual Appliance</Name>
35
- <!-- Overall information about the product -->
36
- <ProductSection>
37
- <Info>Product information for the service</Info>
38
- <Product>Lamp Service</Product>
39
- <Version>1.0</Version>
40
- <FullVersion>1.0.0</FullVersion>
41
- </ProductSection>
42
- <!-- Linux component configuration parameters -->
43
- <ProductSection ovf:class="org.linuxdist.x">
44
- <Info>Product customization for the installed Linux system</Info>
45
- <Product>Linux Distribution X</Product>
46
- <Version>2.6.3</Version>
47
- <Property ovf:key="hostname" ovf:type="string">
48
- <Description>Specifies the hostname for the appliance</Description>
49
- </Property>
50
- <Property ovf:key="ip" ovf:type="string">
51
- <Description>Specifies the IP address for the appliance</Description>
52
- </Property>
53
- <Property ovf:key="subnet" ovf:type="string">
54
- <Description> Specifies the subnet to use on the deployed network
55
- </Description>
56
- </Property>
57
- <Property ovf:key="gateway" ovf:type="string">
58
- <Description> Specifies the gateway on the deployed network
59
- </Description>
60
- </Property>
61
- <Property ovf:key="dns" ovf:type="string">
62
- <Description> A comma separated list of DNS servers on the deployed
63
- network </Description>
64
- </Property>
65
- <Property ovf:key="netCoreRmemMaxMB" ovf:type="uint16" ovf:value="16"
66
- ovf:userConfigurable="true">
67
- <Description> Specify TCP read max buffer size in mega bytes. Default is
68
- 16. </Description>
69
- </Property>
70
- <Property ovf:key="netCoreWmemMaxMB" ovf:type="uint16" ovf:value="16"
71
- ovf:userConfigurable="true">
72
- <Description> Specify TCP write max buffer size in mega bytes. Default is
73
- 16. </Description>
74
- </Property>
75
- </ProductSection>
76
- <!-- Apache component configuration parameters -->
77
- <ProductSection ovf:class="org.apache.httpd">
78
- <Info>Product customization for the installed Apache Web Server</Info>
79
- <Product>Apache Distribution Y</Product>
80
- <Version>2.6.6</Version>
81
- <Property ovf:key="httpPort" ovf:type="uint16" ovf:value="80"
82
- ovf:userConfigurable="true">
83
- <Description>Port number for HTTP requests</Description>
84
- </Property>
85
- <Property ovf:key="httpsPort" ovf:type="uint16" ovf:value="443"
86
- ovf:userConfigurable="true">
87
- <Description>Port number for HTTPS requests</Description>
88
- </Property>
89
- <Property ovf:key="startThreads" ovf:type="uint16" ovf:value="50"
90
- ovf:userConfigurable="true">
91
- <Description>Number of threads created on startup. </Description>
92
- </Property>
93
- <Property ovf:key="minSpareThreads" ovf:type="uint16" ovf:value="15"
94
- ovf:userConfigurable="true">
95
- <Description> Minimum number of idle threads to handle request spikes.
96
- </Description>
97
- </Property>
98
- <Property ovf:key="maxSpareThreads" ovf:type="uint16" ovf:value="30"
99
- ovf:userConfigurable="true">
100
- <Description>Maximum number of idle threads </Description>
101
- </Property>
102
- <Property ovf:key="maxClients" ovf:type="uint16" ovf:value="256"
103
- ovf:userConfigurable="true">
104
- <Description>Limit the number of simultaneous requests that will be
105
- served. </Description>
106
- </Property>
107
- </ProductSection>
108
- <!-- MySQL component configuration parameters -->
109
- <ProductSection ovf:class="org.mysql.db">
110
- <Info>Product customization for the installed MySql Database Server</Info>
111
- <Product>MySQL Distribution Z</Product>
112
- <Version>5.0</Version>
113
- <Property ovf:key="queryCacheSizeMB" ovf:type="uint16" ovf:value="32"
114
- ovf:userConfigurable="true">
115
- <Description>Buffer to cache repeated queries for faster access (in
116
- MB)</Description>
117
- </Property>
118
- <Property ovf:key="maxConnections" ovf:type="uint16" ovf:value="500"
119
- ovf:userConfigurable="true">
120
- <Description>The number of concurrent connections that can be
121
- served</Description>
122
- </Property>
123
- <Property ovf:key="waitTimeout" ovf:type="uint16" ovf:value="100"
124
- ovf:userConfigurable="true">
125
- <Description>Number of seconds to wait before timing out a connection
126
- </Description>
127
- </Property>
128
- </ProductSection>
129
- <!-- PHP component configuration parameters -->
130
- <ProductSection ovf:class="net.php">
131
- <Info>Product customization for the installed PHP component</Info>
132
- <Product>PHP Distribution U</Product>
133
- <Version>5.0</Version>
134
- <Property ovf:key="sessionTimeout" ovf:type="uint16" ovf:value="5"
135
- ovf:userConfigurable="true">
136
- <Description> How many minutes a session has to be idle before it is
137
- timed out </Description>
138
- </Property>
139
- <Property ovf:key="concurrentSessions" ovf:type="uint16" ovf:value="500"
140
- ovf:userConfigurable="true">
141
- <Description> The number of concurrent sessions that can be served
142
- </Description>
143
- </Property>
144
- <Property ovf:key="memoryLimit" ovf:type="uint16" ovf:value="32"
145
- ovf:userConfigurable="true">
146
- <Description> How much memory in megabytes a script can consume before
147
- being killed </Description>
148
- </Property>
149
- </ProductSection>
150
- <OperatingSystemSection ovf:id="36">
151
- <Info>Guest Operating System</Info>
152
- <Description>Linux 2.6.x</Description>
153
- </OperatingSystemSection>
154
- <VirtualHardwareSection>
155
- <Info>Virtual Hardware Requirements: 256MB, 1 CPU, 1 disk, 1 NIC</Info>
156
- <System>
157
- <vssd:ElementName>Virtual Hardware Family</vssd:ElementName>
158
- <vssd:InstanceID>0</vssd:InstanceID>
159
- <vssd:VirtualSystemType>vmx-04</vssd:VirtualSystemType>
160
- </System>
161
- <Item>
162
- <rasd:Description>Number of virtual CPUs</rasd:Description>
163
- <rasd:ElementName>1 virtual CPU</rasd:ElementName>
164
- <rasd:InstanceID>1</rasd:InstanceID>
165
- <rasd:ResourceType>3</rasd:ResourceType>
166
- <rasd:VirtualQuantity>1</rasd:VirtualQuantity>
167
- </Item>
168
- <Item>
169
- <rasd:AllocationUnits>byte * 2^20</rasd:AllocationUnits>
170
- <rasd:Description>Memory Size</rasd:Description>
171
- <rasd:ElementName>256 MB of memory</rasd:ElementName>
172
- <rasd:InstanceID>2</rasd:InstanceID>
173
- <rasd:ResourceType>4</rasd:ResourceType>
174
- <rasd:VirtualQuantity>256</rasd:VirtualQuantity>
175
- </Item>
176
- <Item>
177
- <rasd:AutomaticAllocation>true</rasd:AutomaticAllocation>
178
- <rasd:Connection>VM Network</rasd:Connection>
179
- <rasd:ElementName>Ethernet adapter on "VM Network"</rasd:ElementName>
180
- <rasd:InstanceID>3</rasd:InstanceID>
181
- <rasd:ResourceType>10</rasd:ResourceType>
182
- </Item>
183
- <Item>
184
- <rasd:ElementName>SCSI Controller 0 - LSI Logic</rasd:ElementName>
185
- <rasd:InstanceID>4</rasd:InstanceID>
186
- <rasd:ResourceSubType>LsiLogic</rasd:ResourceSubType>
187
- <rasd:ResourceType>6</rasd:ResourceType>
188
- </Item>
189
- <Item>
190
- <rasd:ElementName>Harddisk 1</rasd:ElementName>
191
- <rasd:HostResource>ovf:/disk/lamp</rasd:HostResource>
192
- <rasd:InstanceID>5</rasd:InstanceID>
193
- <rasd:Parent>4</rasd:Parent>
194
- <rasd:ResourceType>17</rasd:ResourceType>
195
- </Item>
196
- </VirtualHardwareSection>
197
- </VirtualSystem>
198
- </Envelope>
@@ -1,352 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <occi:extension xmlns:occi="http://schemas.ogf.org/occi"
3
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
4
- scheme="http://schemas.ogf.org/occi/infrastructure" name="infrastructure" >
5
- <!--
6
- Compute Resource
7
- -->
8
- <occi:kind term="compute" title="Compute Resource" >
9
- <xsd:annotation>
10
- <xsd:documentation xml:lang="en" >Information processing resources.</xsd:documentation>
11
- </xsd:annotation>
12
- <occi:related scheme="http://schemas.ogf.org/occi/core" term="resource" />
13
- <occi:attribute name="occi.compute.architecture" mutable="true" >
14
- <xsd:annotation>
15
- <xsd:documentation xml:lang="en" >CPU architecture of the instance</xsd:documentation>
16
- </xsd:annotation>
17
- <xsd:simpleType>
18
- <xsd:restriction base="xsd:string" >
19
- <xsd:enumeration name="x86" />
20
- <xsd:enumeration name="x64" />
21
- </xsd:restriction>
22
- </xsd:simpleType>
23
- </occi:attribute>
24
- <occi:attribute name="occi.compute.cores" type="xsd:integer" >
25
- <xsd:annotation>
26
- <xsd:documentation xml:lang="en" >Number of CPU cores assigned to the instance</xsd:documentation>
27
- </xsd:annotation>
28
- </occi:attribute>
29
- <occi:attribute name="occi.compute.hostname" type="xsd:string" >
30
- <xsd:annotation>
31
- <xsd:documentation xml:lang="en" >Fully qualified DNS hostname for the instance</xsd:documentation>
32
- </xsd:annotation>
33
- </occi:attribute>
34
- <occi:attribute name="occi.compute.speed" type="xsd:float" >
35
- <xsd:annotation>
36
- <xsd:documentation xml:lang="en" >CPU clock frequency (speed) in gigahertz</xsd:documentation>
37
- </xsd:annotation>
38
- </occi:attribute>
39
- <occi:attribute name="occi.compute.memory" type="xsd:float" >
40
- <xsd:annotation>
41
- <xsd:documentation xml:lang="en" >Maximum RAM in gigabytes allocated to the instance</xsd:documentation>
42
- </xsd:annotation>
43
- </occi:attribute>
44
- <occi:attribute name="occi.compute.state" mutable="false" use="required" >
45
- <xsd:annotation>
46
- <xsd:documentation xml:lang="en" >Current state of the instance</xsd:documentation>
47
- </xsd:annotation>
48
- <xsd:simpleType>
49
- <xsd:restriction base="xsd:string" >
50
- <xsd:enumeration name="active" />
51
- <xsd:enumeration name="inactive" />
52
- </xsd:restriction>
53
- </xsd:simpleType>
54
- </occi:attribute>
55
- <occi:action scheme="./compute/action" term="start" />
56
- <occi:action scheme="./compute/action" term="stop" >
57
- <occi:attribute name="method" >
58
- <xsd:simpleType>
59
- <xsd:restriction base="xsd:string" >
60
- <xsd:enumeration name="graceful" />
61
- <xsd:enumeration name="acpioff" />
62
- <xsd:enumeration name="poweroff" />
63
- </xsd:restriction>
64
- </xsd:simpleType>
65
- </occi:attribute>
66
- </occi:action>
67
- <occi:action scheme="./compute/action" term="restart" >
68
- <occi:attribute name="method" >
69
- <xsd:simpleType>
70
- <xsd:restriction base="xsd:string" >
71
- <xsd:enumeration name="graceful" />
72
- <xsd:enumeration name="warm" />
73
- <xsd:enumeration name="cold" />
74
- </xsd:restriction>
75
- </xsd:simpleType>
76
- </occi:attribute>
77
- </occi:action>
78
- <occi:action scheme="./compute/action" term="suspend" >
79
- <occi:attribute name="method" >
80
- <xsd:simpleType>
81
- <xsd:restriction base="xsd:string" >
82
- <xsd:enumeration name="hibernate" />
83
- <xsd:enumeration name="suspend" />
84
- </xsd:restriction>
85
- </xsd:simpleType>
86
- </occi:attribute>
87
- </occi:action>
88
- </occi:kind>
89
- <!--
90
- Storage Resource
91
- -->
92
- <occi:kind term="storage" title="Storage Resource" >
93
- <xsd:annotation>
94
- <xsd:documentation xml:lang="en" >Information recording resources.</xsd:documentation>
95
- </xsd:annotation>
96
- <occi:related scheme="http://schemas.ogf.org/occi/core" term="resource" />
97
- <occi:attribute name="occi.storage.size" type="xsd:float" use="required" >
98
- <xsd:annotation>
99
- <xsd:documentation xml:lang="en" >Storage size in gigabytes of the instance.</xsd:documentation>
100
- </xsd:annotation>
101
- </occi:attribute>
102
- <occi:attribute name="occi.storage.state" mutable="false" use="required" >
103
- <xsd:annotation>
104
- <xsd:documentation xml:lang="en" >Current status of the instance</xsd:documentation>
105
- </xsd:annotation>
106
- <xsd:simpleType>
107
- <xsd:restriction base="xsd:string" >
108
- <xsd:enumeration name="online" />
109
- <xsd:enumeration name="offline" />
110
- <xsd:enumeration name="backup" />
111
- <xsd:enumeration name="snapshot" />
112
- <xsd:enumeration name="resize" />
113
- <xsd:enumeration name="degraded" />
114
- </xsd:restriction>
115
- </xsd:simpleType>
116
- </occi:attribute>
117
- <occi:action scheme="./storage/action" term="online" />
118
- <occi:action scheme="./storage/action" term="offline" />
119
- <occi:action scheme="./storage/action" term="backup" />
120
- <occi:action scheme="./storage/action" term="snapshot" />
121
- <occi:action scheme="./storage/action" term="resize" >
122
- <occi:attribute name="size" type="xsd:float" >
123
- <xsd:annotation>
124
- <xsd:documentation xml:lang="en" >gigabytes</xsd:documentation>
125
- </xsd:annotation>
126
- </occi:attribute>
127
- </occi:action>
128
- </occi:kind>
129
- <!--
130
- StorageLink Link
131
- -->
132
- <occi:kind term="storagelink" title="StorageLink Link" >
133
- <occi:related scheme="http://schemas.ogf.org/occi/core" term="link" />
134
- <occi:attribute name="occi.storagelink.deviceid" use="required" type="xsd:string" >
135
- <xsd:annotation>
136
- <xsd:documentation xml:lang="en" >
137
- Device identifier as defined by the OCCI service provider.
138
- </xsd:documentation>
139
- </xsd:annotation>
140
- </occi:attribute>
141
- <occi:attribute name="occi.storagelink.mountpoint" type="xsd:string" >
142
- <xsd:annotation>
143
- <xsd:documentation xml:lang="en" >
144
- Point to where the storage is mounted in the guest OS.
145
- </xsd:documentation>
146
- </xsd:annotation>
147
- </occi:attribute>
148
- <occi:attribute name="occi.storagelink.state" use="required" mutable="false" >
149
- <xsd:annotation>
150
- <xsd:documentation xml:lang="en" >
151
- Current status of the instance.
152
- </xsd:documentation>
153
- </xsd:annotation>
154
- <xsd:simpleType>
155
- <xsd:restriction base="xsd:string" >
156
- <xsd:enumeration name="active" />
157
- <xsd:enumeration name="inactive" />
158
- </xsd:restriction>
159
- </xsd:simpleType>
160
- </occi:attribute>
161
- </occi:kind>
162
- <!--
163
- Network
164
- -->
165
- <occi:kind term="network" title="Network Resource" >
166
- <xsd:annotation>
167
- <xsd:documentation xml:lang="en" >
168
- Interconnection resoruce and represents a L2 networking
169
- resource. This is complimented by the IPNetwork Mixin.
170
- </xsd:documentation>
171
- </xsd:annotation>
172
- <occi:related scheme="http://schemas.ogf.org/occi/core" term="resource" />
173
- <occi:attribute name="occi.network.vlan" mutable="true" >
174
- <xsd:simpleType>
175
- <xsd:restriction base="xsd:integer" >
176
- <xsd:minInclusive value="0" />
177
- <xsd:maxInclusive value="4095" />
178
- </xsd:restriction>
179
- </xsd:simpleType>
180
- <xsd:annotation>
181
- <xsd:documentation xml:lang="en" >802.1q VLAN identifier (e.g 343)</xsd:documentation>
182
- </xsd:annotation>
183
- </occi:attribute>
184
- <occi:attribute name="occi.network.label" mutable="true" type="xsd:string" >
185
- <xsd:annotation>
186
- <xsd:documentation xml:lang="en" >Tag based VLANs (e.g. external-dmz)</xsd:documentation>
187
- </xsd:annotation>
188
- </occi:attribute>
189
- <occi:attribute name="occi.network.state" mutable="false" use="required" >
190
- <xsd:annotation>
191
- <xsd:documentation xml:lang="en" >Current state of the instance</xsd:documentation>
192
- </xsd:annotation>
193
- <xsd:simpleType>
194
- <xsd:restriction base="xsd:string" >
195
- <xsd:enumeration name="active" />
196
- <xsd:enumeration name="inactive" />
197
- </xsd:restriction>
198
- </xsd:simpleType>
199
- </occi:attribute>
200
- <occi:action scheme="./network/action" term="up" />
201
- <occi:action scheme="./network/action" term="down" />
202
- </occi:kind>
203
- <!--
204
- NetworkInterface Link
205
- -->
206
- <occi:kind term="networkinterface" title="NetworkInterface Link" >
207
- <occi:related scheme="http://schemas.ogf.org/occi/core" term="link" />
208
- <occi:attribute name="occi.networkinterface.interface" mutable="false" type="xsd:string" use="required" >
209
- <xsd:annotation>
210
- <xsd:documentation xml:lang="en" >
211
- Identifier that relates the link to the link's device
212
- interface.
213
- </xsd:documentation>
214
- </xsd:annotation>
215
- </occi:attribute>
216
- <occi:attribute name="occi.networkinterface.mac" type="occi:mac802" use="required" >
217
- <xsd:annotation>
218
- <xsd:documentation xml:lang="en" >
219
- MAC address associated with the link's device interface.
220
- </xsd:documentation>
221
- </xsd:annotation>
222
- </occi:attribute>
223
- <occi:attribute name="occi.networkinterface.state" mutable="false" use="required" >
224
- <xsd:annotation>
225
- <xsd:documentation xml:lang="en" >Current status of the instance.</xsd:documentation>
226
- </xsd:annotation>
227
- <xsd:simpleType>
228
- <xsd:restriction base="xsd:string" >
229
- <xsd:enumeration name="active" />
230
- <xsd:enumeration name="inactive" />
231
- </xsd:restriction>
232
- </xsd:simpleType>
233
- </occi:attribute>
234
- </occi:kind>
235
- <!--
236
- IP Networking Mixin
237
- -->
238
- <occi:mixin term="ipnetwork" title="IP Networking Mixin" scheme="./network" >
239
- <xsd:annotation>
240
- <xsd:documentation xml:lang="en" >
241
- IPNetworking Mixin is defined in order to support L3/L4 capabilities
242
- </xsd:documentation>
243
- </xsd:annotation>
244
- <occi:attribute name="occi.network.address" type="occi:cidr" >
245
- <xsd:annotation>
246
- <xsd:documentation xml:lang="en" >
247
- Internet Protocol (IP) network address (e.g. 192.168.0.1/24, fc00::/7)
248
- </xsd:documentation>
249
- </xsd:annotation>
250
- </occi:attribute>
251
- <occi:attribute name="occi.network.gateway" type="occi:ip" >
252
- <xsd:annotation>
253
- <xsd:documentation xml:lang="en" >
254
- Internet Protocol (IP) network address (e.g. 192.168.0.1, fc00::/7)
255
- </xsd:documentation>
256
- </xsd:annotation>
257
- </occi:attribute>
258
- <occi:attribute name="occi.network.allocation" use="required" >
259
- <xsd:annotation>
260
- <xsd:documentation xml:lang="en" >
261
- Address allocation mechanism, 'dynamic' e.g. uses the
262
- dynamic host configuration protocol, 'static' e.g. uses
263
- user supplied static network configurations.
264
- </xsd:documentation>
265
- </xsd:annotation>
266
- <xsd:simpleType>
267
- <xsd:restriction base="xsd:string" >
268
- <xsd:enumeration name="dynamic" />
269
- <xsd:enumeration name="static" />
270
- </xsd:restriction>
271
- </xsd:simpleType>
272
- </occi:attribute>
273
- </occi:mixin>
274
- <!--
275
- IP NetworkInterface Mixin
276
- -->
277
- <occi:mixin term="ipnetworkinterface" title="IP Network Interface Mixin" scheme="./networkinterface" >
278
- <xsd:annotation>
279
- <xsd:documentation xml:lang="en" >
280
- IPNetworkInterface mixin is described in order for
281
- NetworkInterface to support L3/L4 capabilities (e.g. IP, TCP
282
- etc.).
283
- </xsd:documentation>
284
- </xsd:annotation>
285
- <occi:attribute name="occi.networkinterface.address" type="occi:cidr" use="required" >
286
- <xsd:annotation>
287
- <xsd:documentation xml:lang="en" >
288
- Internet Procotol (IP) network address (e.g. 192.168.0.1/24,
289
- fc00::/7) of the link.
290
- </xsd:documentation>
291
- </xsd:annotation>
292
- </occi:attribute>
293
- <occi:attribute name="occi.networkinterface.gateway" type="occi:ip">
294
- <xsd:annotation>
295
- <xsd:documentation xml:lang="en" >
296
- Internet Protocol (IP) network address (e.g. 192.168.0.1/24, fc00::/7)
297
- </xsd:documentation>
298
- </xsd:annotation>
299
- </occi:attribute>
300
- <occi:attribute name="occi.networkinterface.allocation" use="required" >
301
- <xsd:annotation>
302
- <xsd:documentation xml:lang="en" >
303
- Address mechanism, 'dynamic' e.g. uses the
304
- dynamic host configuration protocol, 'static' e.g. uses
305
- user supplied static network configurations.
306
- </xsd:documentation>
307
- </xsd:annotation>
308
- <xsd:simpleType>
309
- <xsd:restriction base="xsd:string" >
310
- <xsd:enumeration name="dynamic" />
311
- <xsd:enumeration name="static" />
312
- </xsd:restriction>
313
- </xsd:simpleType>
314
- </occi:attribute>
315
- </occi:mixin>
316
- <!--
317
- OS template
318
- -->
319
- <occi:mixin term="os_tpl" title="OS Template" />
320
- <!--
321
- Resource template
322
- -->
323
- <occi:mixin term="resource_tpl" title="Resoruce template" />
324
- <!--
325
- Attribute Types
326
- -->
327
- <xsd:simpleType name="ip">
328
- <xsd:annotation>
329
- <xsd:documentation xml:lang="en">
330
- The datatype denoting a string corresponding to a IPv4 or IPv6 address.
331
- </xsd:documentation>
332
- </xsd:annotation>
333
- <xsd:restriction base="xsd:string">
334
- <xsd:pattern value="(((([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])\.){3}([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5]))|((([\da-fA-F]{1,4})|(\:))\:){7}(([\da-fA-F]{1,4})|(\:))))"/>
335
- </xsd:restriction>
336
- </xsd:simpleType>
337
- <xsd:simpleType name="cidr" >
338
- <xsd:annotation>
339
- <xsd:documentation xml:lang="en">
340
- The datatype denoting a string corresponding to a CIDR block.
341
- </xsd:documentation>
342
- </xsd:annotation>
343
- <xsd:restriction base="xsd:string">
344
- <xsd:pattern value="(((([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])\.){3}([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])\/(\d|[1-2]\d|3[0-2]))|((([\da-fA-F]{0,4})|(\:))\:){7}(([\da-fA-F]{0,4})|(\:)))\/([1-9]?\d|1[01]\d|12[0-8])))"/>
345
- </xsd:restriction>
346
- </xsd:simpleType>
347
- <xsd:simpleType name="mac802" >
348
- <xsd:restriction base="xsd:string" >
349
- <xsd:pattern value="[\da-fA-F]{2}(\:[\da-fA-F]){5}" />
350
- </xsd:restriction>
351
- </xsd:simpleType>
352
- </occi:extension>