morpheus-cli 2.10.0 → 2.10.1

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.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/bin/morpheus +27 -32
  3. data/lib/morpheus/api/accounts_interface.rb +36 -47
  4. data/lib/morpheus/api/api_client.rb +141 -110
  5. data/lib/morpheus/api/app_templates_interface.rb +56 -72
  6. data/lib/morpheus/api/apps_interface.rb +111 -132
  7. data/lib/morpheus/api/auth_interface.rb +30 -0
  8. data/lib/morpheus/api/clouds_interface.rb +71 -76
  9. data/lib/morpheus/api/custom_instance_types_interface.rb +21 -46
  10. data/lib/morpheus/api/dashboard_interface.rb +10 -17
  11. data/lib/morpheus/api/deploy_interface.rb +60 -72
  12. data/lib/morpheus/api/deployments_interface.rb +53 -71
  13. data/lib/morpheus/api/groups_interface.rb +55 -45
  14. data/lib/morpheus/api/instance_types_interface.rb +19 -23
  15. data/lib/morpheus/api/instances_interface.rb +179 -177
  16. data/lib/morpheus/api/key_pairs_interface.rb +11 -17
  17. data/lib/morpheus/api/license_interface.rb +18 -23
  18. data/lib/morpheus/api/load_balancers_interface.rb +54 -69
  19. data/lib/morpheus/api/logs_interface.rb +25 -29
  20. data/lib/morpheus/api/options_interface.rb +13 -17
  21. data/lib/morpheus/api/provision_types_interface.rb +19 -22
  22. data/lib/morpheus/api/roles_interface.rb +75 -94
  23. data/lib/morpheus/api/security_group_rules_interface.rb +28 -37
  24. data/lib/morpheus/api/security_groups_interface.rb +39 -51
  25. data/lib/morpheus/api/servers_interface.rb +113 -115
  26. data/lib/morpheus/api/setup_interface.rb +31 -0
  27. data/lib/morpheus/api/task_sets_interface.rb +36 -38
  28. data/lib/morpheus/api/tasks_interface.rb +56 -69
  29. data/lib/morpheus/api/users_interface.rb +67 -76
  30. data/lib/morpheus/api/virtual_images_interface.rb +61 -61
  31. data/lib/morpheus/api/whoami_interface.rb +12 -15
  32. data/lib/morpheus/cli.rb +71 -60
  33. data/lib/morpheus/cli/accounts.rb +254 -315
  34. data/lib/morpheus/cli/alias_command.rb +219 -0
  35. data/lib/morpheus/cli/app_templates.rb +264 -272
  36. data/lib/morpheus/cli/apps.rb +608 -671
  37. data/lib/morpheus/cli/cli_command.rb +259 -21
  38. data/lib/morpheus/cli/cli_registry.rb +99 -14
  39. data/lib/morpheus/cli/clouds.rb +599 -372
  40. data/lib/morpheus/cli/config_file.rb +126 -0
  41. data/lib/morpheus/cli/credentials.rb +141 -117
  42. data/lib/morpheus/cli/dashboard_command.rb +48 -56
  43. data/lib/morpheus/cli/deployments.rb +254 -268
  44. data/lib/morpheus/cli/deploys.rb +150 -142
  45. data/lib/morpheus/cli/error_handler.rb +38 -0
  46. data/lib/morpheus/cli/groups.rb +551 -179
  47. data/lib/morpheus/cli/hosts.rb +862 -617
  48. data/lib/morpheus/cli/instance_types.rb +103 -95
  49. data/lib/morpheus/cli/instances.rb +1335 -1009
  50. data/lib/morpheus/cli/key_pairs.rb +82 -90
  51. data/lib/morpheus/cli/library.rb +498 -499
  52. data/lib/morpheus/cli/license.rb +83 -101
  53. data/lib/morpheus/cli/load_balancers.rb +314 -300
  54. data/lib/morpheus/cli/login.rb +66 -44
  55. data/lib/morpheus/cli/logout.rb +47 -46
  56. data/lib/morpheus/cli/mixins/accounts_helper.rb +69 -31
  57. data/lib/morpheus/cli/mixins/infrastructure_helper.rb +106 -0
  58. data/lib/morpheus/cli/mixins/print_helper.rb +181 -17
  59. data/lib/morpheus/cli/mixins/provisioning_helper.rb +535 -458
  60. data/lib/morpheus/cli/mixins/whoami_helper.rb +2 -2
  61. data/lib/morpheus/cli/option_parser.rb +35 -0
  62. data/lib/morpheus/cli/option_types.rb +232 -192
  63. data/lib/morpheus/cli/recent_activity_command.rb +61 -65
  64. data/lib/morpheus/cli/remote.rb +446 -199
  65. data/lib/morpheus/cli/roles.rb +884 -906
  66. data/lib/morpheus/cli/security_group_rules.rb +213 -203
  67. data/lib/morpheus/cli/security_groups.rb +237 -192
  68. data/lib/morpheus/cli/shell.rb +338 -231
  69. data/lib/morpheus/cli/tasks.rb +326 -308
  70. data/lib/morpheus/cli/users.rb +457 -462
  71. data/lib/morpheus/cli/version.rb +1 -1
  72. data/lib/morpheus/cli/version_command.rb +16 -18
  73. data/lib/morpheus/cli/virtual_images.rb +526 -345
  74. data/lib/morpheus/cli/whoami.rb +125 -111
  75. data/lib/morpheus/cli/workflows.rb +338 -185
  76. data/lib/morpheus/formatters.rb +8 -1
  77. data/lib/morpheus/logging.rb +1 -1
  78. data/lib/morpheus/rest_client.rb +17 -8
  79. metadata +9 -3
  80. data/lib/morpheus/api/custom_instance_types.rb +0 -55
