morpheus-cli 3.3.2.6 → 3.3.2.6.1

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
2
  SHA1:
3
- metadata.gz: a3638fa392f4c3276cb8f7dcfcde61cde875325a
4
- data.tar.gz: 00c82492c99d9cedd9b0c9920bdace3d7ed8ed3c
3
+ metadata.gz: a1b8cab856aa48299dcdee9d248286e84e82d98d
4
+ data.tar.gz: dcbedabff74562525087fe4412607288915bab98
5
5
  SHA512:
6
- metadata.gz: a45a54a113a42d63ad41177a236ab9e5997937b29553464b0f607d7d8a7b5fc990b724901432b028d227ddf15de0a3d32f4f833a2f1b36c398d6f44f8395541c
7
- data.tar.gz: 59710c0c7075f01223d6a02f4594af4978860c8cf390cb850f8d63eb2c800c5d9ab5d646e1895de30bdbec33c7b3010ea6ea5990fb42e7ee7fa202ebf22d81d7
6
+ metadata.gz: 69bbcebda49f660d9560374d18b12824035e519927a259293e72edb38442a1a9d00e4ea7c90a0af7e47d161d302aa490bfa960d6dd55b09fa4583aa46a543667
7
+ data.tar.gz: a40841aa668a7721989aefa9f9b9d49bb0b033d4eef4acff9a7363e143a5bd1df5e805eb3456c4effac78930c286880da8b22aea5ef509bec1716232fc577605
data/.gitignore CHANGED
@@ -20,3 +20,4 @@ tmp
20
20
  *.o
21
21
  *.a
22
22
  mkmf.log
23
+ .DS_Store
@@ -283,4 +283,8 @@ class Morpheus::APIClient
283
283
  Morpheus::LibraryContainerTemplatesInterface.new(@access_token, @refresh_token, @expires_at, @base_url)
284
284
  end
285
285
 
286
+ def library_packages
287
+ Morpheus::LibraryPackagesInterface.new(@access_token, @refresh_token, @expires_at, @base_url)
288
+ end
289
+
286
290
  end
@@ -0,0 +1,50 @@
1
+ require 'morpheus/api/api_client'
2
+
3
+ class Morpheus::LibraryPackagesInterface < Morpheus::APIClient
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
10
+
11
+ def download(params, outfile)
12
+ url = "#{@base_url}/api/library/packages/download"
13
+ headers = { params: params, authorization: "Bearer #{@access_token}" }
14
+ opts = {method: :get, url: url, headers: headers}
15
+ # execute(opts, false)
16
+ if Dir.exists?(outfile)
17
+ raise "outfile is invalid. It is the name of an existing directory: #{outfile}"
18
+ end
19
+ # if @verify_ssl == false
20
+ # opts[:verify_ssl] = OpenSSL::SSL::VERIFY_NONE
21
+ # end
22
+ if @dry_run
23
+ return opts
24
+ end
25
+ http_response = nil
26
+ bad_body = nil
27
+ File.open(outfile, 'w') {|f|
28
+ block = proc { |response|
29
+ if response.code.to_i == 200
30
+ response.read_body do |chunk|
31
+ #puts "writing to #{outfile} ..."
32
+ f.write chunk
33
+ end
34
+ else
35
+ # puts_error (#{response.inspect}) #{chunk} ..."
36
+ bad_body = response.body.to_s
37
+ end
38
+ }
39
+ opts[:block_response] = block
40
+ http_response = RestClient::Request.new(opts).execute
41
+ # RestClient::Request.execute(opts)
42
+ }
43
+ return http_response, bad_body
44
+ end
45
+
46
+ def upload(file, params={})
47
+ raise "implement this"
48
+ end
49
+
50
+ end
data/lib/morpheus/cli.rb CHANGED
@@ -115,6 +115,7 @@ module Morpheus
115
115
  load 'morpheus/cli/library_container_templates_command.rb'
116
116
  load 'morpheus/cli/library_option_types_command.rb'
117
117
  load 'morpheus/cli/library_option_lists_command.rb'
118
+ load 'morpheus/cli/library_packages_command.rb'
118
119
 
119
120
  load 'morpheus/cli/version_command.rb'
120
121
  load 'morpheus/cli/alias_command.rb'
