vcautils 0.7

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/lib/vchs.rb ADDED
@@ -0,0 +1,298 @@
1
+
2
+
3
+ #################################################################################
4
+ #### Massimo Re Ferre' ####
5
+ #### www.it20.info ####
6
+ #### vcautils, a set of utilities for vCloud Air Consumers ####
7
+ #################################################################################
8
+
9
+
10
+ #################################################################################
11
+ #### vcasubscriptions.rb is the front end program for vCA Subscription ####
12
+ #### It leverages the vcautils library ####
13
+ #################################################################################
14
+
15
+
16
+ #################################################################################
17
+ #### IMPORTANT !! ####
18
+ #### The program reads a file called vcautils.yml in the working directory ####
19
+ #### If the file does not exist the program will abort ####
20
+ #### The file is used to provide the program with connectivity parameters ####
21
+ #################################################################################
22
+
23
+ # This is the format of the vcautils.yml file:
24
+ # :username: email@domain
25
+ # :password: password
26
+ # :serviceroot: https://vca.vmware.com
27
+ # :mode: admin | developer
28
+
29
+ # These are the additional modules/gems required to run the program
30
+
31
+ require 'httparty'
32
+ require 'yaml'
33
+ require 'xml-fu'
34
+ require 'pp'
35
+ require 'json'
36
+ require 'awesome_print' #optional - useful for debugging
37
+
38
+ require 'modules/vchs-be'
39
+
40
+
41
+ # We stole this piece of code (silence_warnings) from the Internet.
42
+ # We are using it to silence the warnings of the certificates settings (below)
43
+
44
+
45
+ def silence_warnings(&block)
46
+ warn_level = $VERBOSE
47
+ $VERBOSE = nil
48
+ result = block.call
49
+ $VERBOSE = warn_level
50
+ result
51
+ end
52
+
53
+
54
+
55
+
56
+
57
+ #=begin
58
+ class String
59
+ def black; "\033[30m#{self}\033[0m" end
60
+ def red; "\033[31m#{self}\033[0m" end
61
+ def green; "\033[32m#{self}\033[0m" end
62
+ def brown; "\033[33m#{self}\033[0m" end
63
+ def blue; "\033[34m#{self}\033[0m" end
64
+ def magenta; "\033[35m#{self}\033[0m" end
65
+ def cyan; "\033[36m#{self}\033[0m" end
66
+ def gray; "\033[37m#{self}\033[0m" end
67
+ def bg_black; "\033[40m#{self}\033[0m" end
68
+ def bg_red; "\033[41m#{self}\033[0m" end
69
+ def bg_green; "\033[42m#{self}\033[0m" end
70
+ def bg_brown; "\033[43m#{self}\033[0m" end
71
+ def bg_blue; "\033[44m#{self}\033[0m" end
72
+ def bg_magenta; "\033[45m#{self}\033[0m" end
73
+ def bg_cyan; "\033[46m#{self}\033[0m" end
74
+ def bg_gray; "\033[47m#{self}\033[0m" end
75
+ def bold; "\033[1m#{self}\033[22m" end
76
+ def reverse_color; "\033[7m#{self}\033[27m" end
77
+ end #String
78
+ #=end
79
+
80
+
81
+
82
+
83
+
84
+ # This bypass certification checks... NOT a great idea for production but ok for test / dev
85
+
86
+ silence_warnings do
87
+ OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
88
+ end
89
+
90
+
91
+ # This is what the program accepts as input
92
+
93
+ def usage
94
+ puts "\te.g. vchs services".green
95
+ puts "\te.g. vchs service".green + " <serviceId>".magenta
96
+ puts "\te.g. vchs service".green + " <serviceId>".magenta + " <VDC name>".magenta
97
+ puts "\n"
98
+
99
+ end #usage
100
+
101
+
102
+
103
+ # These are the variables the program accept as inputs (see the usage section for more info)
104
+
105
+ $input0 = ARGV[0]
106
+
107
+ $input1 = ARGV[1]
108
+
109
+ $input2 = ARGV[2]
110
+
111
+ $input3 = ARGV[3]
112
+
113
+ $input4 = ARGV[4]
114
+
115
+
116
+ # The if checks if the user called an operation. If not the case, we print the text on how to use the CLI
117
+
118
+
119
+ if $input0
120
+
121
+ # We login (the login method is in vcautilscore)
122
+
123
+ file_path = "vcautils.yml"
124
+ raise "no file #{file_path}" unless File.exists? file_path
125
+ configuration = YAML.load_file(file_path)
126
+ username = configuration[:username]
127
+ password = configuration[:password]
128
+ vchsserviceroot = "https://vchs.vmware.com"
129
+ mode = configuration[:mode]
130
+ vchsloginserviceroot = "https://vchs.vmware.com"
131
+ acceptheadercompute = "application/*+xml;version=5.6"
132
+
133
+ puts
134
+ puts "Logging in ...\n\n"
135
+
136
+ vchs = Vchs.new()
137
+
138
+ token = vchs.login(username, password, vchsloginserviceroot)
139
+
140
+
141
+ case $input0.chomp
142
+
143
+
144
+ when 'token'
145
+ puts "OAuth token:\n".green + token
146
+
147
+
148
+ when 'services'
149
+ servicesarray = vchs.services(token, vchsserviceroot)
150
+ if mode == "developer" then puts JSON.pretty_generate(servicesarray) end
151
+ if servicesarray['Services']['Service'].any?
152
+ servicesarray['Services']['Service'].length.times do |i|
153
+ puts "region : ".green + servicesarray['Services']['Service'][i]["region"].blue
154
+ puts "serviceId : ".green + servicesarray['Services']['Service'][i]["serviceId"].blue
155
+ puts "serviceType : ".green + servicesarray['Services']['Service'][i]["serviceType"].blue
156
+ puts "type : ".green + servicesarray['Services']['Service'][i]["type"].blue
157
+ puts "href : ".green + servicesarray['Services']['Service'][i]["href"].blue
158
+ puts
159
+ end #servicesarray['Services']['Service'].length.times do |i|
160
+
161
+ else #if servicesarray['Services']['Service'].any?
162
+ puts
163
+ puts "Sorry, this account doesn't have any resource associated".red
164
+ puts
165
+ end #if servicesarray['Services']['Service'].any?
166
+
167
+
168
+ when 'service'
169
+ servicesarray = vchs.services(token, vchsserviceroot)
170
+ if $input1
171
+ if servicesarray['Services']['Service'].any?
172
+ serviceexists = false
173
+ servicesarray["Services"]["Service"].length.times do |i|
174
+ if servicesarray["Services"]["Service"][i]["serviceId"] == $input1
175
+ serviceexists = true
176
+ vdcssarray = vchs.vdcs(token, servicesarray["Services"]["Service"][i]["href"])
177
+ if mode == "developer" then puts JSON.pretty_generate(vdcssarray) end
178
+ puts
179
+ if $input2
180
+ vdcexists = false
181
+ vdcssarray['Compute']['VdcRef'].length.times do |i|
182
+ if vdcssarray['Compute']['VdcRef'][i]["name"] == $input2
183
+ vdcexists = true
184
+ computeattributes = vchs.computeattributes(token, vdcssarray['Compute']['VdcRef'][i]['Link']['href'])
185
+ if mode == "developer" then puts JSON.pretty_generate(computeattributes) end
186
+ puts
187
+ puts "href : ".green + computeattributes['VCloudSession']['VdcLink']["href"].blue
188
+ puts "authorizationToken : ".green + computeattributes['VCloudSession']['VdcLink']["authorizationToken"].blue
189
+ puts "authorizationHeader : ".green + computeattributes['VCloudSession']['VdcLink']["authorizationHeader"].blue
190
+ puts
191
+ puts "friendly API URL handoff : ".green + computeattributes['VCloudSession']['VdcLink']["href"][0..41].blue + 'org/'.blue + vdcssarray['Compute']['VdcRef'][i]["name"].blue
192
+ puts "friendly <vCD Org name> is : ".green + vdcssarray['Compute']['VdcRef'][i]["name"].blue
193
+ puts
194
+ end # if vdcssarray['Compute']['VdcRef'][i]["name"] == $input2
195
+ end #vdcssarray['Compute']['VdcRef'].length.times do |i|
196
+
197
+ if vdcexists == false
198
+ puts
199
+ puts "The VDC ".red + $input2.blue + " does not exist".red
200
+ puts
201
+ end #if vdcexists exists
202
+
203
+ else #if $input2
204
+ vdcssarray['Compute']['VdcRef'].length.times do |i|
205
+ puts "name : ".green + vdcssarray['Compute']['VdcRef'][i]["name"].blue
206
+ puts "status : ".green + vdcssarray['Compute']['VdcRef'][i]["status"].blue
207
+ puts "type : ".green + vdcssarray['Compute']['VdcRef'][i]["type"].blue
208
+ puts "href : ".green + vdcssarray['Compute']['VdcRef'][i]["href"].blue
209
+ puts
210
+ end #vdcssarray['Compute']['VdcRef'].length.times do |i|
211
+ end #if $input2
212
+ end #if servicesarray["Services"]["Service"][i]["serviceId"] == $input1
213
+ end #servicesarray["Services"]["Service"].length.times do |i|
214
+ else #servicesarray['Services']['Service'].any?
215
+ puts
216
+ puts "Sorry, this account doesn't have any resource associated".red
217
+ puts
218
+ end #servicesarray['Services']['Service'].any?
219
+
220
+ else #if $input1
221
+ puts
222
+ puts "You need to specify a serviceId".red
223
+ puts
224
+ end #if $input1
225
+
226
+ if serviceexists == false
227
+ puts
228
+ puts "The serviceId ".red + $input1.blue + " does not exist".red
229
+ puts
230
+ end #if instance exists
231
+
232
+
233
+
234
+
235
+ else #case $input0
236
+ puts "\n"
237
+ puts "Noooooope!".red
238
+ puts "\n"
239
+ usage()
240
+ puts "\n"
241
+
242
+ end #case $input0.chomp
243
+
244
+
245
+ # If the user did not specify an operation at all we suggest how to properly use the CLI
246
+
247
+ else #if $input0
248
+ puts "\n"
249
+ puts "Use any of the following operations".red
250
+ puts "\n"
251
+ usage()
252
+ puts "\n"
253
+
254
+
255
+
256
+ end #main if
257
+
258
+
259
+
260
+
261
+
262
+
263
+
264
+
265
+
266
+
267
+
268
+
269
+
270
+
271
+
272
+
273
+
274
+
275
+
276
+
277
+
278
+
279
+
280
+
281
+
282
+
283
+
284
+
285
+
286
+
287
+
288
+
289
+
290
+
291
+
292
+
293
+
294
+
295
+
296
+
297
+
298
+
metadata ADDED
@@ -0,0 +1,177 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: vcautils
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.7'
5
+ platform: ruby
6
+ authors:
7
+ - Massimo Re Ferrè
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-07-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: httparty
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 0.13.3
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 0.13.3
27
+ - !ruby/object:Gem::Dependency
28
+ name: xml-fu
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 0.2.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 0.2.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: awesome_print
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '1.6'
48
+ - - ! '>='
49
+ - !ruby/object:Gem::Version
50
+ version: 1.6.1
51
+ type: :runtime
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ~>
56
+ - !ruby/object:Gem::Version
57
+ version: '1.6'
58
+ - - ! '>='
59
+ - !ruby/object:Gem::Version
60
+ version: 1.6.1
61
+ - !ruby/object:Gem::Dependency
62
+ name: gon-sinatra
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ~>
66
+ - !ruby/object:Gem::Version
67
+ version: 0.1.2
68
+ type: :runtime
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ~>
73
+ - !ruby/object:Gem::Version
74
+ version: 0.1.2
75
+ - !ruby/object:Gem::Dependency
76
+ name: json
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ~>
80
+ - !ruby/object:Gem::Version
81
+ version: '1.8'
82
+ - - ! '>='
83
+ - !ruby/object:Gem::Version
84
+ version: 1.8.2
85
+ type: :runtime
86
+ prerelease: false
87
+ version_requirements: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ~>
90
+ - !ruby/object:Gem::Version
91
+ version: '1.8'
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: 1.8.2
95
+ - !ruby/object:Gem::Dependency
96
+ name: sinatra
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ~>
100
+ - !ruby/object:Gem::Version
101
+ version: '1.4'
102
+ - - ! '>='
103
+ - !ruby/object:Gem::Version
104
+ version: 1.4.5
105
+ type: :runtime
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ~>
110
+ - !ruby/object:Gem::Version
111
+ version: '1.4'
112
+ - - ! '>='
113
+ - !ruby/object:Gem::Version
114
+ version: 1.4.5
115
+ - !ruby/object:Gem::Dependency
116
+ name: rack-ssl
117
+ requirement: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - ~>
120
+ - !ruby/object:Gem::Version
121
+ version: '1.4'
122
+ - - ! '>='
123
+ - !ruby/object:Gem::Version
124
+ version: 1.4.1
125
+ type: :runtime
126
+ prerelease: false
127
+ version_requirements: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ~>
130
+ - !ruby/object:Gem::Version
131
+ version: '1.4'
132
+ - - ! '>='
133
+ - !ruby/object:Gem::Version
134
+ version: 1.4.1
135
+ description: A set of tools to programmatically access VMware vCloud Air
136
+ email: massimo@it20.info
137
+ executables:
138
+ - vca
139
+ - vchs
140
+ - compute
141
+ extensions: []
142
+ extra_rdoc_files: []
143
+ files:
144
+ - bin/compute
145
+ - bin/vca
146
+ - bin/vchs
147
+ - lib/compute.rb
148
+ - lib/modules/compute-be.rb
149
+ - lib/modules/vca-be.rb
150
+ - lib/modules/vchs-be.rb
151
+ - lib/vca.rb
152
+ - lib/vchs.rb
153
+ homepage: http://it20.info
154
+ licenses:
155
+ - Apache License
156
+ metadata: {}
157
+ post_install_message:
158
+ rdoc_options: []
159
+ require_paths:
160
+ - lib
161
+ required_ruby_version: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ! '>='
164
+ - !ruby/object:Gem::Version
165
+ version: 1.9.3
166
+ required_rubygems_version: !ruby/object:Gem::Requirement
167
+ requirements:
168
+ - - ! '>='
169
+ - !ruby/object:Gem::Version
170
+ version: '0'
171
+ requirements: []
172
+ rubyforge_project:
173
+ rubygems_version: 2.4.5
174
+ signing_key:
175
+ specification_version: 4
176
+ summary: VMware vCloud Air Utilities
177
+ test_files: []