morpheus-cli 5.3.0.3 → 5.3.2.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 (199) hide show
  1. checksums.yaml +4 -4
  2. data/Dockerfile +1 -1
  3. data/README.md +1 -3
  4. data/lib/morpheus/api/account_groups_interface.rb +0 -6
  5. data/lib/morpheus/api/accounts_interface.rb +4 -36
  6. data/lib/morpheus/api/api_client.rb +167 -119
  7. data/lib/morpheus/api/appliance_settings_interface.rb +6 -9
  8. data/lib/morpheus/api/approvals_interface.rb +5 -8
  9. data/lib/morpheus/api/apps_interface.rb +0 -7
  10. data/lib/morpheus/api/archive_buckets_interface.rb +9 -16
  11. data/lib/morpheus/api/archive_files_interface.rb +0 -6
  12. data/lib/morpheus/api/auth_interface.rb +4 -4
  13. data/lib/morpheus/api/backup_settings_interface.rb +5 -8
  14. data/lib/morpheus/api/blueprints_interface.rb +1 -7
  15. data/lib/morpheus/api/budgets_interface.rb +0 -6
  16. data/lib/morpheus/api/certificate_types_interface.rb +14 -0
  17. data/lib/morpheus/api/certificates_interface.rb +9 -0
  18. data/lib/morpheus/api/cloud_datastores_interface.rb +0 -6
  19. data/lib/morpheus/api/cloud_folders_interface.rb +1 -7
  20. data/lib/morpheus/api/cloud_policies_interface.rb +0 -6
  21. data/lib/morpheus/api/cloud_resource_pools_interface.rb +0 -6
  22. data/lib/morpheus/api/clouds_interface.rb +0 -6
  23. data/lib/morpheus/api/clusters_interface.rb +39 -42
  24. data/lib/morpheus/api/containers_interface.rb +0 -6
  25. data/lib/morpheus/api/custom_instance_types_interface.rb +0 -6
  26. data/lib/morpheus/api/cypher_interface.rb +0 -6
  27. data/lib/morpheus/api/datastores_interface.rb +4 -7
  28. data/lib/morpheus/api/deploy_interface.rb +1 -6
  29. data/lib/morpheus/api/environments_interface.rb +0 -6
  30. data/lib/morpheus/api/execute_schedules_interface.rb +0 -6
  31. data/lib/morpheus/api/execution_request_interface.rb +0 -6
  32. data/lib/morpheus/api/file_copy_request_interface.rb +2 -9
  33. data/lib/morpheus/api/group_policies_interface.rb +0 -6
  34. data/lib/morpheus/api/groups_interface.rb +0 -7
  35. data/lib/morpheus/api/guidance_interface.rb +9 -12
  36. data/lib/morpheus/api/health_interface.rb +0 -6
  37. data/lib/morpheus/api/image_builder_boot_scripts_interface.rb +0 -6
  38. data/lib/morpheus/api/image_builder_image_builds_interface.rb +0 -6
  39. data/lib/morpheus/api/image_builder_interface.rb +3 -9
  40. data/lib/morpheus/api/image_builder_preseed_scripts_interface.rb +0 -6
  41. data/lib/morpheus/api/instance_types_interface.rb +0 -7
  42. data/lib/morpheus/api/instances_interface.rb +8 -19
  43. data/lib/morpheus/api/integration_types_interface.rb +14 -0
  44. data/lib/morpheus/api/integrations_interface.rb +36 -21
  45. data/lib/morpheus/api/invoice_line_items_interface.rb +4 -9
  46. data/lib/morpheus/api/jobs_interface.rb +11 -14
  47. data/lib/morpheus/api/key_pairs_interface.rb +0 -6
  48. data/lib/morpheus/api/library_cluster_layouts_interface.rb +0 -6
  49. data/lib/morpheus/api/library_container_scripts_interface.rb +0 -6
  50. data/lib/morpheus/api/library_container_templates_interface.rb +0 -6
  51. data/lib/morpheus/api/library_container_types_interface.rb +0 -6
  52. data/lib/morpheus/api/library_container_upgrades_interface.rb +0 -6
  53. data/lib/morpheus/api/library_instance_types_interface.rb +0 -6
  54. data/lib/morpheus/api/library_layouts_interface.rb +0 -6
  55. data/lib/morpheus/api/library_spec_template_types_interface.rb +0 -6
  56. data/lib/morpheus/api/library_spec_templates_interface.rb +0 -6
  57. data/lib/morpheus/api/license_interface.rb +0 -6
  58. data/lib/morpheus/api/load_balancer_pools_interface.rb +9 -0
  59. data/lib/morpheus/api/load_balancer_types_interface.rb +9 -0
  60. data/lib/morpheus/api/load_balancer_virtual_servers_interface.rb +9 -0
  61. data/lib/morpheus/api/load_balancers_interface.rb +4 -59
  62. data/lib/morpheus/api/log_settings_interface.rb +9 -12
  63. data/lib/morpheus/api/logs_interface.rb +0 -6
  64. data/lib/morpheus/api/monitoring_alerts_interface.rb +0 -6
  65. data/lib/morpheus/api/monitoring_apps_interface.rb +0 -6
  66. data/lib/morpheus/api/monitoring_checks_interface.rb +0 -6
  67. data/lib/morpheus/api/monitoring_contacts_interface.rb +0 -6
  68. data/lib/morpheus/api/monitoring_groups_interface.rb +0 -6
  69. data/lib/morpheus/api/monitoring_incidents_interface.rb +0 -6
  70. data/lib/morpheus/api/monitoring_interface.rb +6 -12
  71. data/lib/morpheus/api/network_domain_records_interface.rb +0 -6
  72. data/lib/morpheus/api/network_domains_interface.rb +0 -6
  73. data/lib/morpheus/api/network_groups_interface.rb +0 -6
  74. data/lib/morpheus/api/network_pool_ips_interface.rb +0 -6
  75. data/lib/morpheus/api/network_pool_servers_interface.rb +0 -6
  76. data/lib/morpheus/api/network_pools_interface.rb +0 -6
  77. data/lib/morpheus/api/network_proxies_interface.rb +0 -6
  78. data/lib/morpheus/api/network_routers_interface.rb +56 -6
  79. data/lib/morpheus/api/network_security_servers_interface.rb +6 -9
  80. data/lib/morpheus/api/network_services_interface.rb +14 -14
  81. data/lib/morpheus/api/network_subnets_interface.rb +0 -6
  82. data/lib/morpheus/api/network_types_interface.rb +1 -7
  83. data/lib/morpheus/api/networks_interface.rb +0 -6
  84. data/lib/morpheus/api/option_type_lists_interface.rb +18 -12
  85. data/lib/morpheus/api/option_types_interface.rb +0 -6
  86. data/lib/morpheus/api/options_interface.rb +0 -6
  87. data/lib/morpheus/api/packages_interface.rb +0 -6
  88. data/lib/morpheus/api/policies_interface.rb +1 -8
  89. data/lib/morpheus/api/power_schedules_interface.rb +0 -6
  90. data/lib/morpheus/api/price_sets_interface.rb +8 -11
  91. data/lib/morpheus/api/prices_interface.rb +12 -15
  92. data/lib/morpheus/api/processes_interface.rb +0 -6
  93. data/lib/morpheus/api/provision_types_interface.rb +0 -6
  94. data/lib/morpheus/api/provisioning_license_types_interface.rb +0 -6
  95. data/lib/morpheus/api/provisioning_licenses_interface.rb +0 -6
  96. data/lib/morpheus/api/provisioning_settings_interface.rb +6 -9
  97. data/lib/morpheus/api/read_interface.rb +23 -0
  98. data/lib/morpheus/api/reports_interface.rb +0 -6
  99. data/lib/morpheus/api/rest_interface.rb +12 -10
  100. data/lib/morpheus/api/roles_interface.rb +7 -6
  101. data/lib/morpheus/api/secondary_read_interface.rb +25 -0
  102. data/lib/morpheus/api/secondary_rest_interface.rb +42 -0
  103. data/lib/morpheus/api/security_group_rules_interface.rb +0 -7
  104. data/lib/morpheus/api/security_groups_interface.rb +0 -6
  105. data/lib/morpheus/api/server_types_interface.rb +0 -6
  106. data/lib/morpheus/api/servers_interface.rb +7 -6
  107. data/lib/morpheus/api/service_plans_interface.rb +11 -14
  108. data/lib/morpheus/api/storage_providers_interface.rb +9 -16
  109. data/lib/morpheus/api/subnet_types_interface.rb +1 -7
  110. data/lib/morpheus/api/subnets_interface.rb +0 -6
  111. data/lib/morpheus/api/task_sets_interface.rb +0 -6
  112. data/lib/morpheus/api/tasks_interface.rb +0 -6
  113. data/lib/morpheus/api/user_groups_interface.rb +0 -6
  114. data/lib/morpheus/api/user_settings_interface.rb +38 -18
  115. data/lib/morpheus/api/user_sources_interface.rb +0 -6
  116. data/lib/morpheus/api/users_interface.rb +0 -6
  117. data/lib/morpheus/api/vdi_allocations_interface.rb +9 -0
  118. data/lib/morpheus/api/vdi_apps_interface.rb +9 -0
  119. data/lib/morpheus/api/vdi_gateways_interface.rb +9 -0
  120. data/lib/morpheus/api/vdi_interface.rb +28 -0
  121. data/lib/morpheus/api/vdi_pools_interface.rb +19 -0
  122. data/lib/morpheus/api/virtual_images_interface.rb +0 -6
  123. data/lib/morpheus/api/whitelabel_settings_interface.rb +8 -11
  124. data/lib/morpheus/api/wiki_interface.rb +0 -6
  125. data/lib/morpheus/cli.rb +10 -2
  126. data/lib/morpheus/cli/access_token_command.rb +1 -1
  127. data/lib/morpheus/cli/account_groups_command.rb +4 -4
  128. data/lib/morpheus/cli/apps.rb +68 -84
  129. data/lib/morpheus/cli/archives_command.rb +5 -5
  130. data/lib/morpheus/cli/blueprints_command.rb +5 -5
  131. data/lib/morpheus/cli/boot_scripts_command.rb +1 -1
  132. data/lib/morpheus/cli/catalog_item_types_command.rb +13 -13
  133. data/lib/morpheus/cli/certificates_command.rb +575 -0
  134. data/lib/morpheus/cli/change_password_command.rb +4 -4
  135. data/lib/morpheus/cli/cli_command.rb +72 -16
  136. data/lib/morpheus/cli/clouds.rb +3 -2
  137. data/lib/morpheus/cli/clusters.rb +3 -3
  138. data/lib/morpheus/cli/commands/standard/man_command.rb +4 -5
  139. data/lib/morpheus/cli/credentials.rb +4 -11
  140. data/lib/morpheus/cli/environments_command.rb +1 -1
  141. data/lib/morpheus/cli/execute_schedules_command.rb +3 -3
  142. data/lib/morpheus/cli/hosts.rb +253 -232
  143. data/lib/morpheus/cli/image_builder_command.rb +6 -6
  144. data/lib/morpheus/cli/instance_types.rb +1 -1
  145. data/lib/morpheus/cli/instances.rb +229 -219
  146. data/lib/morpheus/cli/integrations_command.rb +1155 -42
  147. data/lib/morpheus/cli/invoices_command.rb +75 -67
  148. data/lib/morpheus/cli/key_pairs.rb +2 -2
  149. data/lib/morpheus/cli/library_cluster_layouts_command.rb +2 -3
  150. data/lib/morpheus/cli/library_container_scripts_command.rb +4 -5
  151. data/lib/morpheus/cli/library_container_templates_command.rb +5 -1
  152. data/lib/morpheus/cli/library_container_types_command.rb +8 -9
  153. data/lib/morpheus/cli/library_instance_types_command.rb +6 -7
  154. data/lib/morpheus/cli/library_layouts_command.rb +9 -5
  155. data/lib/morpheus/cli/library_option_lists_command.rb +72 -20
  156. data/lib/morpheus/cli/library_option_types_command.rb +8 -4
  157. data/lib/morpheus/cli/library_spec_templates_command.rb +3 -4
  158. data/lib/morpheus/cli/library_upgrades_command.rb +6 -6
  159. data/lib/morpheus/cli/license.rb +2 -2
  160. data/lib/morpheus/cli/load_balancer_types.rb +37 -0
  161. data/lib/morpheus/cli/load_balancers.rb +149 -314
  162. data/lib/morpheus/cli/log_settings_command.rb +7 -3
  163. data/lib/morpheus/cli/login.rb +10 -1
  164. data/lib/morpheus/cli/mixins/load_balancers_helper.rb +156 -0
  165. data/lib/morpheus/cli/mixins/print_helper.rb +44 -18
  166. data/lib/morpheus/cli/mixins/provisioning_helper.rb +4 -4
  167. data/lib/morpheus/cli/mixins/rest_command.rb +657 -0
  168. data/lib/morpheus/cli/mixins/vdi_helper.rb +246 -0
  169. data/lib/morpheus/cli/network_routers_command.rb +1187 -176
  170. data/lib/morpheus/cli/networks_command.rb +195 -102
  171. data/lib/morpheus/cli/option_types.rb +66 -71
  172. data/lib/morpheus/cli/policies_command.rb +0 -1
  173. data/lib/morpheus/cli/power_schedules_command.rb +3 -3
  174. data/lib/morpheus/cli/preseed_scripts_command.rb +1 -1
  175. data/lib/morpheus/cli/remote.rb +2 -2
  176. data/lib/morpheus/cli/reports_command.rb +4 -1
  177. data/lib/morpheus/cli/roles.rb +224 -64
  178. data/lib/morpheus/cli/security_group_rules.rb +1 -1
  179. data/lib/morpheus/cli/setup.rb +0 -1
  180. data/lib/morpheus/cli/subnets_command.rb +11 -2
  181. data/lib/morpheus/cli/tenants_command.rb +21 -23
  182. data/lib/morpheus/cli/user_groups_command.rb +3 -3
  183. data/lib/morpheus/cli/user_settings_command.rb +268 -57
  184. data/lib/morpheus/cli/user_sources_command.rb +3 -3
  185. data/lib/morpheus/cli/users.rb +3 -3
  186. data/lib/morpheus/cli/vdi_allocations_command.rb +159 -0
  187. data/lib/morpheus/cli/vdi_apps_command.rb +317 -0
  188. data/lib/morpheus/cli/vdi_command.rb +359 -0
  189. data/lib/morpheus/cli/vdi_gateways_command.rb +290 -0
  190. data/lib/morpheus/cli/vdi_pools_command.rb +571 -0
  191. data/lib/morpheus/cli/version.rb +1 -1
  192. data/lib/morpheus/cli/virtual_images.rb +1 -1
  193. data/lib/morpheus/cli/whoami.rb +0 -15
  194. data/lib/morpheus/cli/wiki_command.rb +1 -1
  195. data/lib/morpheus/ext/string.rb +41 -0
  196. data/lib/morpheus/formatters.rb +4 -0
  197. data/lib/morpheus/rest_client.rb +30 -0
  198. data/lib/morpheus/terminal.rb +15 -7
  199. metadata +27 -2
