occi-cli 4.0.0.alpha.1 → 4.0.0.alpha.2
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +4 -0
- data/bin/occi +1 -3
- data/lib/occi/cli/occi_opts.rb +10 -3
- data/lib/occi/cli/resource_output_factory.rb +35 -15
- data/lib/occi/cli/templates/compute.erb +12 -8
- data/lib/occi/cli/templates/network.erb +6 -7
- data/lib/occi/cli/templates/os_tpl.erb +1 -2
- data/lib/occi/cli/templates/resource_tpl.erb +1 -2
- data/lib/occi/cli/templates/storage.erb +5 -6
- data/lib/occi/cli/version.rb +1 -1
- data/occi-cli.gemspec +2 -0
- metadata +20 -3
data/Gemfile
CHANGED
data/bin/occi
CHANGED
@@ -41,8 +41,6 @@ Occi::Log.debug "Options: #{options}"
|
|
41
41
|
if options.auth[:password].nil? || options.auth[:user_cert_password].nil?
|
42
42
|
Occi::Log.debug "Password is not set, asking for it now ..."
|
43
43
|
|
44
|
-
say("\n")
|
45
|
-
|
46
44
|
options.auth[:user_cert_password] = ask("Enter a password: ") {
|
47
45
|
|q| q.echo = false
|
48
46
|
} unless options.auth[:type] == "none" || (options.auth[:voms] && options.auth[:type] == "x509")
|
@@ -244,7 +242,7 @@ begin
|
|
244
242
|
|
245
243
|
options.mixins = {}
|
246
244
|
(1..number_of_mixins).each do |mixin_number|
|
247
|
-
mixin = ask("What mixin should I mix in? ") { |q| q.validate =
|
245
|
+
mixin = ask("What mixin should I mix in? ") { |q| q.validate = /^\S+?#\S+$/ }
|
248
246
|
parts = mixin.split("#")
|
249
247
|
|
250
248
|
options.mixins[parts[0]] = [] if options.mixins[parts[0]].nil?
|
data/lib/occi/cli/occi_opts.rb
CHANGED
@@ -203,9 +203,10 @@ occi --endpoint https://localhost:3300/ --action delete --resource /compute/65sd
|
|
203
203
|
"--mixin NAME",
|
204
204
|
String,
|
205
205
|
"Type and name of the mixin as TYPE#NAME (e.g. os_tpl#monitoring, resource_tpl#medium)") do |mixin|
|
206
|
-
parts =
|
206
|
+
parts = /^(\S+?)#(\S+)$/.match(mixin)
|
207
|
+
raise "Unknown mixin format! Use TYPE#NAME!" unless parts
|
207
208
|
|
208
|
-
|
209
|
+
parts = parts.to_a.drop(1)
|
209
210
|
|
210
211
|
options.mixins = {} if options.mixins.nil?
|
211
212
|
options.mixins[parts[0]] = [] if options.mixins[parts[0]].nil?
|
@@ -282,7 +283,13 @@ occi --endpoint https://localhost:3300/ --action delete --resource /compute/65sd
|
|
282
283
|
if @@quiet
|
283
284
|
exit true
|
284
285
|
else
|
285
|
-
|
286
|
+
if options.debug
|
287
|
+
puts "CLI: #{Occi::Cli::VERSION}"
|
288
|
+
puts "API: #{Occi::Api::VERSION}"
|
289
|
+
puts "Core: #{Occi::VERSION}"
|
290
|
+
else
|
291
|
+
puts Occi::Cli::VERSION
|
292
|
+
end
|
286
293
|
exit! true
|
287
294
|
end
|
288
295
|
end
|
@@ -5,7 +5,7 @@ module Occi::Cli
|
|
5
5
|
|
6
6
|
class ResourceOutputFactory
|
7
7
|
|
8
|
-
@@allowed_formats = [:json, :plain].freeze
|
8
|
+
@@allowed_formats = [:json, :plain, :json_pretty].freeze
|
9
9
|
@@allowed_resource_types = [:compute, :storage, :network, :os_tpl, :resource_tpl].freeze
|
10
10
|
@@allowed_data_types = [:locations, :resources].freeze
|
11
11
|
|
@@ -31,7 +31,7 @@ module Occi::Cli
|
|
31
31
|
# construct method name from data type and output format
|
32
32
|
method = (data_type.to_s + "_to_" + output_format.to_s).to_sym
|
33
33
|
|
34
|
-
|
34
|
+
send method, data, resource_type
|
35
35
|
end
|
36
36
|
|
37
37
|
def self.allowed_formats
|
@@ -46,27 +46,41 @@ module Occi::Cli
|
|
46
46
|
@@allowed_data_types
|
47
47
|
end
|
48
48
|
|
49
|
-
def
|
50
|
-
# generate JSON document from an array of JSON objects
|
51
|
-
|
49
|
+
def resources_to_json(occi_resources, resource_type)
|
50
|
+
# generate JSON document from an array of JSON objects
|
51
|
+
if @output_format == :json_pretty
|
52
|
+
JSON.pretty_generate occi_resources
|
53
|
+
else
|
54
|
+
JSON.generate occi_resources
|
55
|
+
end
|
52
56
|
end
|
57
|
+
alias_method :resources_to_json_pretty, :resources_to_json
|
53
58
|
|
54
|
-
def
|
59
|
+
def resources_to_plain(occi_resources, resource_type)
|
55
60
|
# using ERB templates for known resource and mixin types
|
56
|
-
file = File.expand_path(
|
57
|
-
template = ERB.new
|
61
|
+
file = "#{File.expand_path('..', __FILE__)}/templates/#{resource_type.to_s}.erb"
|
62
|
+
template = ERB.new(File.new(file).read, nil, '-')
|
58
63
|
|
59
|
-
formatted_output = ""
|
64
|
+
formatted_output = "\n"
|
60
65
|
|
61
66
|
occi_resources.each do |occi_resource|
|
62
67
|
json_resource = occi_resource.as_json
|
63
|
-
|
68
|
+
next unless json_resource
|
69
|
+
|
70
|
+
if json_resource.resources && json_resource.resources.first
|
71
|
+
attributes = json_resource.resources.first.attributes
|
72
|
+
next unless attributes && attributes.occi
|
73
|
+
|
74
|
+
links = json_resource.links || []
|
75
|
+
end
|
76
|
+
|
77
|
+
formatted_output << template.result(binding)
|
64
78
|
end
|
65
79
|
|
66
80
|
formatted_output
|
67
81
|
end
|
68
82
|
|
69
|
-
def
|
83
|
+
def locations_to_json(url_locations, resource_type)
|
70
84
|
# give all locatios a common key and convert to JSON
|
71
85
|
locations = { resource_type => [] }
|
72
86
|
|
@@ -75,19 +89,25 @@ module Occi::Cli
|
|
75
89
|
locations[resource_type] << location
|
76
90
|
end
|
77
91
|
|
78
|
-
|
92
|
+
# generate JSON document from an array of strings
|
93
|
+
if @output_format == :json_pretty
|
94
|
+
JSON.pretty_generate locations
|
95
|
+
else
|
96
|
+
JSON.generate locations
|
97
|
+
end
|
79
98
|
end
|
99
|
+
alias_method :locations_to_json_pretty, :locations_to_json
|
80
100
|
|
81
|
-
def
|
101
|
+
def locations_to_plain(url_locations, resource_type)
|
82
102
|
# just an attempt to make the array more readable
|
83
|
-
output = "\n
|
103
|
+
output = "\n#{resource_type.to_s.capitalize} locations:\n"
|
84
104
|
|
85
105
|
url_locations.each do |location|
|
86
106
|
location = location.split("/").last if [:os_tpl, :resource_tpl].include? resource_type
|
87
107
|
output << "\t" << location << "\n"
|
88
108
|
end
|
89
109
|
|
90
|
-
output
|
110
|
+
"#{output}\n"
|
91
111
|
end
|
92
112
|
|
93
113
|
end
|
@@ -1,18 +1,22 @@
|
|
1
|
-
|
1
|
+
<%- # We always get a JSON -%>
|
2
2
|
COMPUTE:
|
3
|
-
ID: <%=
|
4
|
-
TITLE: <%=
|
5
|
-
STATE: <%=
|
3
|
+
ID: <%= attributes.occi.core.id %>
|
4
|
+
TITLE: <%= attributes.occi.core.title || attributes.occi.compute.hostname %>
|
5
|
+
STATE: <%= attributes.occi.compute.state %>
|
6
|
+
MEMORY: <%= attributes.occi.compute.memory %> GB
|
7
|
+
CORES: <%= attributes.occi.compute.cores %>
|
6
8
|
LINKS:
|
7
|
-
|
9
|
+
<%- links.each do |link| -%>
|
10
|
+
<%- next unless link && link.attributes -%>
|
11
|
+
|
8
12
|
LINK "<%= link.kind %>":
|
9
13
|
ID: <%= link.attributes.occi.core.id %>
|
10
|
-
TITLE: <%= link.attributes.occi.core.title %>
|
14
|
+
TITLE: <%= link.attributes.occi.core.title || link.target.split('/').last %>
|
11
15
|
TARGET: <%= link.target %>
|
12
16
|
<% if link.attributes.occi.networkinterface %>
|
13
17
|
IP ADDRESS: <%= link.attributes.occi.networkinterface.address %>
|
14
18
|
MAC ADDRESS: <%= link.attributes.occi.networkinterface.mac %>
|
15
19
|
<% elsif link.attributes.occi.storagelink %>
|
16
20
|
MOUNT POINT: <%= link.attributes.occi.storagelink.deviceid %>
|
17
|
-
|
18
|
-
<% end
|
21
|
+
<%- end -%>
|
22
|
+
<% end if links %>
|
@@ -1,9 +1,8 @@
|
|
1
|
-
|
1
|
+
<%- # We always get a JSON -%>
|
2
2
|
NETWORK:
|
3
|
-
ID: <%=
|
4
|
-
TITLE: <%=
|
5
|
-
STATE: <%=
|
6
|
-
ALLOCATION: <%=
|
7
|
-
ADDRESS: <%=
|
8
|
-
|
3
|
+
ID: <%= attributes.occi.core.id %>
|
4
|
+
TITLE: <%= attributes.occi.core.title || attributes.occi.network.label %>
|
5
|
+
STATE: <%= attributes.occi.network.state %>
|
6
|
+
ALLOCATION: <%= attributes.occi.network.allocation || (attributes.occi.networkinterface && attributes.occi.networkinterface.allocation) %>
|
7
|
+
ADDRESS: <%= attributes.occi.network.address || (attributes.occi.networkinterface && attributes.occi.networkinterface.address) %>
|
9
8
|
|
@@ -1,8 +1,7 @@
|
|
1
|
-
|
1
|
+
<%- # We always get a JSON -%>
|
2
2
|
STORAGE:
|
3
|
-
ID: <%=
|
4
|
-
TITLE: <%=
|
5
|
-
STATE: <%=
|
6
|
-
DESCRIPTION: <%=
|
7
|
-
|
3
|
+
ID: <%= attributes.occi.core.id %>
|
4
|
+
TITLE: <%= attributes.occi.core.title %>
|
5
|
+
STATE: <%= attributes.occi.storage.state%>
|
6
|
+
DESCRIPTION: <%= attributes.occi.core.summary %>
|
8
7
|
|
data/lib/occi/cli/version.rb
CHANGED
data/occi-cli.gemspec
CHANGED
@@ -12,6 +12,7 @@ Gem::Specification.new do |gem|
|
|
12
12
|
gem.description = %q{OCCI is a collection of classes to simplify the implementation of the Open Cloud Computing API in Ruby}
|
13
13
|
gem.summary = %q{OCCI toolkit}
|
14
14
|
gem.homepage = 'https://github.com/gwdg/rOCCI-cli'
|
15
|
+
gem.license = 'Apache License, Version 2.0'
|
15
16
|
|
16
17
|
gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
17
18
|
gem.files = `git ls-files`.split("\n")
|
@@ -21,6 +22,7 @@ Gem::Specification.new do |gem|
|
|
21
22
|
|
22
23
|
gem.add_dependency 'occi-api'
|
23
24
|
gem.add_dependency 'highline'
|
25
|
+
gem.add_dependency 'json'
|
24
26
|
|
25
27
|
gem.add_development_dependency "rspec"
|
26
28
|
gem.add_development_dependency "rake"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: occi-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0.0.alpha.
|
4
|
+
version: 4.0.0.alpha.2
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2013-07-
|
14
|
+
date: 2013-07-18 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: occi-api
|
@@ -45,6 +45,22 @@ dependencies:
|
|
45
45
|
- - ! '>='
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: json
|
50
|
+
requirement: !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
type: :runtime
|
57
|
+
prerelease: false
|
58
|
+
version_requirements: !ruby/object:Gem::Requirement
|
59
|
+
none: false
|
60
|
+
requirements:
|
61
|
+
- - ! '>='
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '0'
|
48
64
|
- !ruby/object:Gem::Dependency
|
49
65
|
name: rspec
|
50
66
|
requirement: !ruby/object:Gem::Requirement
|
@@ -214,7 +230,8 @@ files:
|
|
214
230
|
- spec/occi/cli/resource_output_factory_spec.rb
|
215
231
|
- spec/spec_helper.rb
|
216
232
|
homepage: https://github.com/gwdg/rOCCI-cli
|
217
|
-
licenses:
|
233
|
+
licenses:
|
234
|
+
- Apache License, Version 2.0
|
218
235
|
post_install_message:
|
219
236
|
rdoc_options: []
|
220
237
|
require_paths:
|