@@ -9,210 +9,220 @@ require 'morpheus/cli/cli_command'
9
9
  class Morpheus::Cli::SecurityGroupRules
10
10
  include Morpheus::Cli::CliCommand
11
11
 
12
- def initialize()
13
- @appliance_name, @appliance_url = Morpheus::Cli::Remote.active_appliance
14
- @access_token = Morpheus::Cli::Credentials.new(@appliance_name,@appliance_url).request_credentials()
15
- @security_group_rules_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).security_group_rules
16
- @active_security_group = ::Morpheus::Cli::SecurityGroups.load_security_group_file
17
- end
18
-
19
-
20
- def handle(args)
21
- if @access_token.empty?
22
- print_red_alert "Invalid Credentials. Unable to acquire access token. Please verify your credentials and try again."
23
- return 1
24
- end
25
- if args.empty?
26
- puts "\nUsage: morpheus security-group-rules [list, add_custom_rule, remove]\n\n"
27
- return
28
- end
29
-
30
- case args[0]
31
- when 'list'
32
- list(args[1..-1])
33
- when 'add_custom_rule'
34
- add_custom_rule(args[1..-1])
35
- when 'add_instance_rule'
36
- add_instance_rule(args[1..-1])
37
- when 'remove'
38
- remove(args[1..-1])
39
- else
40
- puts "\nUsage: morpheus security-group-rules [list,add_custom_rule,remove]\n\n"
41
- end
42
- end
43
-
44
- def add_custom_rule(args)
45
- usage = <<-EOT
46
- Usage: morpheus security-group-rules add_custom_rule SOURCE_CIDR PORT_RANGE PROTOCOL [options]
47
- SOURCE_CIDR: CIDR to white-list
48
- PORT_RANGE: Port value (i.e. 123) or port range (i.e. 1-65535)
49
- PROTOCOL: tcp, udp, icmp\n\n'
12
+ register_subcommands :list, :'add-custom-rule', :'add-instance-rule', :remove
13
+ set_default_subcommand :list
14
+
15
+ def connect(opts)
16
+ @api_client = establish_remote_appliance_connection(opts)
17
+ @security_group_rules_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).security_group_rules
18
+ @active_security_group = ::Morpheus::Cli::SecurityGroups.load_security_group_file
19
+ end
20
+
21
+ def handle(args)
22
+ handle_subcommand(args)
23
+ end
24
+
25
+ def add_custom_rule(args)
26
+ usage = <<-EOT
27
+ Usage: morpheus #{command_name} add-custom-rule SOURCE_CIDR PORT_RANGE PROTOCOL [options]
28
+ \tSOURCE_CIDR: CIDR to white-list
29
+ \tPORT_RANGE: Port value (i.e. 123) or port range (i.e. 1-65535)
30
+ \tPROTOCOL: tcp, udp, icmp
50
31
  EOT