@@ -0,0 +1,19 @@
1
+ require 'morpheus/api/rest_interface'
2
+
3
+ class Morpheus::VdiPoolsInterface < Morpheus::RestInterface
4
+
5
+ def base_path
6
+ "/api/vdi-pools"
7
+ end
8
+
9
+ # NOT json, multipart file upload
10
+ def update_logo(id, logo_file)
11
+ url = "#{base_path}/#{id}/update-logo"
12
+ headers = { :params => {}, :authorization => "Bearer #{@access_token}"}
13
+ payload = {}
14
+ payload[:logo] = logo_file
15
+ payload[:multipart] = true
16
+ execute(method: :post, url: url, headers: headers, payload: payload)
17
+ end
18
+
19
+ end
@@ -4,12 +4,6 @@ require 'zlib'
4
4
  require 'forwardable'
5
5
 
6
6
  class Morpheus::VirtualImagesInterface < Morpheus::APIClient
7
- def initialize(access_token, refresh_token,expires_at = nil, base_url=nil)
8
- @access_token = access_token
9
- @refresh_token = refresh_token
10
- @base_url = base_url
11
- @expires_at = expires_at
12
- end
13
7
 
14
8
  def virtual_image_types(options={})
15
9
  url = "#{@base_url}/api/virtual-image-types"
