occi 2.5.3 → 2.5.4

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/Gemfile CHANGED
@@ -10,6 +10,7 @@ gem "builder"
10
10
  gem "activesupport"
11
11
  gem "rake"
12
12
  gem "httparty"
13
+ gem "i18n"
13
14
 
14
15
  # development related gems
15
16
  group :development do
data/Gemfile.lock CHANGED
@@ -45,6 +45,7 @@ DEPENDENCIES
45
45
  builder
46
46
  hashie
47
47
  httparty
48
+ i18n
48
49
  json
49
50
  nokogiri
50
51
  rake
data/README.md CHANGED
@@ -77,7 +77,11 @@ To get all resources (as a list of OCCI::Resources) currently managed by the end
77
77
 
78
78
  client.get resources
79
79
 
80
- To get only compute, storage or network resources use get_compute_resources, ...
80
+ To get only compute, storage or network resources use
81
+
82
+ client.get compute
83
+ client.get storage
84
+ client.get network
81
85
 
82
86
  To get the location of all resources use
83
87
 
data/bin/occi ADDED
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # -------------------------------------------------------------------------- #
4
+ # Licensed under the Apache License, Version 2.0 (the "License"); you may #
5
+ # not use this file except in compliance with the License. You may obtain #
6
+ # a copy of the License at #
7
+ # #
8
+ # http://www.apache.org/licenses/LICENSE-2.0 #
9
+ # #
10
+ # Unless required by applicable law or agreed to in writing, software #
11
+ # distributed under the License is distributed on an "AS IS" BASIS, #
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
13
+ # See the License for the specific language governing permissions and #
14
+ # limitations under the License. #
15
+ #--------------------------------------------------------------------------- #
16
+
17
+ require 'rubygems'
18
+ require 'occi'
19
+ require 'pp'
20
+ require 'logger'
21
+
22
+ include OCCI::DSL
23
+
24
+ begin
25
+ puts "This is an OCCI client utility."
26
+ rescue Exception => ex
27
+ puts "An error occurred!"
28
+ exit!
29
+ end
@@ -0,0 +1,158 @@
1
+ require 'rubygems'
2
+ require 'pp'
3
+
4
+ # load and include rOCCI client DSL
5
+ require 'occi'
6
+ extend OCCI::DSL
7
+
8
+ ## options
9
+ use_os_temlate = true # use OS_TEMPLATE or NETWORK + STORAGE + INSTANCE TYPE
10
+ OS_TEMPLATE = 'monitoring' # name of the VM template in ON
11
+
12
+ clean_up_compute = true # issue DELETE <RESOURCE> after we are done
13
+
14
+ USER_CERT = ENV['HOME'] + '/.globus/usercred.pem'
15
+ USER_CERT_PASSWORD = 'mypassphrase'
16
+ CA_PATH = '/etc/grid-security/certificates'
17
+ ENDPOINT = 'https://localhost:3300'
18
+
19
+ ## establish a connection
20
+ connect(ENDPOINT,
21
+ { :type => "x509",
22
+ :user_cert => USER_CERT,
23
+ :user_cert_password => USER_CERT_PASSWORD,
24
+ :ca_path => CA_PATH },
25
+ { :out => STDERR,
26
+ :level => OCCI::Log::DEBUG })
27
+
28
+ puts "\n\nListing all available resource types:"
29
+ resource_types.each do |type|
30
+ puts "\n#{type}"
31
+ end
32
+
33
+ puts "\n\nListing all available resource type identifiers:"
34
+ resource_type_identifiers.each do |type_id|
35
+ puts "\n#{type_id}"
36
+ end
37
+
38
+ puts "\n\nListing all available mixin types:"
39
+ mixin_types.each do |mixin_type|
40
+ puts "\n#{mixin_type}"
41
+ end
42
+
43
+ puts "\n\nListing all available mixin type identifiers:"
44
+ mixin_type_identifiers.each do |mixin_typeid|
45
+ puts "\n#{mixin_typeid}"
46
+ end
47
+
48
+ puts "\n\nListing all available mixins:"
49
+ mixins.each do |mixin|
50
+ puts "\n#{mixin}"
51
+ end
52
+
53
+ samples = [OS_TEMPLATE, "medium", "large", "small"]
54
+
55
+ puts "\n\nFind mixins using their names:"
56
+ samples.each do |mxn|
57
+ puts "\n#{mxn}:\n"
58
+ pp mixin mxn
59
+ end
60
+
61
+ puts "\n\nFind mixins using their names and a type:"
62
+ samples.each do |mxn|
63
+ puts "\n#{mxn}:\n"
64
+ pp mixin(mxn, "os_tpl")
65
+ end
66
+
67
+ puts "\n\nFind mixins using their names and a type:"
68
+ samples.each do |mxn|
69
+ puts "\n#{mxn}:\n"
70
+ pp mixin(mxn, "resource_tpl")
71
+ end
72
+
73
+ puts "\n\nFind mixins using their names (showing detailed descriptions):"
74
+ samples.each do |mxn|
75
+ puts "\n#{mxn}:\n"
76
+ pp mixin(mxn, nil, true)
77
+ end
78
+
79
+ ## get links of all available resources
80
+ puts "\n\nListing storage resources"
81
+ pp list "storage"
82
+
83
+ puts "\n\nListing network resources"
84
+ pp list "network"
85
+
86
+ puts "\n\nListing compute resources"
87
+ pp list "compute"
88
+
89
+ ## get detailed information about all available resources
90
+ puts "\n\nDescribing storage resources"
91
+ pp describe "storage"
92
+
93
+ puts "\n\nDescribing compute resources"
94
+ pp describe "compute"
95
+
96
+ puts "\n\nDescribing network resources"
97
+ pp describe "network"
98
+
99
+ ## create a compute resource using the chosen method (os_tpl|strg+ntwrk)
100
+ puts "\n\nCreate compute resources"
101
+ cmpt = resource "compute"
102
+
103
+ unless use_os_temlate
104
+ ## without OS template, we have to manually select and attach
105
+ ## network, storage and resource template (instance type)
106
+
107
+ ## select instance type medium
108
+ cmpt.mixins << mixin('medium', "resource_tpl")
109
+
110
+ ## list network/storage locations and select the appropriate ones (the first ones in this case)
111
+ puts "\nUsing:"
112
+ pp storage_loc = list("storage")[0]
113
+ pp network_loc = list("network")[0]
114
+
115
+ ## create links and attach them to the compure resource
116
+ puts "\n Connecting to our compute:"
117
+ storagelink cmpt, storage_loc
118
+ networkinterface cmpt, network_loc
119
+ else
120
+ ## with OS template, we have to find the template by name
121
+ ## optionally we can change its "size" by choosing an instance type
122
+ puts "\nUsing:"
123
+ pp os = mixin(OS_TEMPLATE, "os_tpl")
124
+ pp size = mixin('medium', "resource_tpl")
125
+
126
+ ## attach chosen resources to the compute resource
127
+ cmpt.mixins << os << size
128
+ ## we can change some of the values manually
129
+ cmpt.attributes.occi!.core!.title = "My rOCCI x509 VM"
130
+ end
131
+
132
+ ## create the compute resource and print its location
133
+ cmpt_loc = create cmpt
134
+ pp "Location of new compute resource: #{cmpt_loc}"
135
+
136
+ ## get links of all available compute resouces again
137
+ puts "\n\nListing locations of compute resources (should now contain #{cmpt_loc})"
138
+ pp list "compute"
139
+
140
+ ## get detailed information about the new compute resource
141
+ puts "\n\nListing information about compute resource #{cmpt_loc}"
142
+ cmpt_data = describe cmpt_loc
143
+ pp cmpt_data
144
+
145
+ ## wait until the resource is "active"
146
+ while cmpt_data.resources.first.attributes.occi.compute.state == "inactive"
147
+ puts "\nCompute resource #{cmpt_loc} is inactive, waiting ..."
148
+ sleep 1
149
+ cmpt_data = describe cmpt_loc
150
+ end
151
+
152
+ puts "\nCompute resource #{cmpt_loc} is #{cmpt_data.resources.first.attributes.occi.compute.state}"
153
+
154
+ ## delete the resource and exit
155
+ if clean_up_compute
156
+ puts "\n\nDeleting compute resource #{cmpt_loc}"
157
+ pp delete cmpt_loc
158
+ end
@@ -1,7 +1,6 @@
1
1
  require 'rubygems'