@@ -0,0 +1,203 @@
1
+ require 'fileutils'
2
+ require 'morpheus/cli/cli_command'
3
+ require 'morpheus/cli/mixins/library_helper'
4
+
5
+ class Morpheus::Cli::LibraryPackagesCommand
6
+ include Morpheus::Cli::CliCommand
7
+ include Morpheus::Cli::LibraryHelper
8
+
9
+ set_command_name :'library-packages'
10
+ register_subcommands :download
11
+ # register_subcommands :upload
12
+
13
+ # hide until this is released
14
+ set_command_hidden
15
+
16
+ def initialize()
17
+ # @appliance_name, @appliance_url = Morpheus::Cli::Remote.active_appliance
18
+ end
19
+
20
+ def connect(opts)
21
+ @api_client = establish_remote_appliance_connection(opts)
22
+ @library_packages_interface = @api_client.library_packages
23
+ @library_instance_types_interface = @api_client.library_instance_types
24
+ end
25
+
26
+ def handle(args)
27
+ handle_subcommand(args)
28
+ end
29
+
30
+ # generate a new .morpkg file
31
+ def download(args)
32
+ full_command_string = "#{command_name} download #{args.join(' ')}".strip
33
+ options = {}
34
+ params = {}
35
+ instance_type_codes = nil
36
+ outfile = nil
37
+ do_overwrite = false
38
+ do_mkdir = false
39
+ unzip_and_open = false
40
+ open_prog = nil
41
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
42
+ opts.banner = subcommand_usage("[instance-type]")
43
+ opts.on('--file FILE', String, "Destination filepath for the downloaded .morpkg file.") do |val|
44
+ outfile = val
45
+ end
46
+ opts.on('--instance-types LIST', String, "Can be used to export multiple instance types in a single package.") do |val|
47
+ instance_type_codes = []
48
+ val.split(',').collect do |it|
49
+ if !it.strip.empty?
50
+ instance_type_codes << it.strip
51
+ end
52
+ end
53
+ end
54
+ opts.on('--all', String, "Export entire library instead of specific instance type(s).") do
55
+ params['all'] = true
56
+ end
57
+ opts.on('--all-system', String, "Export all system instance types instead of specific instance type(s).") do
58
+ params['all'] = true
59
+ params['systemOnly'] = true
60
+ end
61
+ opts.on('--all-custom', String, "Export all custom instance types instead of specific instance type(s).") do
62
+ params['all'] = true
63
+ params['customOnly'] = true
64
+ end
65
+ opts.on( '-p', '--mkdir', "Create missing directories for [filename] if they do not exist." ) do
66
+ do_mkdir = true
67
+ end
68
+ opts.on( '-f', '--force', "Overwrite existing [filename] if it exists. Also creates missing directories." ) do
69
+ do_overwrite = true
70
+ do_mkdir = true
71
+ end
72
+ opts.on( '--open PROG', String, "Unzip the package and open the expanded directory with the specified program." ) do |val|
73
+ unzip_and_open = true
74
+ open_prog = val.to_s
75
+ end
76
+ build_common_options(opts, options, [:dry_run, :quiet])
77
+ opts.footer = "Download one or many instance types as a morpheus library package (.morpkg) file.\n" +
78
+ "[instance-type] is required. This is the instance type code." +
79
+ "--instance-types can bv. This is a list of instance type codes."
80
+ end
81
+ optparse.parse!(args)
82
+
83
+ if args.count != 1 && !instance_type_codes && !params['all']
84
+ print_error Morpheus::Terminal.angry_prompt
85
+ puts_error "#{command_name} download expects 1 argument and received #{args.count}: #{args.join(' ')}\n#{optparse}"
86
+ return 1
87
+ end
88
+ connect(options)
89
+ begin
90
+ # construct payload
91
+ if !params['all']
92
+ if args[0] && !instance_type_codes
93
+ instance_type_codes = [args[0]]
94
+ end
95
+ params['instanceType'] = instance_type_codes
96
+ end
97
+ # determine outfile
98
+ if !outfile
99
+ # use a default location
100
+ do_mkdir = true
101
+ if instance_type_codes && instance_type_codes.size == 1
102
+ outfile = File.join(Morpheus::Cli.home_directory, "tmp", "morpheus-packages", "#{instance_type_codes[0]}.morpkg")
103
+ else
104
+ outfile = File.join(Morpheus::Cli.home_directory, "tmp", "morpheus-packages", "download.morpkg")
105
+ end
106
+ end
107
+ outfile = File.expand_path(outfile)
108
+ if Dir.exists?(outfile)
109
+ puts_error "#{Morpheus::Terminal.angry_prompt}--file is invalid. It is the name of an existing directory: #{outfile}"
110
+ return 1
111
+ end
112
+ # always a .morpkg
113
+ if outfile[-7..-1] != ".morpkg"
114
+ outfile << ".morpkg"
115
+ end
116
+ destination_dir = File.dirname(outfile)
117
+ if !Dir.exists?(destination_dir)
118
+ if do_mkdir
119
+ print cyan,"Creating local directory #{destination_dir}",reset,"\n"
120
+ FileUtils.mkdir_p(destination_dir)
121
+ else
122
+ puts_error "#{Morpheus::Terminal.angry_prompt}[filename] is invalid. Directory not found: #{destination_dir} Use -p to create the missing directory."
123
+ return 1
124
+ end
125
+ end
126
+ if File.exists?(outfile)
127
+ if do_overwrite
128
+ # uhh need to be careful wih the passed filepath here..
129
+ # don't delete, just overwrite.
130
+ # File.delete(outfile)
131
+ else
132
+ print_error Morpheus::Terminal.angry_prompt
133
+ puts_error "[filename] is invalid. File already exists: #{outfile}", "Use -f to overwrite the existing file."
134
+ # puts_error optparse
135
+ return 1
136
+ end
137
+ end
138
+
139
+ if options[:dry_run]
140
+ print_dry_run @library_packages_interface.dry.download(params, outfile), full_command_string
141
+ return 1
142
+ end
143
+ if !options[:quiet]
144
+ print cyan + "Downloading morpheus package file #{outfile} ... "
145
+ end
146
+
147
+ http_response, bad_body = @library_packages_interface.download(params, outfile)
148
+
149
+ # FileUtils.chmod(0600, outfile)
150
+ success = http_response.code.to_i == 200
151
+ if success
152
+ if !options[:quiet]
153
+ print green + "SUCCESS" + reset + "\n"
154
+ end
155
+
156
+ if unzip_and_open
157
+ package_dir = File.join(File.dirname(outfile), File.basename(outfile).sub(/\.morpkg\Z/, ''))
158
+ if File.exists?(package_dir)
159
+ print cyan,"Deleting existing directory #{package_dir}",reset,"\n"
160
+ FileUtils.rm_rf(package_dir)
161
+ end
162
+ print cyan,"Unzipping to #{package_dir}",reset,"\n"
163
+ system("unzip '#{outfile}' -d '#{package_dir}' > /dev/null 2>&1")
164
+ system("#{open_prog} '#{package_dir}'")
165
+ end
166
+
167
+ return 0
168
+ else
169
+ if !options[:quiet]
170
+ print red + "ERROR" + reset + " HTTP #{http_response.code}" + "\n"
171
+ if bad_body
172
+ puts red + bad_body
173
+ end
174
+ #response_body = (http_response.body.kind_of?(Net::ReadAdapter) ? "" : http_response.body)
175
+ end
176
+ # F it, just remove a bad result
177
+ if File.exists?(outfile) && File.file?(outfile)
178
+ Morpheus::Logging::DarkPrinter.puts "Deleting bad file download: #{outfile}" if Morpheus::Logging.debug?
179
+ File.delete(outfile)
180
+ end
181
+ if options[:debug]
182
+ puts_error http_response.inspect
183
+ end
184
+ return 1
185
+ end
186
+
187
+ rescue RestClient::Exception => e
188
+ print_rest_exception(e, options)
189
+ return 1
190
+ end
191
+ end
192
+
193
+
194
+ def upload
195
+ raise "not yet implemented"
196
+ end
197
+
198
+
199
+ private
200
+
201
+
202
+
203
+ end
@@ -1,6 +1,6 @@
1
1
 