@@ -1,41 +1,38 @@
1
1
  require 'morpheus/api/api_client'
2
2
 
3
3
  class Morpheus::WhitelabelSettingsInterface < Morpheus::APIClient
4
- def initialize(access_token, refresh_token,expires_at = nil, base_url=nil, api='whitelabel-settings')
5
- @access_token = access_token
6
- @refresh_token = refresh_token
7
- @base_url = base_url
8
- @api_url = "#{base_url}/api/#{api}"
9
- @expires_at = expires_at
4
+
5
+ def base_path
6
+ "/api/whitelabel-settings"
10
7
  end
11
8
 
12
9
  def get(params={})
13
- url = @api_url
10
+ url = base_path
14
11
  headers = { params: params, authorization: "Bearer #{@access_token}" }
15
12
  execute(method: :get, url: url, headers: headers)
16
13
  end
17
14
 
18
15
  def update(payload, params={})
19
- url = @api_url
16
+ url = base_path
20
17
  headers = { params: params, :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
21
18
  execute(method: :put, url: url, headers: headers, payload: payload.to_json)
22
19
  end
23
20
 
24
21
  def update_images(payload, params={})
25
- url = "#{@api_url}/images"
22
+ url = "#{base_path}/images"
26
23
  headers = { params: params, :authorization => "Bearer #{@access_token}" }
27
24
  payload[:multipart] = true
28
25
  execute(method: :post, url: url, headers: headers, payload: payload)
29
26
  end
30
27
 
31
28
  def reset_image(image_type, params={})
32
- url = "#{@api_url}/images/#{image_type}"
29
+ url = "#{base_path}/images/#{image_type}"
33
30
  headers = { params: params, :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
34
31
  execute(method: :delete, url: url, headers: headers)
35
32
  end
36
33
 
37
34
  def download_image(image_type, outfile, params={})
38
- url = "#{@api_url}/images/#{image_type}"
35
+ url = "#{base_path}/images/#{image_type}"
39
36
  headers = { params: params, :authorization => "Bearer #{@access_token}" }
40
37
  opts = {method: :get, url: url, headers: headers, timeout: 172800}
41
38
 
@@ -1,12 +1,6 @@
1
1
  require 'morpheus/api/api_client'
2
2
 
3
3
  class Morpheus::WikiInterface < 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
4
 
11
5
  def get(id, params={})
12
6
  raise "#{self.class}.get() passed a blank name!" if id.to_s == ''
data/lib/morpheus/cli.rb CHANGED
@@ -46,6 +46,7 @@ module Morpheus
46
46
  # load interfaces
47
47
  require 'morpheus/api/api_client.rb'
48
48
  require 'morpheus/api/rest_interface.rb'
49
+ require 'morpheus/api/read_interface.rb'
49
50
  Dir[File.dirname(__FILE__) + "/api/**/*.rb"].each {|file| load file }
50
51
 
51
52
  # load mixins
@@ -92,6 +93,7 @@ module Morpheus
92
93
  load 'morpheus/cli/cloud_folders_command.rb'
93
94
  load 'morpheus/cli/hosts.rb'
94
95
  load 'morpheus/cli/load_balancers.rb'
96
+ load 'morpheus/cli/load_balancer_types.rb'
95
97
  load 'morpheus/cli/shell.rb'
96
98
  load 'morpheus/cli/tasks.rb'
97
99
  load 'morpheus/cli/workflows.rb'
@@ -175,9 +177,15 @@ module Morpheus
175
177
  load 'morpheus/cli/projects_command.rb'
176
178
  load 'morpheus/cli/backups_command.rb'
177
179
  load 'morpheus/cli/backup_jobs_command.rb'
178
- load 'morpheus/cli/catalog_item_types_command.rb' # catalog-types
179
- load 'morpheus/cli/service_catalog_command.rb' # catalog
180
+ load 'morpheus/cli/catalog_item_types_command.rb' # self-service
181
+ load 'morpheus/cli/service_catalog_command.rb' # catalog (Service Catalog persona)
180
182
  load 'morpheus/cli/usage_command.rb'
183
+ load 'morpheus/cli/vdi_pools_command.rb'
184
+ load 'morpheus/cli/vdi_allocations_command.rb'
185
+ load 'morpheus/cli/vdi_apps_command.rb'
186
+ load 'morpheus/cli/vdi_gateways_command.rb'
187
+ load 'morpheus/cli/vdi_command.rb' # (VDI persona)
188
+ load 'morpheus/cli/certificates_command.rb' # (VDI persona)
181
189
  # add new commands here...
182
190
 
183
191
  end
@@ -156,7 +156,7 @@ class Morpheus::Cli::AccessTokenCommand
156
156
  end
157
157
  end
158
158
  if options[:dry_run]
159
- print_dry_run Morpheus::AuthInterface.new({url:@appliance_url}).setopts(options).use_refresh_token(refresh_token_value)
159
+ print_dry_run @api_client.auth.dry.use_refresh_token(refresh_token_value)
160
160
  return 0
161
161
  end
162
162
  unless options[:quiet]
@@ -28,11 +28,11 @@ class Morpheus::Cli::AccountGroupsCommand
28
28
 
29
29
  def connect(opts)
30
30
  @api_client = establish_remote_appliance_connection(opts)
31
- @account_groups_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).account_groups
32
- @accounts_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).accounts
31
+ @account_groups_interface = @api_client.account_groups
32
+ @accounts_interface = @api_client.accounts
33
33
 