2
2
  require 'occi'
3
3
  require 'pp'
4
- require 'hashie/mash'
5
4
 
6
5
  ## options
7
6
  use_os_temlate = true # use OS_TEMPLATE or NETWORK + STORAGE + INSTANCE TYPE
@@ -9,88 +8,121 @@ OS_TEMPLATE = 'monitoring' # name of the VM template in ON
9
8
 
10
9
  clean_up_compute = true # issue DELETE <RESOURCE> after we are done
11
10
 
12
- USER_CERT = ENV['HOME'] + '/.globus/usercert.pem'
11
+ USER_CERT = ENV['HOME'] + '/.globus/usercred.pem'
13
12
  USER_CERT_PASSWORD = 'mypassphrase'
14
13
  CA_PATH = '/etc/grid-security/certificates'
15
14
 
16
15
  ## get an OCCI::Client instance
17
16
  client = OCCI::Client.new('https://localhost:3300',
18
- { :type => "x509",
19
- :user_cert => USER_CERT,
20
- :user_cert_password => USER_CERT_PASSWORD,
21
- :ca_path => CA_PATH })
17
+ { :type => "x509",
18
+ :user_cert => USER_CERT,
19
+ :user_cert_password => USER_CERT_PASSWORD,
20
+ :ca_path => CA_PATH },
21
+ { :out => STDERR,
22
+ :level => OCCI::Log::DEBUG})
23
+
24
+ puts "\n\nListing all available resource types:"
25
+ client.get_resource_types.each do |type|
26
+ puts "\n#{type}"
27
+ end
22
28
 
