morpheus-cli 0.1.1 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/lib/morpheus/api/accounts_interface.rb +55 -0
  3. data/lib/morpheus/api/api_client.rb +48 -3
  4. data/lib/morpheus/api/apps_interface.rb +13 -13
  5. data/lib/morpheus/api/{zones_interface.rb → clouds_interface.rb} +10 -10
  6. data/lib/morpheus/api/deploy_interface.rb +4 -4
  7. data/lib/morpheus/api/groups_interface.rb +3 -3
  8. data/lib/morpheus/api/instance_types_interface.rb +2 -2
  9. data/lib/morpheus/api/instances_interface.rb +35 -19
  10. data/lib/morpheus/api/key_pairs_interface.rb +60 -0
  11. data/lib/morpheus/api/license_interface.rb +29 -0
  12. data/lib/morpheus/api/load_balancers_interface.rb +72 -0
  13. data/lib/morpheus/api/logs_interface.rb +37 -0
  14. data/lib/morpheus/api/options_interface.rb +20 -0
  15. data/lib/morpheus/api/provision_types_interface.rb +27 -0
  16. data/lib/morpheus/api/roles_interface.rb +73 -0
  17. data/lib/morpheus/api/security_group_rules_interface.rb +3 -3
  18. data/lib/morpheus/api/security_groups_interface.rb +5 -5
  19. data/lib/morpheus/api/servers_interface.rb +67 -3
  20. data/lib/morpheus/api/task_sets_interface.rb +46 -0
  21. data/lib/morpheus/api/tasks_interface.rb +72 -0
  22. data/lib/morpheus/api/users_interface.rb +72 -0
  23. data/lib/morpheus/cli.rb +27 -4
  24. data/lib/morpheus/cli/accounts.rb +306 -0
  25. data/lib/morpheus/cli/apps.rb +58 -1
  26. data/lib/morpheus/cli/cli_command.rb +87 -0
  27. data/lib/morpheus/cli/cli_registry.rb +6 -1
  28. data/lib/morpheus/cli/{zones.rb → clouds.rb} +99 -70
  29. data/lib/morpheus/cli/credentials.rb +23 -11
  30. data/lib/morpheus/cli/error_handler.rb +31 -11
  31. data/lib/morpheus/cli/groups.rb +1 -0
  32. data/lib/morpheus/cli/hosts.rb +567 -0
  33. data/lib/morpheus/cli/instances.rb +588 -292
  34. data/lib/morpheus/cli/key_pairs.rb +393 -0
  35. data/lib/morpheus/cli/license.rb +118 -0
  36. data/lib/morpheus/cli/load_balancers.rb +366 -0
  37. data/lib/morpheus/cli/mixins/accounts_helper.rb +193 -0
  38. data/lib/morpheus/cli/option_types.rb +260 -0
  39. data/lib/morpheus/cli/roles.rb +164 -0
  40. data/lib/morpheus/cli/security_group_rules.rb +4 -9
  41. data/lib/morpheus/cli/shell.rb +108 -0
  42. data/lib/morpheus/cli/tasks.rb +370 -0
  43. data/lib/morpheus/cli/users.rb +325 -0
  44. data/lib/morpheus/cli/version.rb +1 -1
  45. data/lib/morpheus/cli/workflows.rb +100 -0
  46. data/lib/morpheus/formatters.rb +43 -0
  47. data/morpheus-cli.gemspec +1 -1
  48. metadata +33 -10
  49. data/lib/morpheus/cli/servers.rb +0 -265
@@ -22,7 +22,7 @@ Gem::Specification.new do |spec|
22
22
  spec.add_development_dependency "bundler", "~> 1.6"
23
23
  spec.add_development_dependency "rake"
24
24
  spec.add_dependency 'term-ansicolor', '~> 1.3.0'
25
- spec.add_dependency "rest-client", "~> 1.7"
25
+ spec.add_dependency "rest-client", "2.0.0"
26
26
  spec.add_dependency 'multipart-post'
27
27
  spec.add_dependency "filesize"
28
28
  spec.add_dependency 'mime-types'
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: 0.1.1
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Estes
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2016-05-06 00:00:00.000000000 Z
13
+ date: 2016-08-31 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler
@@ -58,16 +58,16 @@ dependencies:
58
58
  name: rest-client
59
59
  requirement: !ruby/object:Gem::Requirement
60
60
  requirements:
61
- - - "~>"
61
+ - - '='
62
62
  - !ruby/object:Gem::Version