34
- @groups_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).groups
35
- @clouds_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).clouds
34
+ @groups_interface = @api_client.groups
35
+ @clouds_interface = @api_client.clouds
36
36
  end
37
37
 
38
38
  def handle(args)
@@ -37,15 +37,15 @@ class Morpheus::Cli::Apps
37
37
  @api_client = establish_remote_appliance_connection(opts)
38
38
  @accounts_interface = @api_client.accounts
39
39
  @users_interface = @api_client.users
40
- @apps_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).apps
41
- @blueprints_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).blueprints
42
- @instance_types_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).instance_types
43
- @library_layouts_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).library_layouts
44
- @instances_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).instances
45
- @options_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).options
46
- @groups_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).groups
47
- @clouds_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).clouds
48
- @logs_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).logs
40
+ @apps_interface = @api_client.apps
41
+ @blueprints_interface = @api_client.blueprints
42
+ @instance_types_interface = @api_client.instance_types
43
+ @library_layouts_interface = @api_client.library_layouts
44
+ @instances_interface = @api_client.instances
45
+ @options_interface = @api_client.options
46
+ @groups_interface = @api_client.groups
47
+ @clouds_interface = @api_client.clouds
48
+ @logs_interface = @api_client.logs
49
49
  @processes_interface = @api_client.processes