2
2
  module Morpheus
3
3
  module Cli
4
- VERSION = "3.3.2.6"
4
+ VERSION = "3.3.2.6.1"
5
5
  end
6
6
  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.3.2.6
4
+ version: 3.3.2.6.1
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-05-31 00:00:00.000000000 Z
14
+ date: 2018-06-05 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: bundler
@@ -171,6 +171,7 @@ files:
171
171
  - lib/morpheus/api/library_container_upgrades_interface.rb
172
172
  - lib/morpheus/api/library_instance_types_interface.rb
173
173
  - lib/morpheus/api/library_layouts_interface.rb
174
+ - lib/morpheus/api/library_packages_interface.rb
174
175
  - lib/morpheus/api/license_interface.rb
175
176
  - lib/morpheus/api/load_balancers_interface.rb
176
177
  - lib/morpheus/api/logs_interface.rb
@@ -245,6 +246,7 @@ files:
245
246
  - lib/morpheus/cli/library_layouts_command.rb
246
247
  - lib/morpheus/cli/library_option_lists_command.rb
247
248
  - lib/morpheus/cli/library_option_types_command.rb
249
+ - lib/morpheus/cli/library_packages_command.rb
248
250
  - lib/morpheus/cli/library_upgrades_command.rb
249
251
  - lib/morpheus/cli/license.rb
250
252
  - lib/morpheus/cli/load_balancers.rb