morpheus-cli 3.4.1.4 → 3.4.1.5
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 1733b5ed349e532113b94d11eea6d9f5f04c1e3b7395077192225a7c017dcc95
|
4
|
+
data.tar.gz: ae7c082eb787c6c2a360e571589bd804bedd482a2cccc0046d830c0f4692d15e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 18e3085b2ebd404ad6b5b0094866fc129034c5e975ad652e42f3f175bba87bdf2793eb208fac00bbfefb317ca252498d67afbbfaee51655dbf126cd6289b63d6
|
7
|
+
data.tar.gz: 7a0aa9d880ad260ca43f1596db41d1b4997ced25818772aca2f7cdfd1490039878af574b1d340aeab6955e78e682dec1bce7c13dcfec9baae6d24da7f5c7fa53
|
@@ -1,4 +1,7 @@
|
|
1
1
|
require 'morpheus/api/api_client'
|
2
|
+
require 'http'
|
3
|
+
require 'zlib'
|
4
|
+
require 'forwardable'
|
2
5
|
|
3
6
|
class Morpheus::VirtualImagesInterface < Morpheus::APIClient
|
4
7
|
def initialize(access_token, refresh_token,expires_at = nil, base_url=nil)
|
@@ -65,14 +68,87 @@ class Morpheus::VirtualImagesInterface < Morpheus::APIClient
|
|
65
68
|
# execute(method: :post, url: url, headers: headers, payload: payload)
|
66
69
|
# end
|
67
70
|
|
71
|
+
# wrapper class for input stream so that HTTP doesn't blow up when using it
|
72
|
+
# ie. calling size() and rewind()
|
73
|
+
class BodyIO
|
74
|
+
extend Forwardable
|
75
|
+
|
76
|
+
def initialize(io)
|
77
|
+
@io = io
|
78
|
+
end
|
79
|
+
|
80
|
+
def size
|
81
|
+
0
|
82
|
+
end
|
83
|
+
|
84
|
+
def rewind
|
85
|
+
nil
|
86
|
+
end
|
87
|
+
|
88
|
+
def_delegators :@io, :read, :readpartial, :write
|
89
|
+
|
90
|
+
end
|
91
|
+
|
68
92
|
# no multipart
|
69
|
-
def upload(id, image_file, filename=nil)
|
93
|
+
def upload(id, image_file, filename=nil, do_gzip=false)
|
70
94
|
filename = filename || File.basename(image_file)
|
71
95
|
url = "#{@base_url}/api/virtual-images/#{id}/upload"
|
72
96
|
headers = { :params => {}, :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/octet-stream'}
|
73
97
|
headers[:params][:filename] = filename
|
74
98
|
payload = image_file
|
75
|
-
execute(method: :post, url: url, headers: headers, payload: payload, timeout: 36000)
|
99
|
+
#execute(method: :post, url: url, headers: headers, payload: payload, timeout: 36000)
|
100
|
+
|
101
|
+
# Using http.rb instead of RestClient
|
102
|
+
# todo: execute() should support :driver
|
103
|
+
|
104
|
+
|
105
|
+
http_opts = {}
|
106
|
+
if @verify_ssl == false
|
107
|
+
ctx = OpenSSL::SSL::SSLContext.new
|
108
|
+
ctx.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
109
|
+
http_opts[:ssl_context] = ctx
|
110
|
+
# opts[:verify_ssl] = OpenSSL::SSL::VERIFY_NONE
|
111
|
+
end
|
112
|
+
|
113
|
+
start_time = Time.now
|
114
|
+
query_params = headers.delete(:params) || {}
|
115
|
+
if do_gzip
|
116
|
+
# http = http.use(:auto_deflate)
|
117
|
+
headers['Content-Encoding'] = 'gzip'
|
118
|
+
headers['Content-Type'] = 'application/gzip'
|
119
|
+
headers['Content-Length'] = image_file.size
|
120
|
+
#headers['Transfer-Encoding'] = 'Chunked'
|
121
|
+
query_params['extractedContentLength'] = image_file.size
|
122
|
+
if @dry_run
|
123
|
+
return {method: :post, url: url, headers: headers, params: query_params, payload: payload}
|
124
|
+
end
|
125
|
+
http = HTTP.headers(headers)
|
126
|
+
http_opts[:params] = query_params
|
127
|
+
|
128
|
+
rd, wr = IO.pipe
|
129
|
+
Thread.new {
|
130
|
+
gz = Zlib::GzipWriter.new(wr)
|
131
|
+
File.open(payload) do |fp|
|
132
|
+
while chunk = fp.read(10 * 1024 * 1024) do
|
133
|
+
gz.write chunk
|
134
|
+
end
|
135
|
+
end
|
136
|
+
gz.close
|
137
|
+
}
|
138
|
+
http_opts[:body] = BodyIO.new(rd)
|
139
|
+
response = http.post(url, http_opts)
|
140
|
+
else
|
141
|
+
if @dry_run
|
142
|
+
return {method: :post, url: url, headers: headers, params: query_params, payload: payload}
|
143
|
+
end
|
144
|
+
http = HTTP.headers(headers)
|
145
|
+
http_opts[:params] = query_params
|
146
|
+
http_opts[:body] = payload
|
147
|
+
response = http.post(url, http_opts)
|
148
|
+
end
|
149
|
+
# puts "Took #{Time.now.to_i - start_time.to_i}"
|
150
|
+
# return response
|
151
|
+
return JSON.parse(response.body.to_s)
|
76
152
|
end
|
77
153
|
|
78
154
|
def upload_by_url(id, file_url, filename=nil)
|
@@ -103,7 +103,7 @@ module Morpheus::Cli::PrintHelper
|
|
103
103
|
url = "#{url}?#{query_string}"
|
104
104
|
end
|
105
105
|
request_string = "#{http_method.to_s.upcase} #{url}".strip
|
106
|
-
payload = opts[:payload]
|
106
|
+
payload = opts[:payload] || opts[:body]
|
107
107
|
if command_string
|
108
108
|
print_h1 "DRY RUN > #{command_string}"
|
109
109
|
else
|
data/lib/morpheus/cli/version.rb
CHANGED
@@ -458,6 +458,7 @@ class Morpheus::Cli::VirtualImages
|
|
458
458
|
def add_file(args)
|
459
459
|
file_url = nil
|
460
460
|
file_name = nil
|
461
|
+
do_gzip = false
|
461
462
|
options = {}
|
462
463
|
optparse = Morpheus::Cli::OptionParser.new do |opts|
|
463
464
|
opts.banner = subcommand_usage("[name] [filepath]")
|
@@ -467,6 +468,9 @@ class Morpheus::Cli::VirtualImages
|
|
467
468
|
opts.on( '-U', '--url URL', "Image File URL. This can be used instead of [filepath]" ) do |val|
|
468
469
|
file_url = val
|
469
470
|
end
|
471
|
+
opts.on( nil, '--gzip', "Compress uploaded file" ) do
|
472
|
+
do_gzip = true
|
473
|
+
end
|
470
474
|
build_common_options(opts, options, [:json, :dry_run, :quiet, :remote])
|
471
475
|
opts.footer = "Upload a virtual image file." + "\n" +
|
472
476
|
"[name] is required. This is the name or id of a virtual image." + "\n" +
|
@@ -511,13 +515,13 @@ class Morpheus::Cli::VirtualImages
|
|
511
515
|
else
|
512
516
|
image_file = File.new(filepath, 'rb')
|
513
517
|
if options[:dry_run]
|
514
|
-
print_dry_run @virtual_images_interface.dry.upload(image['id'], image_file, file_name)
|
518
|
+
print_dry_run @virtual_images_interface.dry.upload(image['id'], image_file, file_name, do_gzip)
|
515
519
|
return
|
516
520
|
end
|
517
521
|
unless options[:quiet]
|
518
522
|
print cyan, "Uploading file #{filepath} ...", reset, "\n"
|
519
523
|
end
|
520
|
-
json_response = @virtual_images_interface.upload(image['id'], image_file, file_name)
|
524
|
+
json_response = @virtual_images_interface.upload(image['id'], image_file, file_name, do_gzip)
|
521
525
|
if options[:json]
|
522
526
|
print JSON.pretty_generate(json_response)
|
523
527
|
elsif !options[:quiet]
|
data/morpheus-cli.gemspec
CHANGED
@@ -18,6 +18,7 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
+
spec.required_ruby_version = '>= 2.3' # according to http.rb doc
|
21
22
|
spec.add_development_dependency "bundler", "~> 1.6"
|
22
23
|
spec.add_development_dependency "rake"
|
23
24
|
spec.add_dependency 'term-ansicolor', '~> 1.3.0'
|
@@ -26,4 +27,5 @@ Gem::Specification.new do |spec|
|
|
26
27
|
spec.add_dependency "filesize"
|
27
28
|
spec.add_dependency 'mime-types'
|
28
29
|
spec.add_dependency "table_print"
|
30
|
+
spec.add_dependency "http"
|
29
31
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: morpheus-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.4.1.
|
4
|
+
version: 3.4.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Estes
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2018-07-
|
14
|
+
date: 2018-07-12 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: bundler
|
@@ -125,6 +125,20 @@ dependencies:
|
|
125
125
|
- - ">="
|
126
126
|
- !ruby/object:Gem::Version
|
127
127
|
version: '0'
|
128
|
+
- !ruby/object:Gem::Dependency
|
129
|
+
name: http
|
130
|
+
requirement: !ruby/object:Gem::Requirement
|
131
|
+
requirements:
|
132
|
+
- - ">="
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: '0'
|
135
|
+
type: :runtime
|
136
|
+
prerelease: false
|
137
|
+
version_requirements: !ruby/object:Gem::Requirement
|
138
|
+
requirements:
|
139
|
+
- - ">="
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
128
142
|
description: Infrastructure agnostic cloud application management & orchestration
|
129
143
|
CLI for Morpheus. Easily manage and orchestrate VMS on private or public infrastructure
|
130
144
|
and containerized architectures.
|
@@ -321,7 +335,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
321
335
|
requirements:
|
322
336
|
- - ">="
|
323
337
|
- !ruby/object:Gem::Version
|
324
|
-
version: '
|
338
|
+
version: '2.3'
|
325
339
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
326
340
|
requirements:
|
327
341
|
- - ">="
|
@@ -329,7 +343,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
329
343
|
version: '0'
|
330
344
|
requirements: []
|
331
345
|
rubyforge_project:
|
332
|
-
rubygems_version: 2.
|
346
|
+
rubygems_version: 2.7.6
|
333
347
|
signing_key:
|
334
348
|
specification_version: 4
|
335
349
|
summary: Provides CLI Interface to the Morpheus Public/Private Cloud Appliance
|