50
50
  @active_group_id = Morpheus::Cli::Groups.active_groups[@appliance_name]
51
51
  end
@@ -88,7 +88,7 @@ class Morpheus::Cli::Apps
88
88
  opts.on('-a', '--details', "Display all details: memory and storage usage used / max values." ) do
89
89
  options[:details] = true
90
90
  end
91
- build_common_options(opts, options, [:list, :query, :json, :yaml, :csv, :fields, :dry_run, :remote])
91
+ build_standard_list_options(opts, options)
92
92
  opts.footer = "List apps."
93
93
  end
94
94
  optparse.parse!(args)
@@ -97,64 +97,53 @@ class Morpheus::Cli::Apps
97
97
  options[:phrase] = args.join(" ")
98
98
  end
99
99
  connect(options)
100
- begin
101
- if options[:type]
102
- params['type'] = [options[:type]].flatten.collect {|it| it.to_s.strip.split(",") }.flatten.collect {|it| it.to_s.strip }
103
- end
104
- if options[:blueprint]
105
- blueprint_ids = [options[:blueprint]].flatten.collect {|it| it.to_s.strip.split(",") }.flatten.collect {|it| it.to_s.strip }
106
- params['blueprintId'] = blueprint_ids.collect do |blueprint_id|
107
- if blueprint_id.to_s =~ /\A\d{1,}\Z/
108
- return blueprint_id
109
- else
110
- blueprint = find_blueprint_by_name_or_id(blueprint_id)
111
- return 1 if blueprint.nil?
112
- blueprint['id']
113
- end
100
+
101
+ if options[:type]
102
+ params['type'] = [options[:type]].flatten.collect {|it| it.to_s.strip.split(",") }.flatten.collect {|it| it.to_s.strip }
103
+ end
104
+ if options[:blueprint]
105
+ blueprint_ids = [options[:blueprint]].flatten.collect {|it| it.to_s.strip.split(",") }.flatten.collect {|it| it.to_s.strip }
106
+ params['blueprintId'] = blueprint_ids.collect do |blueprint_id|
107
+ if blueprint_id.to_s =~ /\A\d{1,}\Z/
108
+ return blueprint_id
109
+ else
110
+ blueprint = find_blueprint_by_name_or_id(blueprint_id)
111
+ return 1 if blueprint.nil?
112
+ blueprint['id']
114
113
  end
115
114
  end
