occi 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.rvmrc +1 -0
- data/Gemfile +14 -0
- data/Gemfile.lock +41 -0
- data/LICENSE +4 -0
- data/README.md +28 -0
- data/Rakefile +25 -0
- data/VERSION +1 -0
- data/lib/occi.rb +1 -0
- data/lib/occi/client.rb +35 -0
- data/lib/occi/entity.rb +63 -0
- data/lib/occi/pool.rb +52 -0
- data/test/fixtures/cassettes/compute_delete.yml +22 -0
- data/test/fixtures/cassettes/compute_get.yml +109 -0
- data/test/fixtures/cassettes/compute_put.yml +35 -0
- data/test/fixtures/cassettes/computes_get.yml +28 -0
- data/test/fixtures/cassettes/computes_post.yml +45 -0
- data/test/fixtures/cassettes/network_delete.yml +22 -0
- data/test/fixtures/cassettes/network_get.yml +109 -0
- data/test/fixtures/cassettes/networks_get.yml +28 -0
- data/test/fixtures/cassettes/networks_post.yml +37 -0
- data/test/fixtures/cassettes/storage_delete.yml +22 -0
- data/test/fixtures/cassettes/storage_get.yml +109 -0
- data/test/fixtures/cassettes/storages_get.yml +28 -0
- data/test/fixtures/cassettes/storages_post.yml +50 -0
- data/test/lib/occi/test_entity.rb +54 -0
- data/test/lib/occi/test_pool.rb +99 -0
- data/test/support.rb +47 -0
- metadata +208 -0
data/.rvmrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rvm ruby-1.9.2-p0@occi
|
data/Gemfile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
source "http://rubygems.org"
|
2
|
+
|
3
|
+
#gem "hugs", "~> 2.1.0"
|
4
|
+
gem "hugs", :path => "~/git/hugs"
|
5
|
+
gem "multipart-post", "~> 1.0.1"
|
6
|
+
gem "nokogiri", "~> 1.4.4"
|
7
|
+
|
8
|
+
group :development do
|
9
|
+
gem "rake"
|
10
|
+
gem "jeweler", "~> 1.5.1"
|
11
|
+
gem "webmock", "~> 1.6.1"
|
12
|
+
gem "vcr", "~> 1.4.0"
|
13
|
+
gem "minitest", "~> 2.0.0"
|
14
|
+
end
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
PATH
|
2
|
+
remote: ~/git/hugs
|
3
|
+
specs:
|
4
|
+
hugs (2.0.0)
|
5
|
+
net-http-persistent (~> 1.4.1)
|
6
|
+
nokogiri (~> 1.4.4)
|
7
|
+
yajl-ruby (~> 0.7.8)
|
8
|
+
|
9
|
+
GEM
|
10
|
+
remote: http://rubygems.org/
|
11
|
+
specs:
|
12
|
+
addressable (2.2.2)
|
13
|
+
crack (0.1.8)
|
14
|
+
git (1.2.5)
|
15
|
+
jeweler (1.5.1)
|
16
|
+
bundler (~> 1.0.0)
|
17
|
+
git (>= 1.2.5)
|
18
|
+
rake
|
19
|
+
minitest (2.0.0)
|
20
|
+
multipart-post (1.0.1)
|
21
|
+
net-http-persistent (1.4.1)
|
22
|
+
nokogiri (1.4.4)
|
23
|
+
rake (0.8.7)
|
24
|
+
vcr (1.4.0)
|
25
|
+
webmock (1.6.1)
|
26
|
+
addressable (>= 2.2.2)
|
27
|
+
crack (>= 0.1.7)
|
28
|
+
yajl-ruby (0.7.8)
|
29
|
+
|
30
|
+
PLATFORMS
|
31
|
+
ruby
|
32
|
+
|
33
|
+
DEPENDENCIES
|
34
|
+
hugs!
|
35
|
+
jeweler (~> 1.5.1)
|
36
|
+
minitest (~> 2.0.0)
|
37
|
+
multipart-post (~> 1.0.1)
|
38
|
+
nokogiri (~> 1.4.4)
|
39
|
+
rake
|
40
|
+
vcr (~> 1.4.0)
|
41
|
+
webmock (~> 1.6.1)
|
data/LICENSE
ADDED
data/README.md
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# OCCI
|
2
|
+
|
3
|
+
[Ruby](http://www.ruby-lang.org/) bindings to [OpenNebula's](http://opennebula.org) [Open Cloud Computing Interface (OCCI)](http://www.opennebula.org/documentation:rel2.0:occidd).
|
4
|
+
|
5
|
+
## Usage
|
6
|
+
|
7
|
+
### Bundler
|
8
|
+
|
9
|
+
gem "occi"
|
10
|
+
|
11
|
+
### Examples
|
12
|
+
|
13
|
+
See the examples section in the [wiki](http://github.com/retr0h/occi/wiki).
|
14
|
+
|
15
|
+
## Testing
|
16
|
+
|
17
|
+
MiniTest will run the tests in a random order. When rebuilding the fixtures, the entity
|
18
|
+
tests depend on the pool tests having already been run. Since the fixtures change infrequently,
|
19
|
+
this should be acceptable.
|
20
|
+
|
21
|
+
$ export ONE_USER=$user
|
22
|
+
$ export ONE_PASSWORD=$password
|
23
|
+
|
24
|
+
$ bundle exec rake
|
25
|
+
|
26
|
+
## TODO
|
27
|
+
|
28
|
+
* Should we raise when we do not have expected HTTP code or body?
|
data/Rakefile
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
require "rake"
|
3
|
+
|
4
|
+
begin
|
5
|
+
require "jeweler"
|
6
|
+
Jeweler::Tasks.new do |gem|
|
7
|
+
gem.name = "occi"
|
8
|
+
gem.summary = %Q{Ruby bindings to Open Cloud Computing Interface (OCCI).}
|
9
|
+
gem.email = "john@dewey.ws"
|
10
|
+
gem.homepage = "http://github.com/retr0h/occi"
|
11
|
+
gem.authors = ["retr0h"]
|
12
|
+
end
|
13
|
+
Jeweler::GemcutterTasks.new
|
14
|
+
rescue LoadError
|
15
|
+
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
16
|
+
end
|
17
|
+
|
18
|
+
require "rake/testtask"
|
19
|
+
Rake::TestTask.new(:test) do |test|
|
20
|
+
test.libs << "lib" << "test"
|
21
|
+
test.pattern = "test/**/test_*.rb"
|
22
|
+
test.verbose = true
|
23
|
+
end
|
24
|
+
|
25
|
+
task :default => :test
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1.0.0
|
data/lib/occi.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "occi/client"
|
data/lib/occi/client.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
require "hugs"
|
2
|
+
require "digest/sha1"
|
3
|
+
|
4
|
+
module Occi
|
5
|
+
class Client
|
6
|
+
##
|
7
|
+
# Include endpoints.
|
8
|
+
|
9
|
+
%w(pool entity).each do |mixin|
|
10
|
+
require "occi/#{mixin}"
|
11
|
+
include eval "Occi::#{mixin.capitalize}"
|
12
|
+
end
|
13
|
+
|
14
|
+
##
|
15
|
+
# Required:
|
16
|
+
# +user+: A String containing the username for use in HTTP Basic auth.
|
17
|
+
# +password+: A String containing the password for use in HTTP Basic auth.
|
18
|
+
# +host+: A String with the host to connect.
|
19
|
+
|
20
|
+
def initialize options
|
21
|
+
@connection = Hugs.new(
|
22
|
+
:user => options[:user],
|
23
|
+
:password => Digest::SHA1.hexdigest(options[:password]),
|
24
|
+
:host => options[:host],
|
25
|
+
:scheme => options[:scheme] || "http",
|
26
|
+
:port => options[:port] || 4567,
|
27
|
+
:type => options[:type] || :xml,
|
28
|
+
)
|
29
|
+
end
|
30
|
+
|
31
|
+
def request
|
32
|
+
@connection
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lib/occi/entity.rb
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
module Occi
|
2
|
+
module Entity
|
3
|
+
Gets = %w(
|
4
|
+
compute
|
5
|
+
network
|
6
|
+
storage
|
7
|
+
).map { |v| "#{v}_get" }.freeze
|
8
|
+
|
9
|
+
Deletes = %w(
|
10
|
+
compute
|
11
|
+
network
|
12
|
+
storage
|
13
|
+
).map { |v| "#{v}_delete" }.freeze
|
14
|
+
|
15
|
+
Puts = %w(
|
16
|
+
compute
|
17
|
+
).map { |v| "#{v}_put" }.freeze
|
18
|
+
|
19
|
+
##
|
20
|
+
# The _get methods:
|
21
|
+
# Returns the representation of the Compute resource identified by +compute_id+.
|
22
|
+
# 200 OK: An XML representation of the pool in the http body.
|
23
|
+
#
|
24
|
+
# The _delete methods:
|
25
|
+
# Deletes the Compute resource identified by +compute_id+.
|
26
|
+
# 204 No Content : The Compute has been successfully deleted.
|
27
|
+
#
|
28
|
+
# The _put methods:
|
29
|
+
# Update request for a Compute identified by +compute_id+.
|
30
|
+
# 202 Accepted : The update request is being process, polling required to confirm update.
|
31
|
+
|
32
|
+
(Gets + Deletes + Puts).each do |method|
|
33
|
+
define_method method do |*args|
|
34
|
+
id = args[0]
|
35
|
+
params = args[1] || {}
|
36
|
+
path, verb = method.split("_")
|
37
|
+
|
38
|
+
request.send verb, "/#{path}/#{id}", params
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
##
|
43
|
+
# :method: compute_get
|
44
|
+
|
45
|
+
##
|
46
|
+
# :method: compute_delete
|
47
|
+
|
48
|
+
##
|
49
|
+
# :method: compute_put
|
50
|
+
|
51
|
+
##
|
52
|
+
# :method: network_get
|
53
|
+
|
54
|
+
##
|
55
|
+
# :method: network_delete
|
56
|
+
|
57
|
+
##
|
58
|
+
# :method: storage_get
|
59
|
+
|
60
|
+
##
|
61
|
+
# :method: storage_delete
|
62
|
+
end
|
63
|
+
end
|
data/lib/occi/pool.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
module Occi
|
2
|
+
module Pool
|
3
|
+
Gets = %w(
|
4
|
+
computes
|
5
|
+
networks
|
6
|
+
storages
|
7
|
+
).map { |v| "#{v}_get" }.freeze
|
8
|
+
|
9
|
+
Posts = %w(
|
10
|
+
computes
|
11
|
+
networks
|
12
|
+
storages
|
13
|
+
).map { |v| "#{v}_post" }.freeze
|
14
|
+
|
15
|
+
##
|
16
|
+
# The _get methods:
|
17
|
+
# Returns the contents of the pool.
|
18
|
+
# 200 OK: An XML representation of the pool in the http body.
|
19
|
+
#
|
20
|
+
# The _post methods:
|
21
|
+
# Request for the creation of an ER. An XML representation of a
|
22
|
+
# VM without the ID element should be passed in the http body.
|
23
|
+
# 201 Created: An XML representation of a ER of type COMPUTE with the ID.
|
24
|
+
|
25
|
+
(Gets + Posts).each do |method|
|
26
|
+
define_method method do |*args|
|
27
|
+
params = args[0] || {}
|
28
|
+
path, verb = method.split("_")
|
29
|
+
|
30
|
+
request.send verb, "/#{path.sub(%r{s$}, '')}", params
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
##
|
35
|
+
# :method: computes_get
|
36
|
+
|
37
|
+
##
|
38
|
+
# :method: computes_post
|
39
|
+
|
40
|
+
##
|
41
|
+
# :method: networks_get
|
42
|
+
|
43
|
+
##
|
44
|
+
# :method: networks_post
|
45
|
+
|
46
|
+
##
|
47
|
+
# :method: storages_get
|
48
|
+
|
49
|
+
##
|
50
|
+
# :method: storages_post
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
---
|
2
|
+
- !ruby/struct:VCR::HTTPInteraction
|
3
|
+
request: !ruby/struct:VCR::Request
|
4
|
+
method: :delete
|
5
|
+
uri: http://oneadmin:a9464e3228ae563be6207bbf50437a219550f48b@one.example.com:4567/compute/135
|
6
|
+
body:
|
7
|
+
headers:
|
8
|
+
accept:
|
9
|
+
- application/xml
|
10
|
+
connection:
|
11
|
+
- keep-alive
|
12
|
+
keep-alive:
|
13
|
+
- 30
|
14
|
+
response: !ruby/struct:VCR::Response
|
15
|
+
status: !ruby/struct:VCR::ResponseStatus
|
16
|
+
code: 204
|
17
|
+
message: No Content
|
18
|
+
headers:
|
19
|
+
server:
|
20
|
+
- thin 1.2.7 codename No Hup
|
21
|
+
body:
|
22
|
+
http_version: "1.1"
|
@@ -0,0 +1,109 @@
|
|
1
|
+
---
|
2
|
+
- !ruby/struct:VCR::HTTPInteraction
|
3
|
+
request: !ruby/struct:VCR::Request
|
4
|
+
method: :get
|
5
|
+
uri: http://oneadmin:a9464e3228ae563be6207bbf50437a219550f48b@one.example.com:4567/compute/130
|
6
|
+
body:
|
7
|
+
headers:
|
8
|
+
accept:
|
9
|
+
- application/xml
|
10
|
+
connection:
|
11
|
+
- keep-alive
|
12
|
+
keep-alive:
|
13
|
+
- 30
|
14
|
+
response: !ruby/struct:VCR::Response
|
15
|
+
status: !ruby/struct:VCR::ResponseStatus
|
16
|
+
code: 200
|
17
|
+
message: OK
|
18
|
+
headers:
|
19
|
+
content-type:
|
20
|
+
- text/html;charset=utf-8
|
21
|
+
content-length:
|
22
|
+
- "714"
|
23
|
+
connection:
|
24
|
+
- keep-alive
|
25
|
+
server:
|
26
|
+
- thin 1.2.7 codename No Hup
|
27
|
+
body: <COMPUTE href="http://cm-01.cloud.int.ev1.atti.com:4567/compute/130"><ID>130</ID><NAME>Test Framework</NAME><INSTANCE_TYPE>small</INSTANCE_TYPE><STATE>ACTIVE</STATE><DISK><STORAGE href="http://cm-01.cloud.int.ev1.atti.com:4567/storage/11" name="Centos 5.4 x86_64"/><TYPE>DISK</TYPE><TARGET>hda</TARGET></DISK><NIC><NETWORK href="http://cm-01.cloud.int.ev1.atti.com:4567/network/14" name="10.3.172.0"/><IP>10.3.172.23</IP><MAC>02:00:0a:03:ac:17</MAC></NIC><CONTEXT><FILES>/opt/tpkg/opennebula-2.0/../var/opennebula-2.0/templates/context/init.sh</FILES><GATEWAY>10.3.172.1</GATEWAY><HOSTNAME>02:00:0a:03:ac:17</HOSTNAME><IP_PUBLIC>10.3.172.23</IP_PUBLIC><NETMASK>/23</NETMASK><TARGET>hdc</TARGET></CONTEXT></COMPUTE>
|
28
|
+
http_version: "1.1"
|
29
|
+
- !ruby/struct:VCR::HTTPInteraction
|
30
|
+
request: !ruby/struct:VCR::Request
|
31
|
+
method: :get
|
32
|
+
uri: http://oneadmin:a9464e3228ae563be6207bbf50437a219550f48b@one.example.com:4567/compute/131
|
33
|
+
body:
|
34
|
+
headers:
|
35
|
+
accept:
|
36
|
+
- application/xml
|
37
|
+
connection:
|
38
|
+
- keep-alive
|
39
|
+
keep-alive:
|
40
|
+
- 30
|
41
|
+
response: !ruby/struct:VCR::Response
|
42
|
+
status: !ruby/struct:VCR::ResponseStatus
|
43
|
+
code: 200
|
44
|
+
message: OK
|
45
|
+
headers:
|
46
|
+
content-type:
|
47
|
+
- text/html;charset=utf-8
|
48
|
+
content-length:
|
49
|
+
- "715"
|
50
|
+
connection:
|
51
|
+
- keep-alive
|
52
|
+
server:
|
53
|
+
- thin 1.2.7 codename No Hup
|
54
|
+
body: <COMPUTE href="http://cm-01.cloud.int.ev1.atti.com:4567/compute/131"><ID>131</ID><NAME>Test Framework</NAME><INSTANCE_TYPE>small</INSTANCE_TYPE><STATE>PENDING</STATE><DISK><STORAGE href="http://cm-01.cloud.int.ev1.atti.com:4567/storage/11" name="Centos 5.4 x86_64"/><TYPE>DISK</TYPE><TARGET>hda</TARGET></DISK><NIC><NETWORK href="http://cm-01.cloud.int.ev1.atti.com:4567/network/14" name="10.3.172.0"/><IP>10.3.172.24</IP><MAC>02:00:0a:03:ac:18</MAC></NIC><CONTEXT><FILES>/opt/tpkg/opennebula-2.0/../var/opennebula-2.0/templates/context/init.sh</FILES><GATEWAY>10.3.172.1</GATEWAY><HOSTNAME>02:00:0a:03:ac:18</HOSTNAME><IP_PUBLIC>10.3.172.24</IP_PUBLIC><NETMASK>/23</NETMASK><TARGET>hdc</TARGET></CONTEXT></COMPUTE>
|
55
|
+
http_version: "1.1"
|
56
|
+
- !ruby/struct:VCR::HTTPInteraction
|
57
|
+
request: !ruby/struct:VCR::Request
|
58
|
+
method: :get
|
59
|
+
uri: http://oneadmin:a9464e3228ae563be6207bbf50437a219550f48b@one.example.com:4567/compute/1
|
60
|
+
body:
|
61
|
+
headers:
|
62
|
+
accept:
|
63
|
+
- application/xml
|
64
|
+
connection:
|
65
|
+
- keep-alive
|
66
|
+
keep-alive:
|
67
|
+
- 30
|
68
|
+
response: !ruby/struct:VCR::Response
|
69
|
+
status: !ruby/struct:VCR::ResponseStatus
|
70
|
+
code: 200
|
71
|
+
message: OK
|
72
|
+
headers:
|
73
|
+
content-type:
|
74
|
+
- text/html;charset=utf-8
|
75
|
+
content-length:
|
76
|
+
- "136"
|
77
|
+
connection:
|
78
|
+
- keep-alive
|
79
|
+
server:
|
80
|
+
- thin 1.2.7 codename No Hup
|
81
|
+
body: <COMPUTE href="http://cm-01.cloud.int.ev1.atti.com:4567/compute/1"><ID>1</ID><NAME>Centos 5.4 x86_64</NAME><STATE>DONE</STATE></COMPUTE>
|
82
|
+
http_version: "1.1"
|
83
|
+
- !ruby/struct:VCR::HTTPInteraction
|
84
|
+
request: !ruby/struct:VCR::Request
|
85
|
+
method: :get
|
86
|
+
uri: http://oneadmin:a9464e3228ae563be6207bbf50437a219550f48b@one.example.com:4567/compute/135
|
87
|
+
body:
|
88
|
+
headers:
|
89
|
+
accept:
|
90
|
+
- application/xml
|
91
|
+
connection:
|
92
|
+
- keep-alive
|
93
|
+
keep-alive:
|
94
|
+
- 30
|
95
|
+
response: !ruby/struct:VCR::Response
|
96
|
+
status: !ruby/struct:VCR::ResponseStatus
|
97
|
+
code: 200
|
98
|
+
message: OK
|
99
|
+
headers:
|
100
|
+
content-type:
|
101
|
+
- text/html;charset=utf-8
|
102
|
+
content-length:
|
103
|
+
- "714"
|
104
|
+
connection:
|
105
|
+
- keep-alive
|
106
|
+
server:
|
107
|
+
- thin 1.2.7 codename No Hup
|
108
|
+
body: <COMPUTE href="http://cm-01.cloud.int.ev1.atti.com:4567/compute/135"><ID>135</ID><NAME>Test Framework</NAME><INSTANCE_TYPE>small</INSTANCE_TYPE><STATE>ACTIVE</STATE><DISK><STORAGE href="http://cm-01.cloud.int.ev1.atti.com:4567/storage/11" name="Centos 5.4 x86_64"/><TYPE>DISK</TYPE><TARGET>hda</TARGET></DISK><NIC><NETWORK href="http://cm-01.cloud.int.ev1.atti.com:4567/network/14" name="10.3.172.0"/><IP>10.3.172.25</IP><MAC>02:00:0a:03:ac:19</MAC></NIC><CONTEXT><FILES>/opt/tpkg/opennebula-2.0/../var/opennebula-2.0/templates/context/init.sh</FILES><GATEWAY>10.3.172.1</GATEWAY><HOSTNAME>02:00:0a:03:ac:19</HOSTNAME><IP_PUBLIC>10.3.172.25</IP_PUBLIC><NETMASK>/23</NETMASK><TARGET>hdc</TARGET></CONTEXT></COMPUTE>
|
109
|
+
http_version: "1.1"
|
@@ -0,0 +1,35 @@
|
|
1
|
+
---
|
2
|
+
- !ruby/struct:VCR::HTTPInteraction
|
3
|
+
request: !ruby/struct:VCR::Request
|
4
|
+
method: :put
|
5
|
+
uri: http://oneadmin:a9464e3228ae563be6207bbf50437a219550f48b@one.example.com:4567/compute/134
|
6
|
+
body: |
|
7
|
+
<?xml version="1.0"?>
|
8
|
+
<COMPUTE>
|
9
|
+
<STATE>shutdown</STATE>
|
10
|
+
</COMPUTE>
|
11
|
+
|
12
|
+
headers:
|
13
|
+
accept:
|
14
|
+
- application/xml
|
15
|
+
content-type:
|
16
|
+
- application/xml
|
17
|
+
connection:
|
18
|
+
- keep-alive
|
19
|
+
keep-alive:
|
20
|
+
- 30
|
21
|
+
response: !ruby/struct:VCR::Response
|
22
|
+
status: !ruby/struct:VCR::ResponseStatus
|
23
|
+
code: 202
|
24
|
+
message: Accepted
|
25
|
+
headers:
|
26
|
+
content-type:
|
27
|
+
- text/html;charset=utf-8
|
28
|
+
content-length:
|
29
|
+
- "809"
|
30
|
+
connection:
|
31
|
+
- keep-alive
|
32
|
+
server:
|
33
|
+
- thin 1.2.7 codename No Hup
|
34
|
+
body: <COMPUTE href="http://cm-01.cloud.int.ev1.atti.com:4567/compute/134"><ID>134</ID><NAME>Centos-5-4_x86_64-Kevin</NAME><STATE>ACTIVE</STATE><DISK><STORAGE href="http://cm-01.cloud.int.ev1.atti.com:4567/storage/22" name="Centos 5.4 x86_64 Kevin"/><TYPE>DISK</TYPE><TARGET>hda</TARGET></DISK><DISK><STORAGE href="http://cm-01.cloud.int.ev1.atti.com:4567/storage/" name=""/><TYPE>swap</TYPE><TARGET>hdd</TARGET></DISK><NIC><NETWORK href="http://cm-01.cloud.int.ev1.atti.com:4567/network/15" name="10.3.174.0"/><IP>10.3.174.10</IP><MAC>02:00:0a:03:ae:0a</MAC></NIC><CONTEXT><FILES>/opt/tpkg/var/opennebula-2.0/templates/context/init.sh</FILES><GATEWAY>10.3.174.1</GATEWAY><HOSTNAME>02:00:0a:03:ae:0a</HOSTNAME><IP_PUBLIC>10.3.174.10</IP_PUBLIC><NETMASK>/23</NETMASK><NS></NS><TARGET>hdc</TARGET></CONTEXT></COMPUTE>
|
35
|
+
http_version: "1.1"
|