23
- ## get detailed information about all available resources
24
- ## then query each resource category in turn
25
- puts "\n\nPrinting all resources"
26
- pp client.get resources
29
+ puts "\n\nListing all available resource type identifiers:"
30
+ client.get_resource_type_identifiers.each do |type_id|
31
+ puts "\n#{type_id}"
32
+ end
27
33
 
28
- puts "\n\nPrinting storage resources"
29
- pp client.get storage
34
+ puts "\n\nListing all available mixin types:"
35
+ client.get_mixin_types.each do |mixin_type|
36
+ puts "\n#{mixin_type}"
37
+ end
30
38
 
31
- puts "\n\nPrinting network resources"
32
- pp client.get network
39
+ puts "\n\nListing all available mixin type identifiers:"
40
+ client.get_mixin_type_identifiers.each do |mixin_typeid|
41
+ puts "\n#{mixin_typeid}"
42
+ end
33
43
 
34
- puts "\n\nPrinting compute resources"
35
- pp client.get compute
44
+ puts "\n\nListing all available mixins:"
45
+ client.get_mixins.each do |mixin|
46
+ puts "\n#{mixin}"
47
+ end
48
+
49
+ samples = [OS_TEMPLATE, "medium", "large", "small"]
50
+
51
+ puts "\n\nFind mixins using their names:"
52
+ samples.each do |mixin|
53
+ puts "\n#{mixin}:\n"
54
+ pp client.find_mixin mixin
55
+ end
56
+
57
+ puts "\n\nFind mixins using their names and a type:"
58
+ samples.each do |mixin|
59
+ puts "\n#{mixin}:\n"
60
+ pp client.find_mixin(mixin, "os_tpl")
61
+ end
62
+
63
+ puts "\n\nFind mixins using their names and a type:"
64
+ samples.each do |mixin|
65
+ puts "\n#{mixin}:\n"
66
+ pp client.find_mixin(mixin, "resource_tpl")
67
+ end
68
+
69
+ puts "\n\nFind mixins using their names (showing detailed descriptions):"
70
+ samples.each do |mixin|
71
+ puts "\n#{mixin}:\n"
72
+ pp client.find_mixin(mixin, nil, true)
73
+ end
36
74
 