116
- if options[:owner]
117
- owner_ids = [options[:owner]].flatten.collect {|it| it.to_s.strip.split(",") }.flatten.collect {|it| it.to_s.strip }
118
- params['ownerId'] = owner_ids.collect do |owner_id|
119
- if owner_id.to_s =~ /\A\d{1,}\Z/
120
- return owner_id
121
- else
122
- user = find_available_user_option(owner_id)
123
- return 1 if user.nil?
124
- user['id']
125
- end
115
+ end
116
+ if options[:owner]
117
+ owner_ids = [options[:owner]].flatten.collect {|it| it.to_s.strip.split(",") }.flatten.collect {|it| it.to_s.strip }
118
+ params['ownerId'] = owner_ids.collect do |owner_id|
119
+ if owner_id.to_s =~ /\A\d{1,}\Z/
120
+ return owner_id
121
+ else
122
+ user = find_available_user_option(owner_id)
123
+ return 1 if user.nil?
124
+ user['id']
126
125
  end
127
126
  end
128
- params.merge!(parse_list_options(options))
129
- account = nil
130
- if options[:owner]
131
- created_by_ids = find_all_user_ids(account ? account['id'] : nil, options[:owner])
132
- return if created_by_ids.nil?
133
- params['createdBy'] = created_by_ids
134
- # params['ownerId'] = created_by_ids # 4.2.1+
135
- end
136
-
137
- params['showDeleted'] = options[:showDeleted] if options.key?(:showDeleted)
138
- params['deleted'] = options[:deleted] if options.key?(:deleted)
127
+ end
128
+ params.merge!(parse_list_options(options))
129
+ account = nil
130
+ if options[:owner]
131
+ created_by_ids = find_all_user_ids(account ? account['id'] : nil, options[:owner])
132
+ return if created_by_ids.nil?
133
+ params['createdBy'] = created_by_ids
134
+ # params['ownerId'] = created_by_ids # 4.2.1+
135
+ end
139
136
 
140
- @apps_interface.setopts(options)
141
- if options[:dry_run]
142
- print_dry_run @apps_interface.dry.list(params)
143
- return
144
- end
137
+ params['showDeleted'] = options[:showDeleted] if options.key?(:showDeleted)
138
+ params['deleted'] = options[:deleted] if options.key?(:deleted)
145
139
 
146
- json_response = @apps_interface.list(params)
147
- if options[:json]
148
- puts as_json(json_response, options, "apps")
149
- return 0
150
- elsif options[:yaml]
151
- puts as_yaml(json_response, options, "apps")
152
- return 0
153
- elsif options[:csv]
154
- puts records_as_csv(json_response['apps'], options)
155
- return 0
156
- end
157
-
140
+ @apps_interface.setopts(options)
141
+ if options[:dry_run]
142
+ print_dry_run @apps_interface.dry.list(params)
143
+ return
144
+ end
145
+ json_response = @apps_interface.list(params)
146
+ render_response(json_response, options, "apps") do
158
147
  apps = json_response['apps']
159
148
  title = "Morpheus Apps"
160
149
  subtitles = []
@@ -167,10 +156,8 @@ class Morpheus::Cli::Apps
167
156
  print_results_pagination(json_response)
168
157
  end
169
158
  print reset,"\n"
170
- rescue RestClient::Exception => e
171
- print_rest_exception(e, options)
172
- exit 1
173
159
  end
160
+ return 0, nil
174
161
  end
175
162
 
176
163
  def count(args)
@@ -645,7 +632,7 @@ class Morpheus::Cli::Apps
645
632
  opts.on('--refresh-until STATUS', String, "Refresh until a specified status is reached.") do |val|
646
633
  options[:refresh_until_status] = val.to_s.downcase
647
634
  end
648
- build_common_options(opts, options, [:json, :yaml, :csv, :fields, :outfile, :dry_run, :remote])
635
+ build_standard_get_options(opts, options)
649
636
  opts.footer = "Get details about an app.\n" +
650
637
  "[app] is required. This is the name or id of an app. Supports 1-N [app] arguments."
651
638
  end
@@ -665,19 +652,19 @@ class Morpheus::Cli::Apps
665
652
 
666
653
  end
667
654
 
668
- def _get(arg, options={})
669
- begin
670
- app = find_app_by_name_or_id(arg)
671
- @apps_interface.setopts(options)
672
- if options[:dry_run]
673
- print_dry_run @apps_interface.dry.get(app['id'])
674
- return
675
- end
676
- json_response = @apps_interface.get(app['id'])
677
-
678
- render_result = render_with_format(json_response, options, 'blueprint')
679
- return 0 if render_result
680
-
655
+ def _get(id, options={})
656
+ app = nil
657
+ if id.to_s !~ /\A\d{1,}\Z/
658
+ app = find_app_by_name_or_id(id)
659
+ id = app['id']
660
+ end
661
+ @apps_interface.setopts(options)
662
+ if options[:dry_run]
663
+ print_dry_run @apps_interface.dry.get(id)
664
+ return
665
+ end
666
+ json_response = @apps_interface.get(id.to_i)
667
+ render_response(json_response, options, 'app') do
681
668
  app = json_response['app']
682
669
  app_tiers = app['appTiers']
683
670
  print_h1 "App Details", [], options