51
- options = {}
52
- security_group_id = nil
53
- optparse = OptionParser.new do|opts|
54
- opts.banner = usage
55
- opts.on( '-s', '--secgroup SECGROUP', "Security Group ID (Use will use security as set with 'security-groups use id'" ) do |id|
56
- security_group_id = id
57
- end
58
- build_common_options(opts, options, [])
59
- end
60
- optparse.parse(args)
61
-
62
- if args.count < 3
63
- puts "\n#{optparse.banner}\n\n"
64
- exit 1
65
- end
66
-
67
- if security_group_id.nil?
68
- security_group_id = @active_security_group[@appliance_name.to_sym]
69
- end
70
-
71
- if security_group_id.nil?
72
- puts "Security Group ID must be specified with options or set using 'security-groups use id'"
73
- exit
74
- end
75
-
76
- params = {
77
- :rule => {
78
- :source => args[0],
79
- :portRange => args[1],
80
- :protocol => args[2],
81
- :customRule => true
82
- }
83
- }
84
-
85
- begin
86
- @security_group_rules_interface.create(security_group_id, params)
87
- list([])
88
- rescue RestClient::Exception => e
89
- print_rest_exception(e, options)
90
- exit 1
91
- end
92
- end
93
-
94
- def add_instance_rule(args)
95
- usage = <<-EOT
96
- Usage: morpheus security-group-rules add_instance_rule SOURCE_CIDR INSTANCE_TYPE_ID [options]
97
- SOURCE_CIDR: CIDR to white-list
98
- INSTANCE_TYPE_ID: ID of the Instance Type to access
32
+ options = {}
33
+ security_group_id = nil
34
+ optparse = OptionParser.new do|opts|
35
+ opts.banner = usage
36
+ opts.on( '-s', '--secgroup SECGROUP', "Security Group ID (Use will use security as set with 'security-groups use id'" ) do |id|
37
+ security_group_id = id
38
+ end
39
+ build_common_options(opts, options, [:json, :dry_run])
40
+ end
41
+ optparse.parse!(args)
42
+
43
+ if args.count < 3
44
+ puts optparse.banner
45
+ exit 1
46
+ end
47
+
48
+ if security_group_id.nil? && @active_security_group
49
+ security_group_id = @active_security_group[@appliance_name.to_sym]
50
+ end
51
+
52
+ if security_group_id.nil?
53
+ puts "Security Group ID must be specified with options or set using 'security-groups use id'"
54
+ exit 1
55
+ end
56
+
57
+ params = {
58
+ :rule => {
59
+ :source => args[0],
60
+ :portRange => args[1],
61
+ :protocol => args[2],
62
+ :customRule => true
63
+ }
64
+ }
65
+ connect(options)
66
+ begin
67
+ if options[:dry_run]
68
+ print_dry_run @security_group_rules_interface.dry.create(security_group_id, params)
69
+ return
70
+ end
71
+ json_response = @security_group_rules_interface.create(security_group_id, params)
72
+ if options[:json]
73
+ print JSON.pretty_generate(json_response)
74
+ print "\n"
75
+ return
76
+ end
77
+ list([security_group_id])
78
+ rescue RestClient::Exception => e
79
+ print_rest_exception(e, options)
80
+ exit 1
81
+ end
82
+ end
83
+
84
+ def add_instance_rule(args)
85
+ usage = <<-EOT
86
+ Usage: morpheus #{command_name} add_instance_rule SOURCE_CIDR INSTANCE_TYPE_ID [options]
87
+ \tSOURCE_CIDR: CIDR to white-list
88
+ \tINSTANCE_TYPE_ID: ID of the Instance Type to access
99
89
  EOT
