morpheus-cli 4.2.16 → 4.2.21
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.
- checksums.yaml +4 -4
- data/Dockerfile +1 -1
- data/README.md +8 -6
- data/lib/morpheus/api/api_client.rb +32 -14
- data/lib/morpheus/api/auth_interface.rb +4 -2
- data/lib/morpheus/api/backup_jobs_interface.rb +9 -0
- data/lib/morpheus/api/backups_interface.rb +16 -0
- data/lib/morpheus/api/deploy_interface.rb +25 -56
- data/lib/morpheus/api/deployments_interface.rb +44 -55
- data/lib/morpheus/api/doc_interface.rb +57 -0
- data/lib/morpheus/api/instances_interface.rb +5 -0
- data/lib/morpheus/api/rest_interface.rb +40 -0
- data/lib/morpheus/api/user_sources_interface.rb +0 -15
- data/lib/morpheus/api/users_interface.rb +2 -3
- data/lib/morpheus/benchmarking.rb +2 -2
- data/lib/morpheus/cli.rb +4 -1
- data/lib/morpheus/cli/access_token_command.rb +27 -10
- data/lib/morpheus/cli/apps.rb +21 -15
- data/lib/morpheus/cli/backup_jobs_command.rb +276 -0
- data/lib/morpheus/cli/backups_command.rb +271 -0
- data/lib/morpheus/cli/blueprints_command.rb +27 -61
- data/lib/morpheus/cli/boot_scripts_command.rb +1 -1
- data/lib/morpheus/cli/budgets_command.rb +4 -4
- data/lib/morpheus/cli/cli_command.rb +99 -41
- data/lib/morpheus/cli/cloud_resource_pools_command.rb +16 -0
- data/lib/morpheus/cli/clouds.rb +7 -10
- data/lib/morpheus/cli/clusters.rb +0 -18
- data/lib/morpheus/cli/commands/standard/benchmark_command.rb +7 -7
- data/lib/morpheus/cli/commands/standard/man_command.rb +1 -1
- data/lib/morpheus/cli/credentials.rb +13 -9
- data/lib/morpheus/cli/deploy.rb +374 -0
- data/lib/morpheus/cli/deployments.rb +521 -197
- data/lib/morpheus/cli/deploys.rb +271 -126
- data/lib/morpheus/cli/doc.rb +182 -0
- data/lib/morpheus/cli/error_handler.rb +23 -8
- data/lib/morpheus/cli/errors.rb +3 -2
- data/lib/morpheus/cli/image_builder_command.rb +2 -2
- data/lib/morpheus/cli/instances.rb +136 -17
- data/lib/morpheus/cli/invoices_command.rb +59 -47
- data/lib/morpheus/cli/jobs_command.rb +2 -2
- data/lib/morpheus/cli/library_instance_types_command.rb +17 -3
- data/lib/morpheus/cli/library_layouts_command.rb +1 -1
- data/lib/morpheus/cli/login.rb +9 -3
- data/lib/morpheus/cli/mixins/accounts_helper.rb +158 -100
- data/lib/morpheus/cli/mixins/backups_helper.rb +115 -0
- data/lib/morpheus/cli/mixins/deployments_helper.rb +135 -0
- data/lib/morpheus/cli/mixins/option_source_helper.rb +1 -1
- data/lib/morpheus/cli/mixins/print_helper.rb +110 -74
- data/lib/morpheus/cli/mixins/provisioning_helper.rb +2 -2
- data/lib/morpheus/cli/mixins/whoami_helper.rb +19 -6
- data/lib/morpheus/cli/network_routers_command.rb +1 -1
- data/lib/morpheus/cli/option_parser.rb +48 -5
- data/lib/morpheus/cli/option_types.rb +1 -1
- data/lib/morpheus/cli/projects_command.rb +7 -7
- data/lib/morpheus/cli/provisioning_licenses_command.rb +2 -2
- data/lib/morpheus/cli/remote.rb +3 -2
- data/lib/morpheus/cli/roles.rb +49 -92
- data/lib/morpheus/cli/security_groups.rb +7 -1
- data/lib/morpheus/cli/service_plans_command.rb +10 -10
- data/lib/morpheus/cli/setup.rb +1 -1
- data/lib/morpheus/cli/shell.rb +7 -6
- data/lib/morpheus/cli/subnets_command.rb +1 -1
- data/lib/morpheus/cli/tasks.rb +24 -10
- data/lib/morpheus/cli/tenants_command.rb +133 -163
- data/lib/morpheus/cli/user_groups_command.rb +20 -65
- data/lib/morpheus/cli/user_settings_command.rb +115 -13
- data/lib/morpheus/cli/user_sources_command.rb +57 -24
- data/lib/morpheus/cli/users.rb +210 -186
- data/lib/morpheus/cli/version.rb +1 -1
- data/lib/morpheus/cli/whitelabel_settings_command.rb +29 -5
- data/lib/morpheus/cli/whoami.rb +113 -6
- data/lib/morpheus/cli/workflows.rb +11 -8
- data/lib/morpheus/ext/hash.rb +21 -0
- data/lib/morpheus/terminal.rb +1 -0
- metadata +12 -3
- data/lib/morpheus/cli/auth_command.rb +0 -105
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6e42e74a1ee8d23e7b91134313dbcb6ba8b42857973c8b33057e8bb433a1d5f3
|
4
|
+
data.tar.gz: 05e7210bcd6a08b00feb395c04ea3b109c0c58c54b95c163d5c5ef84505dddc5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6206a6bfdada390d10a4b7202794fdde6a0f0edafc5df7025e053c991d23b576be989f73d2cc95d51927600d5fb11f9393951659097c9038ce3d9a038a64b344
|
7
|
+
data.tar.gz: a08c1b2a452b868e15f30cae19d56ae4fd817fcf441cee05ab87fed718e7b933211430dd41dfb3060714526fe1d318865844d57bf2e8dea2cd0a489d7cec58f1
|
data/Dockerfile
CHANGED
data/README.md
CHANGED
@@ -11,7 +11,11 @@ This library is a Ruby gem that provides a command line interface for interactin
|
|
11
11
|
|
12
12
|
## Installation
|
13
13
|
|
14
|
-
|
14
|
+
Install it using rubygems
|
15
|
+
|
16
|
+
$ gem install morpheus-cli
|
17
|
+
|
18
|
+
Or add this line to your application's Gemfile:
|
15
19
|
|
16
20
|
gem 'morpheus-cli'
|
17
21
|
|
@@ -19,15 +23,13 @@ And then execute:
|
|
19
23
|
|
20
24
|
$ bundle install
|
21
25
|
|
22
|
-
Or install it yourself as:
|
23
26
|
|
24
|
-
$ gem install morpheus-cli
|
25
27
|
|
26
28
|
## Usage
|
27
29
|
|
28
|
-
### morpheus
|
30
|
+
### morpheus command
|
29
31
|
|
30
|
-
This gem installs the [morpheus](https://github.com/gomorpheus/morpheus-cli/wiki/CLI-Manual) binary for
|
32
|
+
This gem installs the [morpheus](https://github.com/gomorpheus/morpheus-cli/wiki/CLI-Manual) binary for running commands in your terminal shell.
|
31
33
|
|
32
34
|
```sh
|
33
35
|
morpheus remote add demo https://demo.mymorpheus.com
|
@@ -36,6 +38,6 @@ morpheus instances list
|
|
36
38
|
|
37
39
|
### ruby code
|
38
40
|
|
39
|
-
If you
|
41
|
+
If you are interested in interfacing with the Morpheus appliance in ruby directly, you can use [Morpheus::APIClient](https://github.com/gomorpheus/morpheus-cli/wiki/APIClient) or [Morpheus::Terminal](https://github.com/gomorpheus/morpheus-cli/wiki/Terminal).
|
40
42
|
|
41
43
|
For more detailed usage information, visit the [Morpheus CLI Wiki](https://github.com/gomorpheus/morpheus-cli/wiki).
|
@@ -173,6 +173,9 @@ class Morpheus::APIClient
|
|
173
173
|
|
174
174
|
# apply default headers
|
175
175
|
opts[:headers] ||= {}
|
176
|
+
|
177
|
+
is_multipart = (opts[:payload].is_a?(Hash) && opts[:payload][:multipart])
|
178
|
+
|
176
179
|
# Authorization: apply our access token
|
177
180
|
if authorization_required?
|
178
181
|
if @access_token
|
@@ -184,16 +187,16 @@ class Morpheus::APIClient
|
|
184
187
|
end
|
185
188
|
end
|
186
189
|
|
187
|
-
# Content-Type
|
188
|
-
if opts[:headers]['Content-Type'].nil? &&
|
189
|
-
opts[:headers]['Content-Type'] = default_content_type
|
190
|
-
end
|
191
|
-
|
192
|
-
# default Content-Type to application/json if you pass a payload.
|
193
|
-
if opts[:headers]['Content-Type'].nil? && options[:payload]
|
194
|
-
opts[:headers]['Content-Type'] = 'application/json'
|
190
|
+
# Content-Type default is application/json
|
191
|
+
if opts[:headers]['Content-Type'].nil? && opts[:payload] && is_multipart == false
|
192
|
+
opts[:headers]['Content-Type'] = (default_content_type || 'application/json')
|
195
193
|
end
|
196
194
|
|
195
|
+
# this could be nice too..
|
196
|
+
# if opts[:headers]['Content-Type'] == 'application/json' && opts[:payload].is_a?(Hash)
|
197
|
+
# opts[:payload] = opts[:payload].to_json
|
198
|
+
# end
|
199
|
+
|
197
200
|
# always use custom timeout eg. from --timeout option
|
198
201
|
# or use default_timeout for GET requests only.
|
199
202
|
if opts[:timeout].nil?
|
@@ -213,9 +216,9 @@ class Morpheus::APIClient
|
|
213
216
|
# this is confusing, but RestClient expects :params inside the headers...?
|
214
217
|
# move/copy params to headers.params for simplification.
|
215
218
|
# remove this if issues arise
|
216
|
-
if opts[:params] && (opts[:headers][:params].nil? || opts[:headers][:params].empty?)
|
217
|
-
|
218
|
-
end
|
219
|
+
# if opts[:params] && (opts[:headers][:params].nil? || opts[:headers][:params].empty?)
|
220
|
+
# opts[:headers][:params] = opts.delete(:params) # .delete(:params) maybe?
|
221
|
+
# end
|
219
222
|
|
220
223
|
# :command_options for these
|
221
224
|
# if options[:curl]
|
@@ -287,11 +290,14 @@ class Morpheus::APIClient
|
|
287
290
|
return self
|
288
291
|
end
|
289
292
|
|
290
|
-
def
|
291
|
-
if
|
293
|
+
def use_refresh_token(t=nil)
|
294
|
+
if t.nil?
|
295
|
+
t = @refresh_token
|
296
|
+
end
|
297
|
+
if t.nil?
|
292
298
|
raise "#{self.class} does not currently have a refresh_token"
|
293
299
|
end
|
294
|
-
response = auth.use_refresh_token(
|
300
|
+
response = auth.use_refresh_token(t, self.client_id)
|
295
301
|
@access_token = response['access_token']
|
296
302
|
@refresh_token = response['refresh_token']
|
297
303
|
if response['expires_in'] != nil
|
@@ -319,6 +325,10 @@ class Morpheus::APIClient
|
|
319
325
|
}
|
320
326
|
end
|
321
327
|
|
328
|
+
def doc
|
329
|
+
Morpheus::DocInterface.new(common_interface_options).setopts(@options)
|
330
|
+
end
|
331
|
+
|
322
332
|
def ping
|
323
333
|
Morpheus::PingInterface.new(common_interface_options).setopts(@options)
|
324
334
|
end
|
@@ -746,6 +756,14 @@ class Morpheus::APIClient
|
|
746
756
|
Morpheus::ProjectsInterface.new(common_interface_options).setopts(@options)
|
747
757
|
end
|
748
758
|
|
759
|
+
def backups
|
760
|
+
Morpheus::BackupsInterface.new(common_interface_options).setopts(@options)
|
761
|
+
end
|
762
|
+
|
763
|
+
def backup_jobs
|
764
|
+
Morpheus::BackupJobsInterface.new(common_interface_options).setopts(@options)
|
765
|
+
end
|
766
|
+
|
749
767
|
# add new interfaces here
|
750
768
|
|
751
769
|
end
|
@@ -15,7 +15,8 @@ class Morpheus::AuthInterface < Morpheus::APIClient
|
|
15
15
|
url = "#{@base_url}/oauth/token"
|
16
16
|
params = {grant_type: 'password', scope:'write', client_id: self.client_id, username: username}
|
17
17
|
payload = {password: password}
|
18
|
-
|
18
|
+
headers = { 'Content-Type' => 'application/x-www-form-urlencoded' }
|
19
|
+
opts = {method: :post, url: url, headers: headers, params: params, payload: payload, timeout: 5}
|
19
20
|
response = execute(opts)
|
20
21
|
return response if @dry_run
|
21
22
|
@access_token = response['access_token']
|
@@ -35,7 +36,8 @@ class Morpheus::AuthInterface < Morpheus::APIClient
|
|
35
36
|
url = "#{@base_url}/oauth/token"
|
36
37
|
params = {grant_type: 'refresh_token', scope:'write', client_id: self.client_id}
|
37
38
|
payload = {refresh_token: refresh_token}
|
38
|
-
|
39
|
+
headers = { 'Content-Type' => 'application/x-www-form-urlencoded' }
|
40
|
+
opts = {method: :post, url: url, headers: headers, params: params, payload: payload, timeout: 5}
|
39
41
|
response = execute(opts)
|
40
42
|
return response if @dry_run
|
41
43
|
@access_token = response['access_token']
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'morpheus/api/rest_interface'
|
2
|
+
|
3
|
+
class Morpheus::BackupsInterface < Morpheus::RestInterface
|
4
|
+
|
5
|
+
def base_path
|
6
|
+
"/api/backups"
|
7
|
+
end
|
8
|
+
|
9
|
+
def summary(params={})
|
10
|
+
execute(method: :get, url: "#{base_path}/summary", params: params)
|
11
|
+
end
|
12
|
+
|
13
|
+
def history(params={})
|
14
|
+
execute(method: :get, url: "#{base_path}/history", params: params)
|
15
|
+
end
|
16
|
+
end
|
@@ -10,71 +10,40 @@ class Morpheus::DeployInterface < Morpheus::APIClient
|
|
10
10
|
@expires_at = expires_at
|
11
11
|
end
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
headers = { params: {}, authorization: "Bearer #{@access_token}" }
|
17
|
-
|
18
|
-
if options.is_a?(Hash)
|
19
|
-
headers[:params].merge!(options)
|
20
|
-
elsif options.is_a?(String)
|
21
|
-
headers[:params]['name'] = options
|
22
|
-
end
|
23
|
-
execute(method: :get, url: url, headers: headers)
|
13
|
+
def base_path
|
14
|
+
# /api/deploys is now available in 5.0, switch to that eventually...
|
15
|
+
"/api/deploy"
|
24
16
|
end
|
25
|
-
|
26
|
-
|
27
|
-
def create(instanceId, options=nil)
|
28
|
-
url = "#{@base_url}/api/instances/#{instanceId}/deploy"
|
29
|
-
headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
|
30
|
-
payload = options || {}
|
31
|
-
execute(method: :post, url: url, headers: headers, payload: payload.to_json)
|
17
|
+
def list(params={})
|
18
|
+
execute(method: :get, url: "#{base_path}", params: params)
|
32
19
|
end
|
33
20
|
|
34
|
-
def
|
35
|
-
|
36
|
-
|
37
|
-
payload = options
|
38
|
-
execute(method: :get, url: url, headers: headers)
|
21
|
+
def get(instance_id, id, params={})
|
22
|
+
validate_id!(id)
|
23
|
+
execute(method: :get, url: "#{base_path}/#{id}", params: params)
|
39
24
|
end
|
40
25
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
url
|
46
|
-
end
|
47
|
-
headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/octet-stream' }
|
48
|
-
opts = { method: :post, url: url, headers: headers, payload: File.new(path,'rb')}
|
49
|
-
if @dry_run
|
50
|
-
return opts
|
26
|
+
def create(instance_id, payload, params={})
|
27
|
+
if instance_id
|
28
|
+
execute(method: :post, url: "/api/instances/#{instance_id}/deploy", params: params, payload: payload.to_json)
|
29
|
+
else
|
30
|
+
execute(method: :post, url: "#{base_path}", params: params, payload: payload.to_json)
|
51
31
|
end
|
52
|
-
uri = URI.parse(url)
|
53
|
-
req = Net::HTTP::Post::Multipart.new uri.path,
|
54
|
-
"file" => UploadIO.new(File.new(path,'rb'), "image/jpeg", File.basename(path))
|
55
|
-
# todo: iterate headers and abstract th :upload_io to execute() too.
|
56
|
-
req['Authorization'] = "Bearer #{@access_token}"
|
57
|
-
res = Net::HTTP.start(uri.host, uri.port) do |http|
|
58
|
-
http.request(req)
|
59
|
-
end
|
60
|
-
res
|
61
32
|
end
|
62
33
|
|
63
|
-
def
|
64
|
-
|
65
|
-
|
66
|
-
execute(method: :delete, url: url, headers: headers)
|
34
|
+
def update(id, payload, params={})
|
35
|
+
validate_id!(id)
|
36
|
+
execute(url: "#{base_path}/#{id}", params: params, payload: payload.to_json, method: :put)
|
67
37
|
end
|
68
38
|
|
69
|
-
def
|
70
|
-
|
71
|
-
|
72
|
-
if !options[:appDeploy].nil?
|
73
|
-
if !options[:appDeploy][:config].nil?
|
74
|
-
options[:appDeploy][:config] = options[:appDeploy][:config].to_json
|
75
|
-
end
|
76
|
-
end
|
77
|
-
headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
|
78
|
-
execute(method: :post, url: url, headers: headers, timeout: nil, payload: payload.to_json)
|
39
|
+
def destroy(id, params = {})
|
40
|
+
validate_id!(id)
|
41
|
+
execute(url: "#{base_path}/#{id}", params: params, method: :delete)
|
79
42
|
end
|
43
|
+
|
44
|
+
def deploy(id, payload, params = {})
|
45
|
+
validate_id!(id)
|
46
|
+
execute(url: "#{base_path}/#{id}/deploy", params: params, payload: payload.to_json, method: :post)
|
47
|
+
end
|
48
|
+
|
80
49
|
end
|
@@ -1,71 +1,60 @@
|
|
1
|
-
require 'morpheus/api/
|
1
|
+
require 'morpheus/api/rest_interface'
|
2
2
|
|
3
|
-
class Morpheus::DeploymentsInterface < Morpheus::
|
4
|
-
def initialize(access_token, refresh_token,expires_at = nil, base_url=nil)
|
5
|
-
@access_token = access_token
|
6
|
-
@refresh_token = refresh_token
|
7
|
-
@base_url = base_url
|
8
|
-
@expires_at = expires_at
|
9
|
-
end
|
3
|
+
class Morpheus::DeploymentsInterface < Morpheus::RestInterface
|
10
4
|
|
11
|
-
def
|
12
|
-
|
13
|
-
headers = { params: params, authorization: "Bearer #{@access_token}" }
|
14
|
-
opts = {method: :get, url: url, headers: headers}
|
15
|
-
execute(opts)
|
16
|
-
end
|
17
|
-
|
18
|
-
def get(options=nil)
|
19
|
-
url = "#{@base_url}/api/deployments"
|
20
|
-
headers = { params: {}, authorization: "Bearer #{@access_token}" }
|
21
|
-
if options.is_a?(Hash)
|
22
|
-
headers[:params].merge!(options)
|
23
|
-
elsif options.is_a?(Numeric)
|
24
|
-
url = "#{@base_url}/api/deployments/#{options}"
|
25
|
-
elsif options.is_a?(String)
|
26
|
-
headers[:params]['name'] = options
|
27
|
-
end
|
28
|
-
execute(method: :get, url: url, headers: headers)
|
5
|
+
def base_path
|
6
|
+
"/api/deployments"
|
29
7
|
end
|
30
8
|
|
31
|
-
def list_versions(deployment_id,
|
32
|
-
url
|
33
|
-
|
9
|
+
def list_versions(deployment_id, params={})
|
10
|
+
execute(method: :get, url: "#{base_path}/#{deployment_id}/versions", params: params)
|
11
|
+
end
|
34
12
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
url = "#{@base_url}/api/deployments/#{deployment_id}/versions/#{options}"
|
39
|
-
elsif options.is_a?(String)
|
40
|
-
headers[:params]['name'] = options
|
41
|
-
end
|
42
|
-
execute(method: :get, url: url, headers: headers)
|
13
|
+
def get_version(deployment_id, id, params={})
|
14
|
+
validate_id!(id)
|
15
|
+
execute(method: :get, url: "#{base_path}/#{deployment_id}/versions/#{id}", params: params)
|
43
16
|
end
|
44
17
|
|
45
|
-
def
|
46
|
-
url
|
47
|
-
headers = { params: {}, authorization: "Bearer #{@access_token}" }
|
48
|
-
execute(method: :get, url: url, headers: headers)
|
18
|
+
def create_version(deployment_id, payload, params={})
|
19
|
+
execute(method: :post, url: "#{base_path}/#{deployment_id}/versions", params: params, payload: payload.to_json)
|
49
20
|
end
|
50
21
|
|
22
|
+
def update_version(deployment_id, id, payload, params={})
|
23
|
+
validate_id!(id)
|
24
|
+
execute(method: :put, url: "#{base_path}/#{deployment_id}/versions/#{id}", params: params, payload: payload.to_json)
|
25
|
+
end
|
51
26
|
|
52
|
-
def
|
53
|
-
|
54
|
-
|
55
|
-
payload = options
|
56
|
-
execute(method: :post, url: url, headers: headers, payload: payload.to_json)
|
27
|
+
def destroy_version(deployment_id, id, params = {})
|
28
|
+
validate_id!(id)
|
29
|
+
execute(method: :delete, url: "#{base_path}/#{deployment_id}/versions/#{id}", params: params)
|
57
30
|
end
|
58
31
|
|
59
|
-
def
|
60
|
-
url
|
61
|
-
headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
|
62
|
-
payload = options
|
63
|
-
execute(method: :put, url: url, headers: headers, payload: payload.to_json)
|
32
|
+
def list_files(deployment_id, id, params={})
|
33
|
+
execute(method: :get, url: "#{base_path}/#{deployment_id}/versions/#{id}/files", params: params)
|
64
34
|
end
|
65
35
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
36
|
+
# upload a file without multipart
|
37
|
+
# local_file is the full absolute local filename
|
38
|
+
# destination should be the full remote file path, including the file name.
|
39
|
+
def upload_file(deployment_id, id, local_file, destination, params={})
|
40
|
+
if destination.empty? || destination == "/" || destination == "." || destination.include?("../")
|
41
|
+
raise "#{self.class}.upload_file() passed a bad destination: '#{destination}'"
|
42
|
+
end
|
43
|
+
url = "#{@base_url}/#{base_path}/#{deployment_id}/versions/#{id}/files"
|
44
|
+
if !destination.to_s.empty?
|
45
|
+
url += "/#{destination}"
|
46
|
+
end
|
47
|
+
# use URI to escape path
|
48
|
+
uri = URI.parse(url)
|
49
|
+
url = uri.path
|
50
|
+
# params[:filename] = File.basename(destination)
|
51
|
+
if !local_file.kind_of?(File)
|
52
|
+
local_file = File.new(local_file, 'rb')
|
53
|
+
end
|
54
|
+
payload = local_file
|
55
|
+
headers = {'Content-Type' => 'application/octet-stream'}
|
56
|
+
headers['Content-Length'] = local_file.size # File.size(local_file)
|
57
|
+
execute(method: :post, url: url, headers: headers, payload: payload, params: params, timeout: 172800)
|
70
58
|
end
|
59
|
+
|
71
60
|
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'morpheus/api/api_client'
|
2
|
+
|
3
|
+
class Morpheus::DocInterface < Morpheus::APIClient
|
4
|
+
|
5
|
+
# no Authorization header is required
|
6
|
+
def authorization_required?
|
7
|
+
false
|
8
|
+
end
|
9
|
+
|
10
|
+
def list(params={})
|
11
|
+
url = "/api/doc"
|
12
|
+
headers = {params: params}
|
13
|
+
execute(method: :get, url: url, headers: headers)
|
14
|
+
end
|
15
|
+
|
16
|
+
def swagger(params={})
|
17
|
+
url = "/api/doc/swagger"
|
18
|
+
# prefer /swagger.yml instead of /swagger?format=yml
|
19
|
+
fmt = params.delete('format')
|
20
|
+
if fmt
|
21
|
+
url = url + "." + fmt
|
22
|
+
end
|
23
|
+
is_yaml = fmt == "yml" || fmt == "yaml"
|
24
|
+
headers = {params: params}
|
25
|
+
execute(method: :get, url: url, headers: headers, timeout: 172800, parse_json: !is_yaml)
|
26
|
+
end
|
27
|
+
|
28
|
+
def download_swagger(outfile, params={})
|
29
|
+
# note that RestClient.execute still requires the full path with base_url
|
30
|
+
url = "#{@base_url}/api/doc/swagger"
|
31
|
+
# prefer /swagger.yml instead of /swagger?format=yml
|
32
|
+
fmt = params.delete('format')
|
33
|
+
if fmt
|
34
|
+
url = url + "." + fmt
|
35
|
+
end
|
36
|
+
headers = {params: params}
|
37
|
+
opts = {method: :get, url: url, headers: headers, timeout: 172800, parse_json: false}
|
38
|
+
|
39
|
+
if @dry_run
|
40
|
+
return opts
|
41
|
+
end
|
42
|
+
|
43
|
+
http_response = nil
|
44
|
+
File.open(File.expand_path(outfile), 'w') {|f|
|
45
|
+
block = proc { |response|
|
46
|
+
response.read_body do |chunk|
|
47
|
+
# writing to #{outfile} ..."
|
48
|
+
f.write chunk
|
49
|
+
end
|
50
|
+
}
|
51
|
+
opts[:block_response] = block
|
52
|
+
http_response = Morpheus::RestClient.execute(opts)
|
53
|
+
}
|
54
|
+
http_response
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|