@@ -799,14 +786,11 @@ class Morpheus::Cli::Apps
799
786
  print cyan, "Refreshing in #{options[:refresh_interval] > 1 ? options[:refresh_interval].to_i : options[:refresh_interval]} seconds"
800
787
  sleep_with_dots(options[:refresh_interval])
801
788
  print "\n"
802
- _get(arg, options)
789
+ _get(app['id'], options)
803
790
  end
804
791
  end
805
-
806
- rescue RestClient::Exception => e
807
- print_rest_exception(e, options)
808
- exit 1
809
792
  end
793
+ return 0, nil
810
794
  end
811
795
 
812
796
  def update(args)
@@ -48,9 +48,9 @@ class Morpheus::Cli::ArchivesCommand
48
48
 
49
49
  def connect(opts)
50
50
  @api_client = establish_remote_appliance_connection(opts)
51
- @archive_buckets_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).archive_buckets
52
- @archive_files_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).archive_files
53
- @options_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).options
51
+ @archive_buckets_interface = @api_client.archive_buckets
52
+ @archive_files_interface = @api_client.archive_files
53
+ @options_interface = @api_client.options
54
54
  # @active_group_id = Morpheus::Cli::Groups.active_groups[@appliance_name]
55
55
  end
56
56
 
@@ -979,10 +979,10 @@ class Morpheus::Cli::ArchivesCommand
979
979
 
980
980
 
981
981
  print_h2 "Download URLs"
982
- private_download_url = "#{@appliance_url}/api/archives/download/#{URI.escape(bucket_id)}" + "/#{URI.escape(archive_file['filePath'])}".squeeze('/')
982
+ private_download_url = "#{@appliance_url}/api/archives/download/#{CGI::escape(bucket_id)}" + "/#{CGI::escape(archive_file['filePath'])}".squeeze('/')
983
983
  public_download_url = nil
984
984
  if archive_file['archiveBucket'] && archive_file['archiveBucket']['isPublic']
985
- public_download_url = "#{@appliance_url}/public-archives/download/#{URI.escape(bucket_id)}" + "/#{URI.escape(archive_file['filePath'])}".squeeze('/')
985
+ public_download_url = "#{@appliance_url}/public-archives/download/#{CGI::escape(bucket_id)}" + "/#{CGI::escape(archive_file['filePath'])}".squeeze('/')
986
986
  end
987
987
  print cyan
988
988
  puts "Private URL: #{private_download_url}"
@@ -29,11 +29,11 @@ class Morpheus::Cli::BlueprintsCommand
29
29
 
30
30
  def connect(opts)
31
31
  @api_client = establish_remote_appliance_connection(opts)
32
- @blueprints_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).blueprints
33
- @groups_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).groups
34
- @instances_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).instances
35
- @instance_types_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).instance_types
36
- @options_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).options
32
+ @blueprints_interface = @api_client.blueprints
33
+ @groups_interface = @api_client.groups
34
+ @instances_interface = @api_client.instances
35
+ @instance_types_interface = @api_client.instance_types
36
+ @options_interface = @api_client.options
37
37
  @active_group_id = Morpheus::Cli::Groups.active_groups[@appliance_name]
38
38
  @clouds_interface = @api_client.clouds
39
39
  @users_interface = @api_client.users
@@ -24,7 +24,7 @@ class Morpheus::Cli::BootScriptsCommand
24
24
 
25
25
  def connect(opts)
26
26
  @api_client = establish_remote_appliance_connection(opts)
27
- @image_builder_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).image_builder
27
+ @image_builder_interface = @api_client.image_builder
28
28
  @boot_scripts_interface = @image_builder_interface.boot_scripts
29
29
  end
30
30
 
@@ -532,22 +532,22 @@ EOT
532
532
 
533
533
  def add_catalog_item_type_option_types