37
75
  ## get links of all available resources
38
- ## then get links for each category in turn
39
- puts "\n\nPrinting locations of all resources"
40
- pp client.list resources
76
+ puts "\n\nListing storage resources"
77
+ pp client.list "storage"
41
78
 
42
- puts "\n\nPrinting locations of storage resources"
43
- pp client.list storage
79
+ puts "\n\nListing network resources"
80
+ pp client.list "network"
44
81
 
45
- puts "\n\nPrinting locations of compute resources"
46
- pp client.list compute
82
+ puts "\n\nListing compute resources"
83
+ pp client.list "compute"
47
84
 
48
- puts "\n\nPrinting locations of network resources"
49
- pp client.list network
85
+ ## get detailed information about all available resources
86
+ puts "\n\nDescribing storage resources"
87
+ pp client.describe "storage"
50
88
 
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
89
+ puts "\n\nDescribing compute resources"
90
+ pp client.describe "compute"
55
91
 
56
- puts "\n\nPrinting resource templates"
57
- pp client.get_resource_templates
92
+ puts "\n\nDescribing network resources"
93
+ pp client.describe "network"
58
94
 
59
- ## create a compute resource using the chosen method
95
+ ## create a compute resource using the chosen method (os_tpl|strg+ntwrk)
60
96
  puts "\n\nCreate compute resources"
61
-
62
- cmpt = OCCI::Core::Resource.new compute
97
+ cmpt = client.get_resource "compute"
63
98
 
64
99
  unless use_os_temlate
65
100
  ## without OS template, we have to manually select and attach
66
101
  ## network, storage and resource template (instance type)
67
102
 
68
103
  ## select instance type medium
69
- cmpt.mixins << 'http://my.occi.service//occi/infrastructure/resource_tpl#medium'
104
+ cmpt.mixins << client.find_mixin('medium', "resource_tpl")
70
105
 
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]
106
+ ## list network/storage locations and select the appropriate ones (the first ones in this case)
107
+ puts "\nUsing:"
108
+ pp storage_loc = client.list("storage")[0]
109
+ pp network_loc = client.list("network")[0]
75
110
 
76
111
  ## create links and attach them to the compure resource
112
+ puts "\n Connecting to our compute:"
77
113
  client.storagelink cmpt, storage_loc
78
114
  client.networkinterface cmpt, network_loc
79
115
  else
80
116
  ## 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
- puts "\nGetting identifiers"
87
- pp os_id = os.first.type_identifier
88
- pp size_id = size.first.type_identifier
117
+ ## optionally we can change its "size" by choosing an instance type
118
+ puts "\nUsing:"
119
+ pp os = client.find_mixin(OS_TEMPLATE, "os_tpl")
120
+ pp size = client.find_mixin('medium', "resource_tpl")
89
121
 
90
122
  ## attach chosen resources to the compute resource
91
- cmpt.mixins << os_id << size_id
123
+ cmpt.mixins << os << size
92
124
  ## we can change some of the values manually
93
- cmpt.attributes.occi!.core!.title = "My rOCCI VM"
125
+ cmpt.attributes.occi!.core!.title = "My rOCCI x509 VM"
94
126
  end