100
-
101
- options = {}
102
- security_group_id = nil
103
- optparse = OptionParser.new do|opts|
104
- opts.banner = usage
105
- opts.on( '-s', '--secgroup secgroup', "Security Group ID (Use will use security as set with 'security-groups use id'" ) do |id|
106
- security_group_id = id
107
- end
108
- build_common_options(opts, options, [])
109
- end
110
- optparse.parse(args)
111
- if args.count < 2
112
- puts "\n#{optparse.banner}\n\n"
113
- exit 1
114
- end
115
- if security_group_id.nil?
116
- security_group_id = @active_security_group[@appliance_name.to_sym]
117
- end
118
-
119
- if security_group_id.nil?
120
- puts "Security Group ID must be specified with options or set using 'security-groups use id'"
121
- exit
122
- end
123
-
124
- params = {
125
- :rule => {
126
- :source => args[0],
127
- :instanceTypeId => args[1]
128
- }
129
- }
130
-
131
- begin
132
- @security_group_rules_interface.create(security_group_id, params)
133
- list([security_group_id])
134
- rescue RestClient::Exception => e
135
- print_rest_exception(e, options)
136
- exit 1
137
- end
138
- end
139
-
140
- def list(args)
141
- options = {}
142
- security_group_id = nil
143
- optparse = OptionParser.new do|opts|
144
- opts.banner = "\nUsage: morpheus security-group-rules list [ID]"
145
- build_common_options(opts, options, [:json])
146
- end
147
- security_group_id = args[0].to_i
148
- optparse.parse(args)
149
-
150
- if security_group_id.nil?
151
- security_group_id = @active_security_group[@appliance_name.to_sym]
152
- end
153
-
154
- if security_group_id.nil?
155
- puts "Security Group ID must be specified with options or set using 'security-groups use id'"
156
- exit
157
- end
158
-
159
- begin
160
- params = {}
161
- json_response = @security_group_rules_interface.get(security_group_id, params)
162
- if options[:json]
163
- print JSON.pretty_generate(json_response)
164
- print "\n"
165
- return
166
- end
167
- rules = json_response['rules']
168
- print "\n" ,cyan, bold, "Morpheus Security Group Rules for Security Group ID:#{security_group_id}\n","==================", reset, "\n\n"
169
- if rules.empty?
170
- puts yellow,"No Security Group Rules currently configured.",reset
171
- else
172
- rules.each do |rule|
173
- print cyan, "= #{rule['id']} - (CIDR:#{rule['source']}, Port Range:#{rule['portRange']}, Protocol:#{rule['protocol']}, Custom Rule:#{rule['customRule']}, Instance Type:#{rule['instanceTypeId']})\n"
174
- end
175
- end
176
- print reset,"\n\n"
177
-
178
- rescue RestClient::Exception => e
179
- print_rest_exception(e, options)
180
- exit 1
181
- end
182
- end
183
-
184
- def remove(args)
185
-
186
- options = {}
187
- security_group_id = nil
188
- optparse = OptionParser.new do|opts|
189
- opts.banner = "Usage: morpheus security-group-rules remove ID [options]"
190
- opts.on( '-s', '--secgroup secgroup', "Security Group ID (Use will use security as set with 'security-groups use id'" ) do |id|
191
- security_group_id = id
192
- end
193
- build_common_options(opts, options, [])
194
- end
195
- optparse.parse(args)
196
- if args.count < 1
197
- puts "\n#{optparse.banner}\n\n"
198
- exit 1
199
- end
200
- if security_group_id.nil?
201
- security_group_id = @active_security_group[@appliance_name.to_sym]
202
- end
203
-
204
- if security_group_id.nil?
205
- puts "Security Group ID must be specified with options or set using 'security-groups use id'"
206
- exit
207
- end
208
-
209
- begin
210
- @security_group_rules_interface.delete(security_group_id, args[0])
211
- list([security_group_id])
212
- rescue RestClient::Exception => e
213
- print_rest_exception(e, options)
214
- exit 1
215
- end
216
- end
90
+
91
+ options = {}
92
+ security_group_id = nil
93
+ optparse = OptionParser.new do|opts|
94
+ opts.banner = usage
95
+ opts.on( '-s', '--secgroup secgroup', "Security Group ID (Use will use security as set with 'security-groups use id'" ) do |id|
96
+ security_group_id = id
97
+ end
98
+ build_common_options(opts, options, [:json, :dry_run])
99
+ end
100
+ optparse.parse!(args)
101
+ if args.count < 2
102
+ puts optparse.banner
103
+ exit 1
104
+ end
105
+ if security_group_id.nil? && @active_security_group
106
+ security_group_id = @active_security_group[@appliance_name.to_sym]
107
+ end
108
+
109
+ if security_group_id.nil?
110
+ puts "Security Group ID must be specified with options or set using 'security-groups use id'"
111
+ exit
112
+ end
113
+
114
+ params = {
115
+ :rule => {
116
+ :source => args[0],
117
+ :instanceTypeId => args[1]
118
+ }
119
+ }
120
+ connect(options)
121
+ begin
122
+ if options[:dry_run]
123
+ print_dry_run @security_group_rules_interface.dry.create(security_group_id, params)
124
+ return
125
+ end
126
+ json_response = @security_group_rules_interface.create(security_group_id, params)
127
+ if options[:json]
128
+ print JSON.pretty_generate(json_response)
129
+ print "\n"
130
+ return
131
+ end
132
+ list([security_group_id])
133
+ rescue RestClient::Exception => e
134
+ print_rest_exception(e, options)
135
+ exit 1
136
+ end
137
+ end
138
+
139
+ def list(args)
140
+ options = {}
141
+ security_group_id = nil
142
+ optparse = OptionParser.new do|opts|
143
+ opts.banner = subcommand_usage("[id]")
144
+ build_common_options(opts, options, [:json, :dry_run])
145
+ end
146
+ optparse.parse!(args)
147
+ security_group_id = args[0]
148
+ if security_group_id.nil? && @active_security_group
149
+ security_group_id = @active_security_group[@appliance_name.to_sym]
150
+ end
151
+
152
+ if security_group_id.nil?
153
+ puts "Security Group ID must be specified with options or set using 'security-groups use id'"
154
+ exit 1
155
+ end
156
+ connect(options)
157
+ begin
158
+ params = {}
159
+ if options[:dry_run]
160
+ print_dry_run @security_group_rules_interface.dry.get(security_group_id, params)
161
+ return
162
+ end
163
+ json_response = @security_group_rules_interface.get(security_group_id, params)
164
+ if options[:json]
165
+ print JSON.pretty_generate(json_response)
166
+ print "\n"
167
+ return
168
+ end
169
+ rules = json_response['rules']
170
+ print "\n" ,cyan, bold, "Morpheus Security Group Rules for Security Group ID:#{security_group_id}\n","==================", reset, "\n\n"
171
+ if rules.empty?
172
+ puts yellow,"No Security Group Rules currently configured.",reset
173
+ else
174
+ rules = rules.sort {|x,y| x["id"] <=> y["id"] }
175
+ rules.each do |rule|
176
+ print cyan, "= #{rule['id']} - (CIDR:#{rule['source']}, Port Range:#{rule['portRange']}, Protocol:#{rule['protocol']}, Custom Rule:#{rule['customRule']}, Instance Type:#{rule['instanceTypeId']})\n"
177
+ end
178
+ end
179
+ print reset,"\n"
180
+ rescue RestClient::Exception => e
181
+ print_rest_exception(e, options)
182
+ exit 1
183
+ end
184
+ end
185
+
186
+ def remove(args)
187
+ options = {}
188
+ security_group_id = nil
189
+ optparse = OptionParser.new do|opts|
190
+ opts.banner = subcommand_usage("[id] [options]")
191
+ opts.on( '-s', '--secgroup secgroup', "Security Group ID (Use will use security as set with 'security-groups use id'" ) do |id|
192
+ security_group_id = id
193
+ end
194
+ build_common_options(opts, options, [:json, :dry_run])
195
+ end
196
+ optparse.parse!(args)
197
+ if args.count < 1
198
+ puts optparse
199
+ exit 1
200
+ end
201
+ if security_group_id.nil? && @active_security_group
202
+ security_group_id = @active_security_group[@appliance_name.to_sym]
203
+ end
204
+
205
+ if security_group_id.nil?
206
+ puts "Security Group ID must be specified with options or set using 'security-groups use id'"
207
+ exit
208
+ end
209
+ connect(options)
210
+ begin
211
+ if options[:dry_run]
212
+ print_dry_run @security_group_rules_interface.dry.delete(security_group_id, args[0])
213
+ return
214
+ end
215
+ json_response = @security_group_rules_interface.delete(security_group_id, args[0])
216
+ if options[:json]
217
+ print JSON.pretty_generate(json_response)
218
+ print "\n"
219
+ return
220
+ end
221
+ list([security_group_id])
222
+ rescue RestClient::Exception => e
223
+ print_rest_exception(e, options)
224
+ exit 1
225
+ end
226
+ end
217
227
 