534
534
  [
535
- {'code' => 'catalogItemType.type', 'shorthand' => '-t', 'fieldName' => 'type', 'fieldLabel' => 'Type', 'type' => 'select', 'selectOptions' => [{'name' => 'Instance', 'value' => 'instance'}, {'name' => 'Blueprint', 'value' => 'blueprint'}, {'name' => 'Workflow', 'value' => 'workflow'}], 'defaultValue' => 'instance', 'required' => true},
536
- {'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => true},
537
- {'fieldName' => 'description', 'fieldLabel' => 'Description', 'type' => 'text'},
538
- {'fieldName' => 'enabled', 'fieldLabel' => 'Enabled', 'type' => 'checkbox', 'defaultValue' => true},
539
- {'fieldName' => 'featured', 'fieldLabel' => 'Featured', 'type' => 'checkbox', 'defaultValue' => false},
540
- {'fieldName' => 'visibility', 'fieldLabel' => 'Visibility', 'type' => 'select', 'selectOptions' => [{'name' => 'Private', 'value' => 'private'}, {'name' => 'Public', 'value' => 'public'}], 'defaultValue' => 'private', 'required' => true},
541
- {'fieldName' => 'iconPath', 'fieldLabel' => 'Logo', 'type' => 'select', 'optionSource' => 'iconList'},
542
- #{'fieldName' => 'optionTypes', 'fieldLabel' => 'Option Types', 'type' => 'text', 'description' => 'Option Types to include, comma separated list of names or IDs.'},
543
- {'dependsOnCode' => 'catalogItemType.type:instance', 'fieldName' => 'config', 'fieldLabel' => 'Config', 'type' => 'code-editor', 'description' => 'JSON or YAML', 'required' => true},
544
- {'dependsOnCode' => 'catalogItemType.type:blueprint', 'fieldName' => 'blueprint', 'fieldLabel' => 'Blueprint', 'type' => 'select', 'optionSource' => 'blueprints', 'description' => 'Choose a blueprint to apply to the catalog item.', 'required' => true, 'noParams' => true},
545
- {'dependsOnCode' => 'catalogItemType.type:blueprint', 'fieldName' => 'appSpec', 'fieldLabel' => 'App Spec', 'type' => 'code-editor', 'description' => 'Enter a spec in the for the App, the Scribe YAML format', 'required' => true},
546
- {'dependsOnCode' => 'catalogItemType.type:workflow', 'fieldName' => 'workflow', 'fieldLabel' => 'Workflow', 'type' => 'select', 'optionSource' => 'operationWorkflows', 'description' => 'Enter a spec in the for the App, the Scribe YAML format', 'noParams' => true},
535
+ {'code' => 'catalogItemType.type', 'shorthand' => '-t', 'fieldName' => 'type', 'fieldLabel' => 'Type', 'type' => 'select', 'selectOptions' => [{'name' => 'Instance', 'value' => 'instance'}, {'name' => 'Blueprint', 'value' => 'blueprint'}, {'name' => 'Workflow', 'value' => 'workflow'}], 'defaultValue' => 'instance', 'required' => true, 'displayOrder' => 1},
536
+ {'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => true, 'displayOrder' => 2},
537
+ {'fieldName' => 'description', 'fieldLabel' => 'Description', 'type' => 'text', 'displayOrder' => 3},
538
+ {'fieldName' => 'enabled', 'fieldLabel' => 'Enabled', 'type' => 'checkbox', 'defaultValue' => true, 'displayOrder' => 4},
539
+ {'fieldName' => 'featured', 'fieldLabel' => 'Featured', 'type' => 'checkbox', 'defaultValue' => false, 'displayOrder' => 5},
540
+ {'fieldName' => 'visibility', 'fieldLabel' => 'Visibility', 'type' => 'select', 'selectOptions' => [{'name' => 'Private', 'value' => 'private'}, {'name' => 'Public', 'value' => 'public'}], 'defaultValue' => 'private', 'required' => true, 'displayOrder' => 6},
541
+ {'fieldName' => 'iconPath', 'fieldLabel' => 'Logo', 'type' => 'select', 'optionSource' => 'iconList', 'displayOrder' => 7},
542
+ #{'fieldName' => 'optionTypes', 'fieldLabel' => 'Option Types', 'type' => 'text', 'description' => 'Option Types to include, comma separated list of names or IDs.', 'displayOrder' => 8},
543
+ {'dependsOnCode' => 'catalogItemType.type:instance', 'fieldName' => 'config', 'fieldLabel' => 'Config', 'type' => 'code-editor', 'description' => 'JSON or YAML', 'required' => true, 'displayOrder' => 9},
544
+ {'dependsOnCode' => 'catalogItemType.type:blueprint', 'fieldName' => 'blueprint', 'fieldLabel' => 'Blueprint', 'type' => 'select', 'optionSource' => 'blueprints', 'description' => 'Choose a blueprint to apply to the catalog item.', 'required' => true, 'noParams' => true, 'displayOrder' => 10},
545
+ {'dependsOnCode' => 'catalogItemType.type:blueprint', 'fieldName' => 'appSpec', 'fieldLabel' => 'App Spec', 'type' => 'code-editor', 'description' => 'Enter a spec in the for the App, the Scribe YAML format', 'required' => true, 'displayOrder' => 11},
546
+ {'dependsOnCode' => 'catalogItemType.type:workflow', 'fieldName' => 'workflow', 'fieldLabel' => 'Workflow', 'type' => 'select', 'optionSource' => 'operationWorkflows', 'description' => 'Enter a spec in the for the App, the Scribe YAML format', 'noParams' => true, 'displayOrder' => 12},
547
547
  {'dependsOnCode' => 'catalogItemType.type:workflow', 'fieldName' => 'context', 'fieldLabel' => 'Context Type', 'type' => 'select', 'optionSource' => lambda { |api_client, api_params|
548
548
  [{'name' => "Select", 'value' => ""}, {'name' => "None", 'value' => "appliance"}, {'name' => "Instance", 'value' => "instance"}, {'name' => "Server", 'value' => "server"}]
549
549
  }, 'description' => 'Context for operational workflow, determines target type', 'defaultValue' => 'Select', 'required' => false},
550
- {'fieldName' => 'content', 'fieldLabel' => 'Content', 'type' => 'code-editor', 'description' => 'Wiki Page Content describing the catalog item'}
550
+ {'fieldName' => 'content', 'fieldLabel' => 'Content', 'type' => 'code-editor', 'description' => 'Wiki Page Content describing the catalog item', 'displayOrder' => 13}
551
551
  ]
552
552
  end
553
553