occi 2.5.1 → 2.5.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +54 -14
- data/examples/x509auth_example.rb +80 -2
- data/lib/occi/client.rb +4 -2
- data/lib/occi/core/entity.rb +2 -2
- data/lib/occi/version.rb +1 -1
- metadata +2 -2
data/README.md
CHANGED
@@ -20,50 +20,84 @@ Installation
|
|
20
20
|
Usage
|
21
21
|
-----
|
22
22
|
|
23
|
+
Use the Interactive Ruby Shell (IRB) to interact with an OCCI server. If you have the occi gem installed, you just have
|
24
|
+
to start irb from the command line:
|
25
|
+
|
26
|
+
irb
|
27
|
+
|
28
|
+
If you want to test newer versions of rOCCI, you have to tell irb from where it
|
29
|
+
should load occi:
|
30
|
+
|
31
|
+
cd rOCCI
|
32
|
+
irb -I lib
|
33
|
+
|
23
34
|
First require the gem, for Ruby 1.8.7 you also have to require rubygems
|
35
|
+
|
24
36
|
require 'rubygems'
|
25
37
|
require 'occi'
|
26
38
|
|
27
39
|
### Client
|
28
40
|
|
29
|
-
The OCCI gem includes a Client to simplify the usage of an OCCI endpoint.
|
41
|
+
The OCCI gem includes a Client to simplify the usage of an OCCI endpoint. If you want to use authentication then you
|
42
|
+
should create a hash with information either on username and password for basic authentication or with a X.509 user
|
43
|
+
certificate, the user certificate password and the path to the Root CAs which are used to verify the certificate of the
|
44
|
+
OCCI server.
|
45
|
+
|
46
|
+
For Basic auth use
|
47
|
+
|
48
|
+
auth = Hashie::Mash.new
|
49
|
+
auth.type = 'basic'
|
50
|
+
auth.username = 'user'
|
51
|
+
auth.password = 'mypass'
|
30
52
|
|
31
|
-
|
53
|
+
For Digest auth use
|
32
54
|
|
33
|
-
|
55
|
+
auth = Hashie::Mash.new
|
56
|
+
auth.type = 'digest'
|
57
|
+
auth.username = 'user'
|
58
|
+
auth.password = 'mypass'
|
59
|
+
|
60
|
+
For X.509 auth use
|
61
|
+
|
62
|
+
auth = Hashie::Mash.new
|
63
|
+
auth.type = 'x509'
|
64
|
+
auth.user_cert = '/Path/To/My/usercert.pem'
|
65
|
+
auth.user_cert_password = 'MyPassword'
|
66
|
+
auth.ca_path = '/Path/To/root-certificates'
|
67
|
+
|
68
|
+
To connect to an OCCI endpoint/server (e.g. running on http://localhost:3000/ )
|
69
|
+
|
70
|
+
client = OCCI::Client.new('http://occi.cloud.gwdg.de:3300',auth||=nil)
|
34
71
|
|
35
72
|
All available categories are automatically registered to the OCCI model during client initialization. You can get them via
|
36
73
|
|
37
|
-
|
74
|
+
client.model
|
38
75
|
|
39
76
|
To get all resources (as a list of OCCI::Resources) currently managed by the endpoint use
|
40
77
|
|
41
|
-
client.
|
78
|
+
client.get resources
|
42
79
|
|
43
80
|
To get only compute, storage or network resources use get_compute_resources, ...
|
44
81
|
|
45
82
|
To get the location of all resources use
|
46
83
|
|
47
|
-
client.
|
84
|
+
client.list resources
|
48
85
|
|
49
|
-
Analogue for compute, storage, network
|
86
|
+
Analogue for compute, storage, network.
|
50
87
|
|
51
88
|
To get a list of all OS / resource templates use
|
52
89
|
|
53
90
|
client.get_os_templates
|
54
91
|
client.get_resource_templates
|
55
92
|
|
56
|
-
To get all attributes with their default values for a given category use
|
57
|
-
|
58
|
-
client.get_attributes(client.compute)
|
59
|
-
|
60
93
|
To create a new compute resource use
|
61
94
|
|
62
95
|
os = client.get_os_templates.select { |template| template.term.include? 'my_os' }
|
63
96
|
size = client.get_resource_templates.select { |template| template.term.include? 'large' }
|
64
|
-
|
65
|
-
|
66
|
-
|
97
|
+
cmpt = OCCI::Core::Resource.new compute
|
98
|
+
cmpt.mixins << os << size
|
99
|
+
cmpt.attributes.occi!.core!.title = "My VM"
|
100
|
+
client.create cmpt
|
67
101
|
|
68
102
|
### Logging
|
69
103
|
|
@@ -136,6 +170,12 @@ The OCCI gem includes all OCCI Core classes necessary to handly arbitrary OCCI o
|
|
136
170
|
Changelog
|
137
171
|
---------
|
138
172
|
|
173
|
+
### version 2.5
|
174
|
+
|
175
|
+
* improved OCCI Client
|
176
|
+
* improved documentation
|
177
|
+
* several bugfixes
|
178
|
+
|
139
179
|
### Version 2.4
|
140
180
|
|
141
181
|
* Changed OCCI attribute properties from lowercase to first letter uppercase (e.g. type -> Type, default -> Default, ...)
|
@@ -1,17 +1,27 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'occi'
|
3
3
|
require 'pp'
|
4
|
+
require 'hashie/mash'
|
5
|
+
|
6
|
+
## options
|
7
|
+
use_os_temlate = true # use OS_TEMPLATE or NETWORK + STORAGE + INSTANCE TYPE
|
8
|
+
OS_TEMPLATE = 'monitoring' # name of the VM template in ON
|
9
|
+
|
10
|
+
clean_up_compute = true # issue DELETE <RESOURCE> after we are done
|
4
11
|
|
5
12
|
USER_CERT = ENV['HOME'] + '/.globus/usercert.pem'
|
6
|
-
|
13
|
+
USER_CERT_PASSWORD = 'mypassphrase'
|
7
14
|
CA_PATH = '/etc/grid-security/certificates'
|
8
15
|
|
16
|
+
## get an OCCI::Client instance
|
9
17
|
client = OCCI::Client.new('https://localhost:3300',
|
10
18
|
{ :type => "x509",
|
11
19
|
:user_cert => USER_CERT,
|
12
20
|
:user_cert_password => USER_CERT_PASSWORD,
|
13
21
|
:ca_path => CA_PATH })
|
14
22
|
|
23
|
+
## get detailed information about all available resources
|
24
|
+
## then query each resource category in turn
|
15
25
|
puts "\n\nPrinting all resources"
|
16
26
|
pp client.get resources
|
17
27
|
|
@@ -24,6 +34,8 @@ pp client.get network
|
|
24
34
|
puts "\n\nPrinting compute resources"
|
25
35
|
pp client.get compute
|
26
36
|
|
37
|
+
## get links of all available resources
|
38
|
+
## then get links for each category in turn
|
27
39
|
puts "\n\nPrinting locations of all resources"
|
28
40
|
pp client.list resources
|
29
41
|
|
@@ -36,7 +48,73 @@ pp client.list compute
|
|
36
48
|
puts "\n\nPrinting locations of network resources"
|
37
49
|
pp client.list network
|
38
50
|
|
51
|
+
## get detailed information about available OS templates (== VM templates in ON)
|
52
|
+
## and resource templates (== INSTANCE TYPES, e.g. small, medium, large etc.)
|
53
|
+
puts "\n\nPrinting OS templates"
|
54
|
+
pp client.get_os_templates
|
55
|
+
|
56
|
+
puts "\n\nPrinting resource templates"
|
57
|
+
pp client.get_resource_templates
|
58
|
+
|
59
|
+
## create a compute resource using the chosen method
|
39
60
|
puts "\n\nCreate compute resources"
|
61
|
+
|
40
62
|
cmpt = OCCI::Core::Resource.new compute
|
63
|
+
|
64
|
+
unless use_os_temlate
|
65
|
+
## without OS template, we have to manually select and attach
|
66
|
+
## network, storage and resource template (instance type)
|
67
|
+
|
68
|
+
## select instance type medium
|
69
|
+
cmpt.mixins << 'http://my.occi.service//occi/infrastructure/resource_tpl#medium'
|
70
|
+
|
71
|
+
## list network/storage locations and select the appropriate ones (the first ones in this case)
|
72
|
+
puts "\nUsing"
|
73
|
+
pp storage_loc = client.list(storage)[0]
|
74
|
+
pp network_loc = client.list(network)[0]
|
75
|
+
|
76
|
+
## create links and attach them to the compure resource
|
77
|
+
client.storagelink cmpt, storage_loc
|
78
|
+
client.networkinterface cmpt, network_loc
|
79
|
+
else
|
80
|
+
## with OS template, we have to find the template by name
|
81
|
+
## optionally we can change its "size" by choosing an instance type
|
82
|
+
puts "\nUsing"
|
83
|
+
pp os = client.get_os_templates.select { |template| template.term.include? OS_TEMPLATE }
|
84
|
+
pp size = client.get_resource_templates.select { |template| template.term.include? 'medium' }
|
85
|
+
|
86
|
+
## attach chosen resources to the compute resource
|
87
|
+
cmpt.mixins << os << size
|
88
|
+
## we can change some of the values manually
|
89
|
+
cmpt.attributes.occi!.core!.title = "My rOCCI VM"
|
90
|
+
end
|
91
|
+
|
92
|
+
## create the compute resource and print its location
|
41
93
|
cmpt_loc = client.create cmpt
|
42
|
-
pp "Location of new compute resource: #{cmpt_loc}"
|
94
|
+
pp "Location of new compute resource: #{cmpt_loc}"
|
95
|
+
|
96
|
+
## get links of all available compute resouces again
|
97
|
+
puts "\n\nPrinting locations of compute resources (should now contain #{cmpt_loc})"
|
98
|
+
pp client.list compute
|
99
|
+
|
100
|
+
## get detailed information about the new compute resource
|
101
|
+
## using Hashie simplifies access to its attributes
|
102
|
+
puts "\n\nPrinting information about compute resource #{cmpt_loc}"
|
103
|
+
cmpt_data = client.get cmpt_loc.to_s.split('/')[3] + '/' + cmpt_loc.to_s.split('/')[4]
|
104
|
+
cmpt_hashie = Hashie::Mash.new(JSON.parse(cmpt_data.to_json))
|
105
|
+
|
106
|
+
## wait until the resource is "active"
|
107
|
+
while cmpt_hashie.resources.first.attributes.occi.compute.state == "inactive"
|
108
|
+
puts "\nCompute resource #{cmpt_loc} is inactive, waiting ..."
|
109
|
+
sleep 1
|
110
|
+
cmpt_data = client.get cmpt_loc.to_s.split('/')[3] + '/' + cmpt_loc.to_s.split('/')[4]
|
111
|
+
cmpt_hashie = Hashie::Mash.new(JSON.parse(cmpt_data.to_json))
|
112
|
+
end
|
113
|
+
|
114
|
+
puts "\nCompute resource #{cmpt_loc} is #{cmpt_hashie.resources.first.attributes.occi.compute.state}"
|
115
|
+
|
116
|
+
## delete the resource and exit
|
117
|
+
if clean_up_compute
|
118
|
+
puts "\n\nDeleting compute resource #{cmpt_loc}"
|
119
|
+
pp client.delete cmpt_loc.to_s.split('/')[3] + '/' + cmpt_loc.to_s.split('/')[4]
|
120
|
+
end
|
data/lib/occi/client.rb
CHANGED
@@ -142,7 +142,9 @@ module OCCI
|
|
142
142
|
# @param [String] path
|
143
143
|
# @return [Array] list of URIs
|
144
144
|
def list(path='')
|
145
|
-
|
145
|
+
path = path.split('#').last + '/' if path.start_with? 'http://'
|
146
|
+
path = path.reverse.chomp('/').reverse
|
147
|
+
self.class.get(@endpoint + path, :headers => { "Accept" => 'text/uri-list' }).body.split("\n").compact
|
146
148
|
end
|
147
149
|
|
148
150
|
# @param [OCCI::Core::Entity] entity
|
@@ -303,4 +305,4 @@ module OCCI
|
|
303
305
|
end
|
304
306
|
|
305
307
|
end
|
306
|
-
end
|
308
|
+
end
|
data/lib/occi/core/entity.rb
CHANGED
@@ -40,10 +40,10 @@ module OCCI
|
|
40
40
|
@checked = false
|
41
41
|
raise "Kind #{kind} not of type String" unless kind.kind_of? String
|
42
42
|
@kind = kind
|
43
|
-
@mixins = mixins.to_a
|
43
|
+
@mixins = mixins.to_a.flatten
|
44
44
|
@attributes = OCCI::Core::Attributes.new(attributes)
|
45
45
|
@attributes.occi!.core![:id] ||= UUIDTools::UUID.random_create.to_s
|
46
|
-
@actions = actions.to_a
|
46
|
+
@actions = actions.to_a.flatten
|
47
47
|
end
|
48
48
|
|
49
49
|
# @param [Array] mixins
|
data/lib/occi/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: occi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.5.
|
4
|
+
version: 2.5.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-08-
|
13
|
+
date: 2012-08-15 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: json
|