218
228
  end
@@ -9,197 +9,242 @@ require 'morpheus/cli/cli_command'
9
9
  class Morpheus::Cli::SecurityGroups
10
10
  include Morpheus::Cli::CliCommand
11
11
 
12
- def initialize()
13
- @appliance_name, @appliance_url = Morpheus::Cli::Remote.active_appliance
14
- @access_token = Morpheus::Cli::Credentials.new(@appliance_name,@appliance_url).request_credentials()
15
- @security_groups_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).security_groups
16
- @active_security_group = ::Morpheus::Cli::SecurityGroups.load_security_group_file
17
- end
18
-
19
-
20
- def handle(args)
21
- if @access_token.empty?
22
- print_red_alert "Invalid Credentials. Unable to acquire access token. Please verify your credentials and try again."
23
- return 1
24
- end
25
- if args.empty?
26
- puts "\nUsage: morpheus security-groups [list,get,add,remove,use] [name]\n\n"
27
- return
28
- end
29
-
30
- case args[0]
31
- when 'list'
32
- list(args[1..-1])
33
- when 'get'
34
- get(args[1..-1])
35
- when 'add'
36
- add(args[1..-1])
37
- when 'remove'
38
- remove(args[1..-1])
39
- when 'use'
40
- use(args[1..-1])
41
- else
42
- puts "\nUsage: morpheus security-groups [list,get,add,remove,use] [name]\n\n"
43
- end
44
- end
45
-
46
- def list(args)
47
- options = {}
48
- optparse = OptionParser.new do|opts|
49
- opts.banner = "\nUsage: morpheus security-groups list"
50
- build_common_options(opts, options, [])
51
- end
52
- optparse.parse(args)
53
- begin
54
- json_response = @security_groups_interface.list()
55
- security_groups = json_response['securityGroups']
56
- print "\n" ,cyan, bold, "Morpheus Security Groups\n","==================", reset, "\n\n"
57
- if security_groups.empty?
58
- puts yellow,"No Security Groups currently configured.",reset
59
- else
60
- security_groups.each do |security_group|
61
-
62
- if @active_security_group[@appliance_name.to_sym] = security_group['id']
63
- print cyan, "=> #{security_group['id']}: #{security_group['name']} (#{security_group['description']})\n"
64
- else
65
- print cyan, "= #{security_group['id']}: #{security_group['name']} (#{security_group['description']})\n"
66
- end
67
- end
68
- end
69
- print reset,"\n\n"
70
-
71
- rescue RestClient::Exception => e
72
- print_rest_exception(e, options)
73
- exit 1
74
- end
75
- end
76
-
77
- def get(args)
78
- options = {}
79
- optparse = OptionParser.new do|opts|
80
- opts.banner = "Usage: morpheus security-groups get ID"
81
- build_common_options(opts, options, [])
82
- end
83
- optparse.parse(args)
84
- if args.count < 1
85
- puts "\n#{optparse.banner}\n\n"
86
- exit 1
87
- end
88
-
89
- begin
90
- json_response = @security_groups_interface.get({id: args[0]})
91
- security_group = json_response['securityGroup']
92
- print "\n" ,cyan, bold, "Morpheus Security Group\n","==================", reset, "\n\n"
93
- if security_group.nil?
94
- puts yellow,"Security Group not found by id #{args[0]}",reset
95
- else
96
- print cyan, "= #{security_group['id']}: #{security_group['name']} (#{security_group['description']})\n"
97
- end
98
- print reset,"\n\n"
99
-
100
- rescue RestClient::Exception => e
101
- print_rest_exception(e, options)
102
- exit 1
103
- end
104
- end
105
-
106
- def add(args)
107
- options = {}
108
- params = {:securityGroup => {:name => args[0]} }
109
- optparse = OptionParser.new do|opts|
110
- opts.banner = "\nUsage: morpheus security-groups add NAME [options]"
111
- opts.on( '-d', '--description Description', "Description of the security group" ) do |description|
112
- params[:securityGroup][:description] = description
113
- end
114
- build_common_options(opts, options, [])
115
- end
116
- optparse.parse(args)
117
- if args.count < 1
118
- puts "\n#{optparse.banner}\n\n"
119
- exit 1
120
- end
121
- begin
122
- @security_groups_interface.create(params)
123
- list([])
124
- rescue RestClient::Exception => e
125
- print_rest_exception(e, options)
126
- exit 1
127
- end
128
- end
129
-
130
- def remove(args)
131
- options = {}
132
- optparse = OptionParser.new do|opts|
133
- opts.banner = "\nUsage: morpheus security-groups remove ID"
134
- build_common_options(opts, options, [])
135
- end
136
- optparse.parse(args)
137
- if args.count < 1
138
- puts "\n#{optparse.banner}\n\n"
139
- return
140
- end
141
- begin
142
- json_response = @security_groups_interface.get({id: args[0]})
143
- security_group = json_response['securityGroup']
144
- if security_group.nil?
145
- puts "Security Group not found by id #{args[0]}"
146
- return
147
- end
148
- @security_groups_interface.delete(security_group['id'])
149
- list([])
150
- rescue RestClient::Exception => e
151
- print_rest_exception(e, options)
152
- exit 1
153
- end
154
- end
155
-
156
- def use(args)
157
- options = {}
158
- optparse = OptionParser.new do|opts|
159
- opts.banner = "Usage: morpheus security-groups use ID"
160
- build_common_options(opts, options, [])
161
- end
162
- optparse.parse(args)
163
- if args.length < 1
164
- puts "\n#{optparse.banner}\n\n"
165
- return
166
- end
167
- begin
168
- json_response = @security_groups_interface.get({id: args[0]})
169
- security_group = json_response['securityGroup']
170
- if !security_group.nil?
171
- @active_security_group[@appliance_name.to_sym] = security_group['id']
172
- ::Morpheus::Cli::SecurityGroups.save_security_group(@active_security_group)
173
- puts "Using Security Group #{args[0]}"
174
- else
175
- puts "Security Group not found"
176
- end
177
- rescue RestClient::Exception => e
178
- print_rest_exception(e, options)
179
- exit 1
180
- end
181
- end
182
-
183
- def self.load_security_group_file
184
- remote_file = security_group_file_path
185
- if File.exist? remote_file
186
- return YAML.load_file(remote_file)
187
- else
188
- {}
189
- end
190
- end
191
-
192
- def self.security_group_file_path
193
- home_dir = Dir.home
194
- morpheus_dir = File.join(home_dir,".morpheus")
195
- if !Dir.exist?(morpheus_dir)
196
- Dir.mkdir(morpheus_dir)
197
- end
198
- return File.join(morpheus_dir,"securitygroup")
199
- end
200
-
201
- def self.save_security_group(security_group_map)
202
- File.open(security_group_file_path, 'w') {|f| f.write security_group_map.to_yaml } #Store
203
- end
12
+ register_subcommands :list, :get, :add, :remove, :use, :unuse
13
+ set_default_subcommand :list
14
+
15
+ def connect(opts)
16
+ @api_client = establish_remote_appliance_connection(opts)
17
+ @security_groups_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).security_groups
18
+ @active_security_group = ::Morpheus::Cli::SecurityGroups.load_security_group_file
19
+ end
20
+
21
+ def handle(args)
22
+ handle_subcommand(args)
23
+ end
24
+
25
+
26
+ def list(args)
27
+ options = {}
28
+ optparse = OptionParser.new do|opts|
29
+ opts.banner = subcommand_usage()
30
+ build_common_options(opts, options, [:json, :dry_run])
31
+ end
32
+ optparse.parse!(args)
33
+ connect(options)
34
+ begin
35
+ params = {}
36
+ if options[:dry_run]
37
+ print_dry_run @security_groups_interface.dry.list(params)
38
+ return
39
+ end
40
+ json_response = @security_groups_interface.list(params)
41
+ if options[:json]
42
+ print JSON.pretty_generate(json_response)
43
+ print "\n"
44
+ return
45
+ end
46
+ security_groups = json_response['securityGroups']
47
+ print "\n" ,cyan, bold, "Morpheus Security Groups\n","==================", reset, "\n\n"
48
+ if security_groups.empty?
49
+ puts yellow,"No Security Groups currently configured.",reset
50
+ else
51
+ active_id = @active_security_group[@appliance_name.to_sym]
52
+ security_groups.each do |security_group|
53
+ if @active_security_group[@appliance_name.to_sym] == security_group['id']
54
+ print cyan, "=> #{security_group['id']}: #{security_group['name']} (#{security_group['description']})\n"
55
+ else
56
+ print cyan, " #{security_group['id']}: #{security_group['name']} (#{security_group['description']})\n"
57
+ end
58
+ end
59
+ if active_id
60
+ print cyan, "\n\n# => - current", reset
61
+ end
62
+ end
63
+ print reset,"\n"
64
+ rescue RestClient::Exception => e
65
+ print_rest_exception(e, options)
66
+ exit 1
67
+ end
68
+ end
69
+
70
+ def get(args)
71
+ options = {}
72
+ optparse = OptionParser.new do|opts|
73
+ opts.banner = subcommand_usage("[id]")
74
+ build_common_options(opts, options, [:json, :dry_run])
75
+ end
76
+ optparse.parse!(args)
77
+ if args.count < 1
78
+ puts optparse
79
+ exit 1
80
+ end
81
+ connect(options)
82
+ begin
83
+ if options[:dry_run]
84
+ print_dry_run @security_groups_interface.dry.get({id: args[0]})
85
+ return
86
+ end
87
+ json_response = @security_groups_interface.get({id: args[0]})
88
+ if options[:json]
89
+ print JSON.pretty_generate(json_response)
90
+ print "\n"
91
+ return
92
+ end
93
+ security_group = json_response['securityGroup']
94
+ print "\n" ,cyan, bold, "Morpheus Security Group\n","==================", reset, "\n\n"
95
+ if security_group.nil?
96
+ puts yellow,"Security Group not found by id #{args[0]}",reset
97
+ else
98
+ print cyan, "= #{security_group['id']}: #{security_group['name']} (#{security_group['description']})\n"
99
+ end
100
+ print reset,"\n\n"
101
+ rescue RestClient::Exception => e
102
+ print_rest_exception(e, options)
103
+ exit 1
104
+ end
105
+ end
106
+
107
+ def add(args)
108
+ params = {:securityGroup => {}}
109
+ options = {}
110
+ optparse = OptionParser.new do|opts|
111
+ opts.banner = subcommand_usage("[name] [options]")
112
+ opts.on( '-d', '--description Description', "Description of the security group" ) do |description|
113
+ params[:securityGroup][:description] = description
114
+ end
115
+ build_common_options(opts, options, [:json, :dry_run])
116
+ end
117
+ optparse.parse!(args)
118
+ if args.count < 1
119
+ puts optparse
120
+ exit 1
121
+ end
122
+ params[:securityGroup][:name] = args[0]
123
+ connect(options)
124
+ begin
125
+ if options[:dry_run]
126
+ print_dry_run @security_groups_interface.dry.create(params)
127
+ return
128
+ end
129
+ json_response = @security_groups_interface.create(params)
130
+ if options[:json]
131
+ print JSON.pretty_generate(json_response)
132
+ print "\n"
133
+ return
134
+ end
135
+ list([])
136
+ rescue RestClient::Exception => e
137
+ print_rest_exception(e, options)
138
+ exit 1
139
+ end
140
+ end
141
+
142
+ def remove(args)
143
+ options = {}
144
+ optparse = OptionParser.new do|opts|
145
+ opts.banner = subcommand_usage("[id]")
146
+ build_common_options(opts, options, [:json, :dry_run])
147
+ end
148
+ optparse.parse!(args)
149
+ if args.count < 1
150
+ puts optparse
151
+ return
152
+ end
153
+ connect(options)
154
+ begin
155
+ json_response = @security_groups_interface.get({id: args[0]})
156
+ security_group = json_response['securityGroup']
157
+ if security_group.nil?
158
+ puts "Security Group not found by id #{args[0]}"
159
+ return
160
+ end
161
+ if options[:dry_run]
162
+ print_dry_run @security_groups_interface.dry.delete(security_group['id'])
163
+ return
164
+ end
165
+ json_response = @security_groups_interface.delete(security_group['id'])
166
+ if options[:json]
167
+ print JSON.pretty_generate(json_response)
168
+ print "\n"
169
+ return
170
+ end
171
+ list([])
172
+ rescue RestClient::Exception => e
173
+ print_rest_exception(e, options)
174
+ exit 1
175
+ end
176
+ end
177
+
178
+ def use(args)
179
+ options = {}
180
+ optparse = OptionParser.new do|opts|
181
+ opts.banner = subcommand_usage("[id] [--none]")
182
+ opts.on('--none','--none', "Do not use an active group.") do |json|
183
+ options[:unuse] = true
184
+ end
185
+ build_common_options(opts, options, [])
186
+ end
187
+ optparse.parse!(args)
188
+ if args.length < 1 && !options[:unuse]
189
+ puts optparse
190
+ return
191
+ end
192
+ connect(options)
193
+ begin
194
+
195
+ if options[:unuse]
196
+ if @active_security_group[@appliance_name.to_sym]
197
+ @active_security_group.delete(@appliance_name.to_sym)
198
+ end
199
+ ::Morpheus::Cli::SecurityGroups.save_security_group(@active_security_group)
200
+ unless options[:quiet]
201
+ print cyan
202
+ puts "Switched to no active security group."
203
+ print reset
204
+ end
205
+ print reset
206
+ return # exit 0
207
+ end
208
+
209
+ json_response = @security_groups_interface.get({id: args[0]})
210
+ security_group = json_response['securityGroup']
211
+ if !security_group.nil?
212
+ @active_security_group[@appliance_name.to_sym] = security_group['id']
213
+ ::Morpheus::Cli::SecurityGroups.save_security_group(@active_security_group)
214
+ puts cyan, "Using Security Group #{args[0]}", reset
215
+ else
216
+ puts red, "Security Group not found", reset
217
+ end
218
+ rescue RestClient::Exception => e
219
+ print_rest_exception(e, options)
220
+ exit 1
221
+ end
222
+ end
223
+
224
+ def unuse(args)
225
+ use(args + ['--none'])
226
+ end
227
+
228
+ def self.load_security_group_file
229
+ remote_file = security_group_file_path
230
+ if File.exist? remote_file
231
+ return YAML.load_file(remote_file)
232
+ else
233
+ {}
234
+ end
235
+ end
236
+
237
+ def self.security_group_file_path
238
+ home_dir = Dir.home
239
+ morpheus_dir = File.join(home_dir,".morpheus")
240
+ if !Dir.exist?(morpheus_dir)
241
+ Dir.mkdir(morpheus_dir)
242
+ end
243
+ return File.join(morpheus_dir,"securitygroup")
244
+ end
245
+
246
+ def self.save_security_group(security_group_map)
247
+ File.open(security_group_file_path, 'w') {|f| f.write security_group_map.to_yaml } #Store
248
+ end
204
249
 
205
250
  end