95
127
 
96
128
  ## create the compute resource and print its location
@@ -98,27 +130,25 @@ cmpt_loc = client.create cmpt
98
130
  pp "Location of new compute resource: #{cmpt_loc}"
99
131
 
100
132
  ## get links of all available compute resouces again
101
- puts "\n\nPrinting locations of compute resources (should now contain #{cmpt_loc})"
102
- pp client.list compute
133
+ puts "\n\nListing locations of compute resources (should now contain #{cmpt_loc})"
134
+ pp client.list "compute"
103
135
 
104
136
  ## get detailed information about the new compute resource
105
- ## using Hashie simplifies access to its attributes
106
- puts "\n\nPrinting information about compute resource #{cmpt_loc}"
107
- cmpt_data = client.get cmpt_loc.to_s.split('/')[3] + '/' + cmpt_loc.to_s.split('/')[4]
108
- pp cmpt_hashie = Hashie::Mash.new(JSON.parse(cmpt_data.to_json))
137
+ puts "\n\nListing information about compute resource #{cmpt_loc}"
138
+ cmpt_data = client.describe cmpt_loc
139
+ pp cmpt_data
109
140
 
110
141
  ## wait until the resource is "active"
111
- while cmpt_hashie.resources.first.attributes.occi.compute.state == "inactive"
142
+ while cmpt_data.resources.first.attributes.occi.compute.state == "inactive"
112
143
  puts "\nCompute resource #{cmpt_loc} is inactive, waiting ..."
113
144
  sleep 1
114
- cmpt_data = client.get cmpt_loc.to_s.split('/')[3] + '/' + cmpt_loc.to_s.split('/')[4]
115
- cmpt_hashie = Hashie::Mash.new(JSON.parse(cmpt_data.to_json))
145
+ cmpt_data = client.describe cmpt_loc
116
146
  end
117
147
 
118
- puts "\nCompute resource #{cmpt_loc} is #{cmpt_hashie.resources.first.attributes.occi.compute.state}"
148
+ puts "\nCompute resource #{cmpt_loc} is #{cmpt_data.resources.first.attributes.occi.compute.state}"
119
149
 
120
150
  ## delete the resource and exit
121
151
  if clean_up_compute
122
152
  puts "\n\nDeleting compute resource #{cmpt_loc}"
123
- pp client.delete cmpt_loc.to_s.split('/')[3] + '/' + cmpt_loc.to_s.split('/')[4]
153
+ pp client.delete cmpt_loc
124
154
  end
data/lib/occi.rb CHANGED
@@ -1,18 +1,31 @@
1
+ require 'hashie/mash'
2
+
3
+ require 'active_support/json'
4
+ require 'active_support/inflector'
5
+ require 'active_support/notifications'
6
+
7
+ require 'logger'
8
+
9
+ require 'uuidtools'
10
+
11
+ require 'httparty'
12
+
13
+ require 'nokogiri'
14
+
15
+ require 'rubygems/package'
16
+
17
+ require 'zlib'
18
+
19
+ require 'tempfile'
20
+
1
21
  require 'occi/version'
2
22
  require 'occi/parser'
3
23
  require 'occi/model'
4
24
  require 'occi/log'
5
- require 'occi/client'
25
+ require 'occi/api/dsl'
26
+ require 'occi/api/client'
6
27
  require 'occi/collection'
7
- require 'occi/core/action'
8
- require 'occi/core/attribute_properties'
9
- require 'occi/core/attributes'
10
- require 'occi/core/category'
11
- require 'occi/core/entity'
12
- require 'occi/core/kind'
13
- require 'occi/core/link'
14
- require 'occi/core/mixin'
15
- require 'occi/core/resource'
28
+ require 'occi/core'
16
29
 
17
30
  require 'occiantlr/OCCIANTLRLexer'
18
31
  require 'occiantlr/OCCIANTLRParser'