63
- version: '1.7'
63
+ version: 2.0.0
64
64
  type: :runtime
65
65
  prerelease: false
66
66
  version_requirements: !ruby/object:Gem::Requirement
67
67
  requirements:
68
- - - "~>"
68
+ - - '='
69
69
  - !ruby/object:Gem::Version
70
- version: '1.7'
70
+ version: 2.0.0
71
71
  - !ruby/object:Gem::Dependency
72
72
  name: multipart-post
73
73
  requirement: !ruby/object:Gem::Requirement
@@ -139,32 +139,55 @@ files:
139
139
  - README.md
140
140
  - Rakefile
141
141
  - bin/morpheus
142
+ - lib/morpheus/api/accounts_interface.rb
142
143
  - lib/morpheus/api/api_client.rb
143
144
  - lib/morpheus/api/apps_interface.rb
145
+ - lib/morpheus/api/clouds_interface.rb
144
146
  - lib/morpheus/api/deploy_interface.rb
145
147
  - lib/morpheus/api/groups_interface.rb
146
148
  - lib/morpheus/api/instance_types_interface.rb
147
149
  - lib/morpheus/api/instances_interface.rb
150
+ - lib/morpheus/api/key_pairs_interface.rb
151
+ - lib/morpheus/api/license_interface.rb
152
+ - lib/morpheus/api/load_balancers_interface.rb
153
+ - lib/morpheus/api/logs_interface.rb
154
+ - lib/morpheus/api/options_interface.rb
155
+ - lib/morpheus/api/provision_types_interface.rb
156
+ - lib/morpheus/api/roles_interface.rb
148
157
  - lib/morpheus/api/security_group_rules_interface.rb
149
158
  - lib/morpheus/api/security_groups_interface.rb
150
159
  - lib/morpheus/api/servers_interface.rb
151
- - lib/morpheus/api/zones_interface.rb
160
+ - lib/morpheus/api/task_sets_interface.rb
161
+ - lib/morpheus/api/tasks_interface.rb
162
+ - lib/morpheus/api/users_interface.rb
152
163
  - lib/morpheus/cli.rb
164
+ - lib/morpheus/cli/accounts.rb
153
165
  - lib/morpheus/cli/apps.rb
154
166
  - lib/morpheus/cli/cli_command.rb
155
167
  - lib/morpheus/cli/cli_registry.rb
168
+ - lib/morpheus/cli/clouds.rb
156
169
  - lib/morpheus/cli/credentials.rb
157
170
  - lib/morpheus/cli/deploys.rb
158
171
  - lib/morpheus/cli/error_handler.rb
159
172
  - lib/morpheus/cli/groups.rb
173
+ - lib/morpheus/cli/hosts.rb
160
174
  - lib/morpheus/cli/instance_types.rb
161
175
  - lib/morpheus/cli/instances.rb
176
+ - lib/morpheus/cli/key_pairs.rb
177
+ - lib/morpheus/cli/license.rb
178
+ - lib/morpheus/cli/load_balancers.rb
179
+ - lib/morpheus/cli/mixins/accounts_helper.rb
180
+ - lib/morpheus/cli/option_types.rb
162
181
  - lib/morpheus/cli/remote.rb
182
+ - lib/morpheus/cli/roles.rb
163
183
  - lib/morpheus/cli/security_group_rules.rb
164
184
  - lib/morpheus/cli/security_groups.rb
165
- - lib/morpheus/cli/servers.rb
185
+ - lib/morpheus/cli/shell.rb
186
+ - lib/morpheus/cli/tasks.rb
187
+ - lib/morpheus/cli/users.rb
166
188
  - lib/morpheus/cli/version.rb
167
- - lib/morpheus/cli/zones.rb
189
+ - lib/morpheus/cli/workflows.rb
190
+ - lib/morpheus/formatters.rb
168
191
  - lib/morpheus/rest_client.rb
169
192
  - morpheus-cli.gemspec
170
193
  homepage: http://www.morpheusdata.com
@@ -187,7 +210,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
187
210
  version: '0'
188
211
  requirements: []
189
212
  rubyforge_project:
190
- rubygems_version: 2.4.3
213
+ rubygems_version: 2.5.1
191
214
  signing_key:
192
215
  specification_version: 4
193
216
  summary: Provides CLI Interface to the Morpheus Public/Private Cloud Appliance
@@ -1,265 +0,0 @@
1
- # require 'yaml'
2
- require 'io/console'
3
- require 'rest_client'
4
- require 'term/ansicolor'
5
- require 'optparse'
6
- require 'morpheus/cli/cli_command'
7
-
8
-
9
- class Morpheus::Cli::Servers
10
- include Term::ANSIColor
11
- include Morpheus::Cli::CliCommand
12
-
13
- def initialize()
14
- @appliance_name, @appliance_url = Morpheus::Cli::Remote.active_appliance
15
- @access_token = Morpheus::Cli::Credentials.new(@appliance_name,@appliance_url).request_credentials()
16
- @servers_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).servers
17
- @groups_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).groups
18
- @zones_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).zones
19
- @zone_types = @zones_interface.zone_types['zoneTypes']
20
- @active_groups = ::Morpheus::Cli::Groups.load_group_file
21
- end
22
-
23
- def handle(args)
24
- if @access_token.empty?
25
- print red,bold, "\nInvalid Credentials. Unable to acquire access token. Please verify your credentials and try again.\n\n",reset
26
- return 1
27
- end
28
- if args.empty?
29
- puts "\nUsage: morpheus servers [list,add,remove] [name]\n\n"
30
- return
31
- end
32
-
33
- case args[0]
34
- when 'list'
35
- list(args[1..-1])
36
- when 'add'
37
- add(args[1..-1])
38
- when 'remove'
39
- remove(args[1..-1])
40
- else
41
- puts "\nUsage: morpheus servers [list,add,remove] [name]\n\n"
42
- end
43
- end
44
-
45
- def add(args)
46
- if args.count < 2
47
- puts "\nUsage: morpheus servers add ZONE [name]\n\n"
48
- return
49
- end
50
- options = {zone: args[0]}
51
-
52
- zone=nil
53
- if !options[:group].nil?
54
- group = find_group_by_name(options[:group])
55
- if !group.nil?
56
- options['groupId'] = group['id']
57
- end
58
- else
59
- options['groupId'] = @active_groups[@appliance_name.to_sym]
60
- end
61
-
62
- if !options['groupId'].nil?
63
- if !options[:zone].nil?
64
- zone = find_zone_by_name(options['groupId'], options[:zone])
65
- if !zone.nil?
66
- options['zoneId'] = zone['id']
67
- end
68
- end
69
- end
70
-
71
- if options['zoneId'].nil?
72
- puts red,bold,"\nEither the zone was not specified or was not found. Please make sure a zone is specified with --zone\n\n", reset
73
- return
74
- end
75
-
76
- zone_type = zone_type_for_id(zone['zoneTypeId'])
77
- begin
78
- case zone_type['code']
79
- when 'standard'
80
- add_standard(args[1],options[:description],zone, args[2..-1])
81
- list([])
82
- when 'openstack'
83
- add_openstack(args[1],options[:description],zone, args[2..-1])
84
- list([])
85
- when 'amazon'
86
- add_amazon(args[1],options[:description],zone, args[2..-1])
87
- list([])
88
- else
89
- puts "Unsupported Zone Type: This version of the morpheus cli does not support the requested zone type"
90
- end
91
- rescue RestClient::Exception => e
92
- if e.response.code == 400
93
- error = JSON.parse(e.response.to_s)
94
- ::Morpheus::Cli::ErrorHandler.new.print_errors(error)
95
- else
96
- puts "Error Communicating with the Appliance. Please try again later. #{e}"
97
- end
98
- return nil
99
- end
100
- end
101
-
102
- def remove(args)
103
- if args.count < 1
104
- puts "\nUsage: morpheus servers remove [name]\n\n"
105
- return
106
- end
107
- begin
108
- server_results = @servers_interface.get({name: args[0]})
109
- if server_results['servers'].empty?
110
- puts "Server not found by name #{args[0]}"
111
- return
112
- end
113
- @servers_interface.destroy(server_results['servers'][0]['id'])
114
- list([])
115
- rescue RestClient::Exception => e
116
- if e.response.code == 400
117
- error = JSON.parse(e.response.to_s)
118
- ::Morpheus::Cli::ErrorHandler.new.print_errors(error)
119
- else
120
- puts "Error Communicating with the Appliance. Please try again later. #{e}"
121
- end
122
- return nil
123
- end
124
- end
125
-
126
- def list(args)
127
- options = {}
128
- optparse = OptionParser.new do|opts|
129
- opts.on( '-g', '--group GROUP', "Group Name" ) do |group|
130
- options[:group] = group
131
- end
132
- end
133
- optparse.parse(args)
134
- begin
135
- params = {}
136
- if !options[:group].nil?
137
- group = find_group_by_name(options[:group])
138
- if !group.nil?
139
- params['site'] = group['id']
140
- end
141
- end
142
-
143
- json_response = @servers_interface.get(params)
144
- servers = json_response['servers']
145
- print "\n" ,red, bold, "Morpheus Servers\n","==================", reset, "\n\n"
146
- if servers.empty?
147
- puts yellow,"No servers currently configured.",reset
148
- else
149
- servers.each do |server|
150
- print red, "= #{server['name']} - #{server['description']} (#{server['status']})\n"
151
- end
152
- end
153
- print reset,"\n\n"
154
-
155
- rescue => e
156
- puts "Error Communicating with the Appliance. Please try again later. #{e}"
157
- return nil
158
- end
159
- end
160
-
161
- private
162
-
163
-
164
- def add_openstack(name, description,zone, args)
165
- options = {}
166
- optparse = OptionParser.new do|opts|
167
-
168
- opts.on( '-s', '--size SIZE', "Disk Size" ) do |size|
169
- options[:diskSize] = size.to_l
170
- end
171
- opts.on('-i', '--image IMAGE', "Image Name") do |image|
172
- options[:imageName] = image
173
- end
174
-
175
- opts.on('-f', '--flavor FLAVOR', "Flavor Name") do |flavor|
176
- options[:flavorName] = flavor
177
- end
178
- end
179
- optparse.parse(args)
180
-
181
- server_payload = {server: {name: name, description: description}, zoneId: zone['id']}
182
- response = @servers_interface.create(server_payload)
183
- end
184
-
185
- def add_standard(name,description,zone, args)
186
- options = {}
187
- networkOptions = {name: 'eth0'}
188
- optparse = OptionParser.new do|opts|
189
- opts.banner = "Usage: morpheus server add ZONE NAME [options]"
190
- opts.on( '-u', '--ssh-user USER', "SSH Username" ) do |sshUser|
191
- options['sshUsername'] = sshUser
192
- end
193
- opts.on('-p', '--password PASSWORD', "SSH Password (optional)") do |password|
194
- options['sshPassword'] = password
195
- end
196
-
197
- opts.on('-h', '--host HOST', "HOST IP") do |host|
198
- options['sshHost'] = host
199
- end
200
-
201
- options['dataDevice'] = '/dev/sdb'
202
- opts.on('-m', '--data-device DATADEVICE', "Data device for LVM") do |device|
203
- options['dataDevice'] = device
204
- end
205
-
206
-
207
- opts.on('-n', '--interface NETWORK', "Default Network Interface") do |net|
208
- networkOptions[:name] = net
209
- end
210
-
211
- opts.on_tail(:NONE, "--help", "Show this message") do
212
- puts opts
213
- exit
214
- end
215
- end
216
- optparse.parse(args)
217
-
218
- server_payload = {server: {name: name, description: description, zone: {id: zone['id']}}.merge(options), network: networkOptions}
219
- response = @servers_interface.create(server_payload)
220
-
221
- end
222
-
223
- def add_amazon(name,description,zone, args)
224
- puts "NOT YET IMPLEMENTED"
225
- end
226
-
227
- def zone_type_for_id(id)
228
- # puts "Zone Types #{@zone_types}"
229
- if !@zone_types.empty?
230
- zone_type = @zone_types.find { |z| z['id'].to_i == id.to_i}
231
- if !zone_type.nil?
232
- return zone_type
233
- end
234
- end
235
- return nil
236
- end
237
-
238
-
239
- def find_group_by_name(name)
240
- group_results = @groups_interface.get(name)
241
- if group_results['groups'].empty?
242
- puts "Group not found by name #{name}"
243
- return nil
244
- end
245
- return group_results['groups'][0]
246
- end
247
-
248
- def find_zone_by_name(groupId, name)
249
- zone_results = @zones_interface.get({groupId: groupId, name: name})
250
- if zone_results['zones'].empty?
251
- puts "Zone not found by name #{name}"
252
- return nil
253
- end
254
- return zone_results['zones'][0]
255
- end
256
-
257
- def find_group_by_id(id)
258
- group_results = @groups_interface.get(id)
259
- if group_results['groups'].empty?
260
- puts "Group not found by id #{id}"
261
- return nil
262
- end
263
- return group_results['groups'][0]
264
- end
265
- end