morpheus-cli 5.3.1 → 5.3.1.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 (156) hide show
  1. checksums.yaml +4 -4
  2. data/Dockerfile +1 -1
  3. data/lib/morpheus/api/account_groups_interface.rb +0 -6
  4. data/lib/morpheus/api/accounts_interface.rb +1 -7
  5. data/lib/morpheus/api/api_client.rb +108 -106
  6. data/lib/morpheus/api/appliance_settings_interface.rb +6 -9
  7. data/lib/morpheus/api/approvals_interface.rb +5 -8
  8. data/lib/morpheus/api/apps_interface.rb +0 -7
  9. data/lib/morpheus/api/archive_buckets_interface.rb +9 -16
  10. data/lib/morpheus/api/archive_files_interface.rb +0 -6
  11. data/lib/morpheus/api/auth_interface.rb +4 -4
  12. data/lib/morpheus/api/backup_settings_interface.rb +5 -8
  13. data/lib/morpheus/api/blueprints_interface.rb +1 -7
  14. data/lib/morpheus/api/budgets_interface.rb +0 -6
  15. data/lib/morpheus/api/cloud_datastores_interface.rb +0 -6
  16. data/lib/morpheus/api/cloud_folders_interface.rb +1 -7
  17. data/lib/morpheus/api/cloud_policies_interface.rb +0 -6
  18. data/lib/morpheus/api/cloud_resource_pools_interface.rb +0 -6
  19. data/lib/morpheus/api/clouds_interface.rb +0 -6
  20. data/lib/morpheus/api/clusters_interface.rb +39 -42
  21. data/lib/morpheus/api/containers_interface.rb +0 -6
  22. data/lib/morpheus/api/custom_instance_types_interface.rb +0 -6
  23. data/lib/morpheus/api/cypher_interface.rb +0 -6
  24. data/lib/morpheus/api/datastores_interface.rb +4 -7
  25. data/lib/morpheus/api/deploy_interface.rb +1 -6
  26. data/lib/morpheus/api/environments_interface.rb +0 -6
  27. data/lib/morpheus/api/execute_schedules_interface.rb +0 -6
  28. data/lib/morpheus/api/execution_request_interface.rb +0 -6
  29. data/lib/morpheus/api/file_copy_request_interface.rb +2 -9
  30. data/lib/morpheus/api/group_policies_interface.rb +0 -6
  31. data/lib/morpheus/api/groups_interface.rb +0 -7
  32. data/lib/morpheus/api/guidance_interface.rb +9 -12
  33. data/lib/morpheus/api/health_interface.rb +0 -6
  34. data/lib/morpheus/api/image_builder_boot_scripts_interface.rb +0 -6
  35. data/lib/morpheus/api/image_builder_image_builds_interface.rb +0 -6
  36. data/lib/morpheus/api/image_builder_interface.rb +3 -9
  37. data/lib/morpheus/api/image_builder_preseed_scripts_interface.rb +0 -6
  38. data/lib/morpheus/api/instance_types_interface.rb +0 -7
  39. data/lib/morpheus/api/instances_interface.rb +8 -19
  40. data/lib/morpheus/api/integrations_interface.rb +30 -0
  41. data/lib/morpheus/api/invoice_line_items_interface.rb +4 -9
  42. data/lib/morpheus/api/jobs_interface.rb +11 -14
  43. data/lib/morpheus/api/key_pairs_interface.rb +0 -6
  44. data/lib/morpheus/api/library_cluster_layouts_interface.rb +0 -6
  45. data/lib/morpheus/api/library_container_scripts_interface.rb +0 -6
  46. data/lib/morpheus/api/library_container_templates_interface.rb +0 -6
  47. data/lib/morpheus/api/library_container_types_interface.rb +0 -6
  48. data/lib/morpheus/api/library_container_upgrades_interface.rb +0 -6
  49. data/lib/morpheus/api/library_instance_types_interface.rb +0 -6
  50. data/lib/morpheus/api/library_layouts_interface.rb +0 -6
  51. data/lib/morpheus/api/library_spec_template_types_interface.rb +0 -6
  52. data/lib/morpheus/api/library_spec_templates_interface.rb +0 -6
  53. data/lib/morpheus/api/license_interface.rb +0 -6
  54. data/lib/morpheus/api/load_balancers_interface.rb +0 -6
  55. data/lib/morpheus/api/log_settings_interface.rb +9 -12
  56. data/lib/morpheus/api/logs_interface.rb +0 -6
  57. data/lib/morpheus/api/monitoring_alerts_interface.rb +0 -6
  58. data/lib/morpheus/api/monitoring_apps_interface.rb +0 -6
  59. data/lib/morpheus/api/monitoring_checks_interface.rb +0 -6
  60. data/lib/morpheus/api/monitoring_contacts_interface.rb +0 -6
  61. data/lib/morpheus/api/monitoring_groups_interface.rb +0 -6
  62. data/lib/morpheus/api/monitoring_incidents_interface.rb +0 -6
  63. data/lib/morpheus/api/monitoring_interface.rb +6 -12
  64. data/lib/morpheus/api/network_domain_records_interface.rb +0 -6
  65. data/lib/morpheus/api/network_domains_interface.rb +0 -6
  66. data/lib/morpheus/api/network_groups_interface.rb +0 -6
  67. data/lib/morpheus/api/network_pool_ips_interface.rb +0 -6
  68. data/lib/morpheus/api/network_pool_servers_interface.rb +0 -6
  69. data/lib/morpheus/api/network_pools_interface.rb +0 -6
  70. data/lib/morpheus/api/network_proxies_interface.rb +0 -6
  71. data/lib/morpheus/api/network_routers_interface.rb +0 -6
  72. data/lib/morpheus/api/network_security_servers_interface.rb +6 -9
  73. data/lib/morpheus/api/network_services_interface.rb +0 -14
  74. data/lib/morpheus/api/network_subnets_interface.rb +0 -6
  75. data/lib/morpheus/api/network_types_interface.rb +1 -7
  76. data/lib/morpheus/api/networks_interface.rb +0 -6
  77. data/lib/morpheus/api/option_type_lists_interface.rb +0 -6
  78. data/lib/morpheus/api/option_types_interface.rb +0 -6
  79. data/lib/morpheus/api/options_interface.rb +0 -6
  80. data/lib/morpheus/api/packages_interface.rb +0 -6
  81. data/lib/morpheus/api/policies_interface.rb +1 -8
  82. data/lib/morpheus/api/power_schedules_interface.rb +0 -6
  83. data/lib/morpheus/api/price_sets_interface.rb +8 -11
  84. data/lib/morpheus/api/prices_interface.rb +12 -15
  85. data/lib/morpheus/api/processes_interface.rb +0 -6
  86. data/lib/morpheus/api/provision_types_interface.rb +0 -6
  87. data/lib/morpheus/api/provisioning_license_types_interface.rb +0 -6
  88. data/lib/morpheus/api/provisioning_licenses_interface.rb +0 -6
  89. data/lib/morpheus/api/provisioning_settings_interface.rb +6 -9
  90. data/lib/morpheus/api/reports_interface.rb +0 -6
  91. data/lib/morpheus/api/roles_interface.rb +0 -6
  92. data/lib/morpheus/api/security_group_rules_interface.rb +0 -7
  93. data/lib/morpheus/api/security_groups_interface.rb +0 -6
  94. data/lib/morpheus/api/server_types_interface.rb +0 -6
  95. data/lib/morpheus/api/servers_interface.rb +0 -6
  96. data/lib/morpheus/api/service_plans_interface.rb +11 -14
  97. data/lib/morpheus/api/storage_providers_interface.rb +9 -16
  98. data/lib/morpheus/api/subnet_types_interface.rb +1 -7
  99. data/lib/morpheus/api/subnets_interface.rb +0 -6
  100. data/lib/morpheus/api/task_sets_interface.rb +0 -6
  101. data/lib/morpheus/api/tasks_interface.rb +0 -6
  102. data/lib/morpheus/api/user_groups_interface.rb +0 -6
  103. data/lib/morpheus/api/user_sources_interface.rb +0 -6
  104. data/lib/morpheus/api/users_interface.rb +0 -6
  105. data/lib/morpheus/api/virtual_images_interface.rb +0 -6
  106. data/lib/morpheus/api/whitelabel_settings_interface.rb +8 -11
  107. data/lib/morpheus/api/wiki_interface.rb +0 -6
  108. data/lib/morpheus/cli/access_token_command.rb +1 -1
  109. data/lib/morpheus/cli/account_groups_command.rb +4 -4
  110. data/lib/morpheus/cli/apps.rb +9 -9
  111. data/lib/morpheus/cli/archives_command.rb +5 -5
  112. data/lib/morpheus/cli/blueprints_command.rb +5 -5
  113. data/lib/morpheus/cli/boot_scripts_command.rb +1 -1
  114. data/lib/morpheus/cli/change_password_command.rb +4 -4
  115. data/lib/morpheus/cli/cli_command.rb +2 -1
  116. data/lib/morpheus/cli/clouds.rb +2 -2
  117. data/lib/morpheus/cli/clusters.rb +2 -2
  118. data/lib/morpheus/cli/credentials.rb +4 -11
  119. data/lib/morpheus/cli/environments_command.rb +1 -1
  120. data/lib/morpheus/cli/execute_schedules_command.rb +3 -3
  121. data/lib/morpheus/cli/hosts.rb +8 -8
  122. data/lib/morpheus/cli/image_builder_command.rb +6 -6
  123. data/lib/morpheus/cli/instance_types.rb +1 -1
  124. data/lib/morpheus/cli/instances.rb +54 -27
  125. data/lib/morpheus/cli/integrations_command.rb +567 -1
  126. data/lib/morpheus/cli/invoices_command.rb +75 -67
  127. data/lib/morpheus/cli/key_pairs.rb +2 -2
  128. data/lib/morpheus/cli/library_container_scripts_command.rb +1 -1
  129. data/lib/morpheus/cli/library_container_templates_command.rb +1 -1
  130. data/lib/morpheus/cli/library_container_types_command.rb +6 -6
  131. data/lib/morpheus/cli/library_instance_types_command.rb +4 -4
  132. data/lib/morpheus/cli/library_layouts_command.rb +5 -5
  133. data/lib/morpheus/cli/library_option_lists_command.rb +4 -4
  134. data/lib/morpheus/cli/library_option_types_command.rb +4 -4
  135. data/lib/morpheus/cli/library_upgrades_command.rb +6 -6
  136. data/lib/morpheus/cli/license.rb +2 -2
  137. data/lib/morpheus/cli/load_balancers.rb +1 -1
  138. data/lib/morpheus/cli/login.rb +3 -1
  139. data/lib/morpheus/cli/mixins/provisioning_helper.rb +1 -1
  140. data/lib/morpheus/cli/option_types.rb +5 -1
  141. data/lib/morpheus/cli/policies_command.rb +0 -1
  142. data/lib/morpheus/cli/power_schedules_command.rb +3 -3
  143. data/lib/morpheus/cli/preseed_scripts_command.rb +1 -1
  144. data/lib/morpheus/cli/remote.rb +1 -1
  145. data/lib/morpheus/cli/roles.rb +9 -9
  146. data/lib/morpheus/cli/security_group_rules.rb +1 -1
  147. data/lib/morpheus/cli/setup.rb +0 -1
  148. data/lib/morpheus/cli/tenants_command.rb +3 -3
  149. data/lib/morpheus/cli/user_groups_command.rb +3 -3
  150. data/lib/morpheus/cli/user_sources_command.rb +3 -3
  151. data/lib/morpheus/cli/users.rb +3 -3
  152. data/lib/morpheus/cli/version.rb +1 -1
  153. data/lib/morpheus/cli/virtual_images.rb +1 -1
  154. data/lib/morpheus/cli/whoami.rb +0 -15
  155. data/lib/morpheus/cli/wiki_command.rb +1 -1
  156. metadata +2 -2
@@ -31,20 +31,16 @@ class Morpheus::Cli::InvoicesCommand
31
31
  options[:show_all] = true
32
32
  options[:show_dates] = true
33
33
  options[:show_estimates] = true
34
- # options[:show_costs] = true
35
- options[:show_prices] = true
34
+ options[:show_costs] = true
36
35
  end
37
36
  opts.on('--dates', "Display Ref Start, Ref End, etc.") do |val|
38
37
  options[:show_dates] = true
39
38
  end
40
- opts.on('--estimates', '--estimates', "Display all estimated costs, from usage info: Compute, Storage, Network, Extra" ) do
41
- options[:show_estimates] = true
39
+ opts.on('--costs', '--costs', "Display Costs in addition to prices" ) do
40
+ options[:show_costs] = true
42
41
  end
43
- # opts.on('--costs', '--costs', "Display all costs: Compute, Storage, Network, Extra" ) do
44
- # options[:show_costs] = true
45
- # end
46
- opts.on('--prices', '--prices', "Display prices: Total, Compute, Storage, Network, Extra" ) do
47
- options[:show_prices] = true
42
+ opts.on('--estimates', '--estimates', "Display all estimated prices, from usage metering info: Compute, Memory, Storage, Network, Extra" ) do
43
+ options[:show_estimates] = true
48
44
  end
49
45
  opts.on('-t', '--type TYPE', "Filter by Ref Type eg. ComputeSite (Group), ComputeZone (Cloud), ComputeServer (Host), Instance, Container, User") do |val|
50
46
  params['refType'] ||= []
@@ -226,42 +222,55 @@ class Morpheus::Cli::InvoicesCommand
226
222
  # {"LAST COST DATE" => lambda {|it| format_local_dt(it['lastCostDate']) } },
227
223
  # {"LAST ACTUAL DATE" => lambda {|it| format_local_dt(it['lastActualDate']) } },
228
224
  ] : []) + [
229
- {"COMPUTE" => lambda {|it| format_money(it['computeCost'], 'usd', {sigdig:options[:sigdig]}) } },
230
- # {"MEMORY" => lambda {|it| format_money(it['memoryCost']) } },
231
- {"STORAGE" => lambda {|it| format_money(it['storageCost'], 'usd', {sigdig:options[:sigdig]}) } },
232
- {"NETWORK" => lambda {|it| format_money(it['networkCost'], 'usd', {sigdig:options[:sigdig]}) } },
233
- {"EXTRA" => lambda {|it| format_money(it['extraCost'], 'usd', {sigdig:options[:sigdig]}) } },
234
- {"MTD" => lambda {|it| format_money(it['runningCost'], 'usd', {sigdig:options[:sigdig]}) } },
235
- {"TOTAL" => lambda {|it|
236
- format_money(it['totalCost'], 'usd', {sigdig:options[:sigdig]}) + ((it['totalCost'].to_f > 0 && it['totalCost'] != it['runningCost']) ? " (Projected)" : "")
225
+ {"COMPUTE PRICE" => lambda {|it| format_money(it['computePrice'], 'usd', {sigdig:options[:sigdig]}) } },
226
+ {"MEMORY PRICE" => lambda {|it| format_money(it['memoryPrice'], 'usd', {sigdig:options[:sigdig]}) } },
227
+ {"STORAGE PRICE" => lambda {|it| format_money(it['storagePrice'], 'usd', {sigdig:options[:sigdig]}) } },
228
+ {"NETWORK PRICE" => lambda {|it| format_money(it['networkPrice'], 'usd', {sigdig:options[:sigdig]}) } },
229
+ {"EXTRA PRICE" => lambda {|it| format_money(it['extraPrice'], 'usd', {sigdig:options[:sigdig]}) } },
230
+ {"MTD PRICE" => lambda {|it| format_money(it['runningPrice'], 'usd', {sigdig:options[:sigdig]}) } },
231
+ {"TOTAL PRICE" => lambda {|it|
232
+ format_money(it['totalPrice'], 'usd', {sigdig:options[:sigdig]}) + ((it['totalCost'].to_f > 0 && it['totalCost'] != it['runningCost']) ? " (Projected)" : "")
237
233
  } }
238
234
  ]
239
235
 
240
- if options[:show_prices]
236
+ if options[:show_costs] && json_response['masterAccount'] != false
241
237
  columns += [
242
- {"COMPUTE PRICE" => lambda {|it| format_money(it['computePrice'], 'usd', {sigdig:options[:sigdig]}) } },
243
- # {"MEMORY PRICE" => lambda {|it| format_money(it['memoryPrice'], 'usd', {sigdig:options[:sigdig]}) } },
244
- {"STORAGE PRICE" => lambda {|it| format_money(it['storagePrice'], 'usd', {sigdig:options[:sigdig]}) } },
245
- {"NETWORK PRICE" => lambda {|it| format_money(it['networkPrice'], 'usd', {sigdig:options[:sigdig]}) } },
246
- {"EXTRA PRICE" => lambda {|it| format_money(it['extraPrice'], 'usd', {sigdig:options[:sigdig]}) } },
247
- {"MTD PRICE" => lambda {|it| format_money(it['runningPrice'], 'usd', {sigdig:options[:sigdig]}) } },
248
- {"TOTAL PRICE" => lambda {|it|
249
- format_money(it['totalPrice'], 'usd', {sigdig:options[:sigdig]}) + ((it['totalCost'].to_f > 0 && it['totalCost'] != it['runningCost']) ? " (Projected)" : "")
250
- } }
251
- ]
238
+ {"COMPUTE COST" => lambda {|it| format_money(it['computeCost'], 'usd', {sigdig:options[:sigdig]}) } },
239
+ {"MEMORY COST" => lambda {|it| format_money(it['memoryCost']) } },
240
+ {"STORAGE COST" => lambda {|it| format_money(it['storageCost'], 'usd', {sigdig:options[:sigdig]}) } },
241
+ {"NETWORK COST" => lambda {|it| format_money(it['networkCost'], 'usd', {sigdig:options[:sigdig]}) } },
242
+ {"EXTRA COST" => lambda {|it| format_money(it['extraCost'], 'usd', {sigdig:options[:sigdig]}) } },
243
+ {"MTD COST" => lambda {|it| format_money(it['runningCost'], 'usd', {sigdig:options[:sigdig]}) } },
244
+ {"TOTAL COST" => lambda {|it|
245
+ format_money(it['totalCost'], 'usd', {sigdig:options[:sigdig]}) + ((it['totalCost'].to_f > 0 && it['totalCost'] != it['runningCost']) ? " (Projected)" : "")
246
+ } }
247
+ ]
252
248
  end
253
249
  if options[:show_estimates]
254
250
  columns += [
255
- {"COMPUTE EST." => lambda {|it| format_money(it['estimatedComputeCost'], 'usd', {sigdig:options[:sigdig]}) } },
256
- # {"MEMORY EST." => lambda {|it| format_money(it['estimatedMemoryCost'], 'usd', {sigdig:options[:sigdig]}) } },
257
- {"STORAGE EST." => lambda {|it| format_money(it['estimatedStorageCost'], 'usd', {sigdig:options[:sigdig]}) } },
258
- {"NETWORK EST." => lambda {|it| format_money(it['estimatedNetworkCost'], 'usd', {sigdig:options[:sigdig]}) } },
259
- {"EXTRA EST." => lambda {|it| format_money(it['estimatedExtraCost'], 'usd', {sigdig:options[:sigdig]}) } },
260
- {"MTD EST." => lambda {|it| format_money(it['estimatedRunningCost'], 'usd', {sigdig:options[:sigdig]}) } },
261
- {"TOTAL EST." => lambda {|it|
262
- format_money(it['estimatedTotalCost'], 'usd', {sigdig:options[:sigdig]}) + ((it['estimatedTotalCost'].to_f > 0 && it['estimatedTotalCost'] != it['estimatedRunningCost']) ? " (Projected)" : "")
251
+ {"METERED COMPUTE PRICE" => lambda {|it| format_money(it['estimatedComputePrice'], 'usd', {sigdig:options[:sigdig]}) } },
252
+ {"METERED MEMORY PRICE" => lambda {|it| format_money(it['estimatedMemoryPrice'], 'usd', {sigdig:options[:sigdig]}) } },
253
+ {"METERED STORAGE PRICE" => lambda {|it| format_money(it['estimatedStoragePrice'], 'usd', {sigdig:options[:sigdig]}) } },
254
+ {"METERED NETWORK PRICE" => lambda {|it| format_money(it['estimatedNetworkPrice'], 'usd', {sigdig:options[:sigdig]}) } },
255
+ {"METERED EXTRA PRICE" => lambda {|it| format_money(it['estimatedExtraPrice'], 'usd', {sigdig:options[:sigdig]}) } },
256
+ {"METERED MTD PRICE" => lambda {|it| format_money(it['estimatedRunningPrice'], 'usd', {sigdig:options[:sigdig]}) } },
257
+ {"METERED TOTAL PRICE" => lambda {|it|
258
+ format_money(it['estimatedTotalPrice'], 'usd', {sigdig:options[:sigdig]}) + ((it['estimatedTotalPrice'].to_f > 0 && it['estimatedTotalPrice'] != it['estimatedRunningPrice']) ? " (Projected)" : "")
263
259
  } },
264
260
  ]
261
+ if options[:show_costs] && json_response['masterAccount'] != false
262
+ columns += [
263
+ {"METERED COMPUTE COST" => lambda {|it| format_money(it['estimatedComputeCost'], 'usd', {sigdig:options[:sigdig]}) } },
264
+ {"METERED MEMORY COST" => lambda {|it| format_money(it['estimatedMemoryCost'], 'usd', {sigdig:options[:sigdig]}) } },
265
+ {"METERED STORAGE COST" => lambda {|it| format_money(it['estimatedStorageCost'], 'usd', {sigdig:options[:sigdig]}) } },
266
+ {"METERED NETWORK COST" => lambda {|it| format_money(it['estimatedNetworkCost'], 'usd', {sigdig:options[:sigdig]}) } },
267
+ {"METERED EXTRA COST" => lambda {|it| format_money(it['estimatedExtraCost'], 'usd', {sigdig:options[:sigdig]}) } },
268
+ {"METERED MTD COST" => lambda {|it| format_money(it['estimatedRunningCost'], 'usd', {sigdig:options[:sigdig]}) } },
269
+ {"METERED TOTAL COST" => lambda {|it|
270
+ format_money(it['estimatedTotalCost'], 'usd', {sigdig:options[:sigdig]}) + ((it['estimatedTotalCost'].to_f > 0 && it['estimatedTotalCost'] != it['estimatedRunningCost']) ? " (Projected)" : "")
271
+ } },
272
+ ]
273
+ end
265
274
  end
266
275
  columns += [
267
276
  {"ESTIMATE" => lambda {|it| format_boolean(it['estimate']) } },
@@ -297,18 +306,22 @@ class Morpheus::Cli::InvoicesCommand
297
306
 
298
307
  if invoice_totals
299
308
  cost_rows = [
300
- {label: 'Cost'.upcase, compute: invoice_totals['actualComputeCost'], memory: invoice_totals['actualMemoryCost'], storage: invoice_totals['actualStorageCost'], network: invoice_totals['actualNetworkCost'], license: invoice_totals['actualLicenseCost'], extra: invoice_totals['actualExtraCost'], running: invoice_totals['actualRunningCost'], total: invoice_totals['actualTotalCost']},
309
+ {label: 'Price'.upcase, compute: invoice_totals['actualComputePrice'], memory: invoice_totals['actualMemoryPrice'], storage: invoice_totals['actualStoragePrice'], network: invoice_totals['actualNetworkPrice'], license: invoice_totals['actualLicensePrice'], extra: invoice_totals['actualExtraPrice'], running: invoice_totals['actualRunningPrice'], total: invoice_totals['actualTotalPrice']},
301
310
  ]
302
- if options[:show_prices]
311
+ if options[:show_costs]
303
312
  cost_rows += [
304
- {label: 'Price'.upcase, compute: invoice_totals['actualComputePrice'], memory: invoice_totals['actualMemoryPrice'], storage: invoice_totals['actualStoragePrice'], network: invoice_totals['actualNetworkPrice'], license: invoice_totals['actualLicensePrice'], extra: invoice_totals['actualExtraPrice'], running: invoice_totals['actualRunningPrice'], total: invoice_totals['actualTotalPrice']},
313
+ {label: 'Cost'.upcase, compute: invoice_totals['actualComputeCost'], memory: invoice_totals['actualMemoryCost'], storage: invoice_totals['actualStorageCost'], network: invoice_totals['actualNetworkCost'], license: invoice_totals['actualLicenseCost'], extra: invoice_totals['actualExtraCost'], running: invoice_totals['actualRunningCost'], total: invoice_totals['actualTotalCost']}
305
314
  ]
306
315
  end
307
316
  if options[:show_estimates]
308
317
  cost_rows += [
309
- {label: 'Metered Cost'.upcase, compute: invoice_totals['estimatedComputeCost'], memory: invoice_totals['estimatedMemoryCost'], storage: invoice_totals['estimatedStorageCost'], network: invoice_totals['estimatedNetworkCost'], license: invoice_totals['estimatedLicenseCost'], extra: invoice_totals['estimatedExtraCost'], running: invoice_totals['estimatedRunningCost'], total: invoice_totals['estimatedTotalCost']},
310
- {label: 'Metered Price'.upcase, compute: invoice_totals['estimatedComputePrice'], memory: invoice_totals['estimatedMemoryPrice'], storage: invoice_totals['estimatedStoragePrice'], network: invoice_totals['estimatedNetworkPrice'], license: invoice_totals['estimatedLicensePrice'], extra: invoice_totals['estimatedExtraPrice'], running: invoice_totals['estimatedRunningPrice'], total: invoice_totals['estimatedTotalPrice']},
318
+ {label: 'Metered Price'.upcase, compute: invoice_totals['estimatedComputePrice'], memory: invoice_totals['estimatedMemoryPrice'], storage: invoice_totals['estimatedStoragePrice'], network: invoice_totals['estimatedNetworkPrice'], license: invoice_totals['estimatedLicensePrice'], extra: invoice_totals['estimatedExtraPrice'], running: invoice_totals['estimatedRunningPrice'], total: invoice_totals['estimatedTotalPrice']}
311
319
  ]
320
+ if options[:show_costs]
321
+ cost_rows += [
322
+ {label: 'Metered Cost'.upcase, compute: invoice_totals['estimatedComputeCost'], memory: invoice_totals['estimatedMemoryCost'], storage: invoice_totals['estimatedStorageCost'], network: invoice_totals['estimatedNetworkCost'], license: invoice_totals['estimatedLicenseCost'], extra: invoice_totals['estimatedExtraCost'], running: invoice_totals['estimatedRunningCost'], total: invoice_totals['estimatedTotalCost']}
323
+ ]
324
+ end
312
325
  end
313
326
  cost_columns = {
314
327
  "" => lambda {|it| it[:label] },
@@ -351,16 +364,15 @@ class Morpheus::Cli::InvoicesCommand
351
364
  opts.banner = subcommand_usage("[id]")
352
365
  opts.on('-a', '--all', "Display all details, costs and prices." ) do
353
366
  options[:show_estimates] = true
354
- # options[:show_costs] = true
355
- options[:show_prices] = true
367
+ options[:show_costs] = true
356
368
  options[:max_line_items] = 10000
357
369
  end
358
- opts.on('--prices', '--prices', "Display prices: Total, Compute, Storage, Network, Extra" ) do
359
- options[:show_prices] = true
360
- end
361
- opts.on('--estimates', '--estimates', "Display all estimated costs, from usage info: Compute, Storage, Network, Extra" ) do
370
+ opts.on('--estimates', '--estimates', "Display all estimated prices, from usage metering info: Compute, Memory, Storage, Network, Extra" ) do
362
371
  options[:show_estimates] = true
363
372
  end
373
+ opts.on('--costs', '--costs', "Display Costs in addition to prices" ) do
374
+ options[:show_costs] = true
375
+ end
364
376
  opts.on('--no-line-items', '--no-line-items', "Do not display line items.") do |val|
365
377
  options[:hide_line_items] = true
366
378
  end
@@ -514,25 +526,25 @@ EOT
514
526
  print_results_pagination({total: line_items.size, size: paged_line_items.size}, {:label => "line item", :n_label => "line items"})
515
527
  end
516
528
 
517
- # cost_types = ["Costs"]
518
- # cost_types << "Prices" if options[:show_prices]
519
- # cost_types << "Estimates" if options[:show_estimates]
520
- # print_h2 cost_types.size == 1 ? "Totals" : "Total #{anded_list(cost_types)}"
521
529
  print_h2 "Invoice Totals"
522
530
 
523
531
  cost_rows = [
524
- {label: 'Cost'.upcase, compute: invoice['computeCost'], memory: invoice['memoryCost'], storage: invoice['storageCost'], network: invoice['networkCost'], license: invoice['licenseCost'], extra: invoice['extraCost'], running: invoice['runningCost'], total: invoice['totalCost']},
532
+ {label: 'Price'.upcase, compute: invoice['computePrice'], memory: invoice['memoryPrice'], storage: invoice['storagePrice'], network: invoice['networkPrice'], license: invoice['licensePrice'], extra: invoice['extraPrice'], running: invoice['runningPrice'], total: invoice['totalPrice']},
525
533
  ]
526
- if options[:show_prices]
534
+ if options[:show_costs] # && json_response['masterAccount'] != false
527
535
  cost_rows += [
528
- {label: 'Price'.upcase, compute: invoice['computePrice'], memory: invoice['memoryPrice'], storage: invoice['storagePrice'], network: invoice['networkPrice'], license: invoice['licensePrice'], extra: invoice['extraPrice'], running: invoice['runningPrice'], total: invoice['totalPrice']},
536
+ {label: 'Cost'.upcase, compute: invoice['computeCost'], memory: invoice['memoryCost'], storage: invoice['storageCost'], network: invoice['networkCost'], license: invoice['licenseCost'], extra: invoice['extraCost'], running: invoice['runningCost'], total: invoice['totalCost']},
529
537
  ]
530
538
  end
531
539
  if options[:show_estimates]
532
540
  cost_rows += [
533
- {label: 'Metered Cost'.upcase, compute: invoice['estimatedComputeCost'], memory: invoice['estimatedMemoryCost'], storage: invoice['estimatedStorageCost'], network: invoice['estimatedNetworkCost'], license: invoice['estimatedLicenseCost'], extra: invoice['estimatedExtraCost'], running: invoice['estimatedRunningCost'], total: invoice['estimatedTotalCost']},
534
- {label: 'Metered Price'.upcase, compute: invoice['estimatedComputePrice'], memory: invoice['estimatedMemoryPrice'], storage: invoice['estimatedStoragePrice'], network: invoice['estimatedNetworkPrice'], license: invoice['estimatedLicensePrice'], extra: invoice['estimatedExtraPrice'], running: invoice['estimatedRunningPrice'], total: invoice['estimatedTotalPrice']},
541
+ {label: 'Metered Price'.upcase, compute: invoice['estimatedComputePrice'], memory: invoice['estimatedMemoryPrice'], storage: invoice['estimatedStoragePrice'], network: invoice['estimatedNetworkPrice'], license: invoice['estimatedLicensePrice'], extra: invoice['estimatedExtraPrice'], running: invoice['estimatedRunningPrice'], total: invoice['estimatedTotalPrice']}
535
542
  ]
543
+ if options[:show_costs] # && json_response['masterAccount'] != false
544
+ cost_rows += [
545
+ {label: 'Metered Cost'.upcase, compute: invoice['estimatedComputeCost'], memory: invoice['estimatedMemoryCost'], storage: invoice['estimatedStorageCost'], network: invoice['estimatedNetworkCost'], license: invoice['estimatedLicenseCost'], extra: invoice['estimatedExtraCost'], running: invoice['estimatedRunningCost'], total: invoice['estimatedTotalCost']},
546
+ ]
547
+ end
536
548
  end
537
549
  cost_columns = {
538
550
  "" => lambda {|it| it[:label] },
@@ -694,16 +706,12 @@ EOT
694
706
  opts.on('-a', '--all', "Display all details, costs and prices." ) do
695
707
  options[:show_actual_costs] = true
696
708
  options[:show_costs] = true
697
- options[:show_prices] = true
698
709
  end
699
- # opts.on('--actuals', '--actuals', "Display all actual costs: Compute, Storage, Network, Extra" ) do
710
+ # opts.on('--actuals', '--actuals', "Display all actual costs: Compute, Memory, Storage, Network, Extra" ) do
700
711
  # options[:show_actual_costs] = true
701
712
  # end
702
- # opts.on('--costs', '--costs', "Display all costs: Compute, Storage, Network, Extra" ) do
703
- # options[:show_costs] = true
704
- # end
705
- opts.on('--prices', '--prices', "Display prices: Total, Compute, Storage, Network, Extra" ) do
706
- options[:show_prices] = true
713
+ opts.on('--costs', '--costs', "Display costs in addition to prices" ) do
714
+ options[:show_costs] = true
707
715
  end
708
716
  opts.on('--invoice-id ID', String, "Filter by Invoice ID") do |val|
709
717
  params['invoiceId'] ||= []
@@ -880,9 +888,9 @@ EOT
880
888
  {"USAGE" => lambda {|it| it['itemUsage'] } },
881
889
  {"RATE" => lambda {|it| it['itemRate'] } },
882
890
  {"UNIT" => lambda {|it| it['rateUnit'] } },
883
- {"COST" => lambda {|it| format_money(it['itemCost'], 'usd', {sigdig:options[:sigdig]}) } },
884
- ] + (options[:show_prices] ? [
885
891
  {"PRICE" => lambda {|it| format_money(it['itemPrice'], 'usd', {sigdig:options[:sigdig]}) } },
892
+ ] + (options[:show_costs] ? [
893
+ {"COST" => lambda {|it| format_money(it['itemCost'], 'usd', {sigdig:options[:sigdig]}) } },
886
894
  {"TAX" => lambda {|it| format_money(it['itemTax'], 'usd', {sigdig:options[:sigdig]}) } },
887
895
  ] : []) + [
888
896
  {"ITEM ID" => lambda {|it| truncate_string_right(it['itemId'], 65) } },
@@ -915,9 +923,9 @@ EOT
915
923
  invoice_totals_columns = [
916
924
  {"Items" => lambda {|it| format_number(json_response['meta']['total']) rescue '' } },
917
925
  #{"Usage" => lambda {|it| it['itemUsage'] } },
918
- {"Cost" => lambda {|it| format_money(it['itemCost'], 'usd', {sigdig:options[:sigdig]}) } },
919
- ] + (options[:show_prices] ? [
920
926
  {"Price" => lambda {|it| format_money(it['itemPrice'], 'usd', {sigdig:options[:sigdig]}) } },
927
+ ] + (options[:show_costs] ? [
928
+ {"Cost" => lambda {|it| format_money(it['itemCost'], 'usd', {sigdig:options[:sigdig]}) } },
921
929
  #{"Tax" => lambda {|it| format_money(it['itemTax'], 'usd', {sigdig:options[:sigdig]}) } },
922
930
 
923
931
  ] : [])
@@ -18,8 +18,8 @@ class Morpheus::Cli::KeyPairs
18
18
 
19
19
  def connect(opts)
20
20
  @api_client = establish_remote_appliance_connection(opts)
21
- @accounts_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).accounts
22
- @key_pairs_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).key_pairs
21
+ @accounts_interface = @api_client.accounts
22
+ @key_pairs_interface = @api_client.key_pairs
23
23
  end
24
24
 
25
25
  def handle(args)
@@ -9,7 +9,7 @@ class Morpheus::Cli::LibraryContainerScriptsCommand
9
9
 
10
10
  def connect(opts)
11
11
  @api_client = establish_remote_appliance_connection(opts)
12
- @container_scripts_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).library_container_scripts
12
+ @container_scripts_interface = @api_client.library_container_scripts
13
13
  end
14
14
 
15
15
  def handle(args)
@@ -11,7 +11,7 @@ class Morpheus::Cli::LibraryContainerTemplatesCommand
11
11
 
12
12
  def connect(opts)
13
13
  @api_client = establish_remote_appliance_connection(opts)
14
- @container_templates_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).library_container_templates
14
+ @container_templates_interface = @api_client.library_container_templates
15
15
  end
16
16
 
17
17
  def handle(args)
@@ -18,12 +18,12 @@ class Morpheus::Cli::LibraryContainerTypesCommand
18
18
 
19
19
  def connect(opts)
20
20
  @api_client = establish_remote_appliance_connection(opts)
21
- @library_container_types_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).library_container_types
22
- @library_layouts_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).library_layouts
23
- #@library_instance_types_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).library_instance_types
24
- @provision_types_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).provision_types
25
- @option_types_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).option_types
26
- #@option_type_lists_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).option_type_lists
21
+ @library_container_types_interface = @api_client.library_container_types
22
+ @library_layouts_interface = @api_client.library_layouts
23
+ #@library_instance_types_interface = @api_client.library_instance_types
24
+ @provision_types_interface = @api_client.provision_types
25
+ @option_types_interface = @api_client.option_types
26
+ #@option_type_lists_interface = @api_client.option_type_lists
27
27
  end
28
28
 
29
29
  def handle(args)
@@ -19,10 +19,10 @@ class Morpheus::Cli::LibraryInstanceTypesCommand
19
19
 
20
20
  def connect(opts)
21
21
  @api_client = establish_remote_appliance_connection(opts)
22
- @library_instance_types_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).library_instance_types
23
- @provision_types_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).provision_types
24
- @option_types_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).option_types
25
- @option_type_lists_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).option_type_lists
22
+ @library_instance_types_interface = @api_client.library_instance_types
23
+ @provision_types_interface = @api_client.provision_types
24
+ @option_types_interface = @api_client.option_types
25
+ @option_type_lists_interface = @api_client.option_type_lists
26
26
  end
27
27
 
28
28
  def handle(args)
@@ -21,14 +21,14 @@ class Morpheus::Cli::LibraryLayoutsCommand
21
21
 
22
22
  def connect(opts)
23
23
  @api_client = establish_remote_appliance_connection(opts)
24
- @library_layouts_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).library_layouts
25
- @library_instance_types_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).library_instance_types
24
+ @library_layouts_interface = @api_client.library_layouts
25
+ @library_instance_types_interface = @api_client.library_instance_types
26
26
  @library_container_types_interface = @api_client.library_container_types
27
27
  @spec_templates_interface = @api_client.library_spec_templates
28
28
  @spec_template_types_interface = @api_client.library_spec_template_types
29
- @provision_types_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).provision_types
30
- @option_types_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).option_types
31
- @option_type_lists_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).option_type_lists
29
+ @provision_types_interface = @api_client.provision_types
30
+ @option_types_interface = @api_client.option_types
31
+ @option_type_lists_interface = @api_client.option_type_lists
32
32
  end
33
33
 
34
34
  def handle(args)
@@ -17,10 +17,10 @@ class Morpheus::Cli::LibraryOptionListsCommand
17
17
 
18
18
  def connect(opts)
19
19
  @api_client = establish_remote_appliance_connection(opts)
20
- @library_instance_types_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).library_instance_types
21
- @provision_types_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).provision_types
22
- @option_types_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).option_types
23
- @option_type_lists_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).option_type_lists
20
+ @library_instance_types_interface = @api_client.library_instance_types
21
+ @provision_types_interface = @api_client.provision_types
22
+ @option_types_interface = @api_client.option_types
23
+ @option_type_lists_interface = @api_client.option_type_lists
24
24
  end
25
25
 
26
26
  def handle(args)
@@ -17,10 +17,10 @@ class Morpheus::Cli::LibraryOptionTypesCommand
17
17
 
18
18
  def connect(opts)
19
19
  @api_client = establish_remote_appliance_connection(opts)
20
- @library_instance_types_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).library_instance_types
21
- @provision_types_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).provision_types
22
- @option_types_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).option_types
23
- @option_type_lists_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).option_type_lists
20
+ @library_instance_types_interface = @api_client.library_instance_types
21
+ @provision_types_interface = @api_client.provision_types
22
+ @option_types_interface = @api_client.option_types
23
+ @option_type_lists_interface = @api_client.option_type_lists
24
24
  end
25
25
 
26
26
  def handle(args)
@@ -18,12 +18,12 @@ class Morpheus::Cli::LibraryUpgradesCommand
18
18
 
19
19
  def connect(opts)
20
20
  @api_client = establish_remote_appliance_connection(opts)
21
- @library_container_upgrades_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).library_container_upgrades
22
- @library_layouts_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).library_layouts
23
- @library_instance_types_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).library_instance_types
24
- @provision_types_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).provision_types
25
- @option_types_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).option_types
26
- @option_type_lists_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).option_type_lists
21
+ @library_container_upgrades_interface = @api_client.library_container_upgrades
22
+ @library_layouts_interface = @api_client.library_layouts
23
+ @library_instance_types_interface = @api_client.library_instance_types
24
+ @provision_types_interface = @api_client.provision_types
25
+ @option_types_interface = @api_client.option_types
26
+ @option_type_lists_interface = @api_client.option_type_lists
27
27
  end
28
28
 
29
29
  def handle(args)
@@ -20,8 +20,8 @@ class Morpheus::Cli::License
20
20
 
21
21
  def connect(opts)
22
22
  @api_client = establish_remote_appliance_connection(opts)
23
- @api_client = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url)
24
- @license_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).license
23
+ @api_client = @api_client
24
+ @license_interface = @api_client.license
25
25
  end
26
26
 
27
27
  def handle(args)
@@ -16,7 +16,7 @@ class Morpheus::Cli::LoadBalancers
16
16
 
17
17
  def connect(opts)
18
18
  @api_client = establish_remote_appliance_connection(opts)
19
- @load_balancers_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).load_balancers
19
+ @load_balancers_interface = @api_client.load_balancers
20
20
  end
21
21
 
22
22
 
@@ -77,7 +77,9 @@ EOT
77
77
  # connect(options)
78
78
  @api_client = establish_remote_appliance_connection(options.merge({:no_prompt => true, :skip_verify_access_token => true, :skip_login => true}))
79
79
 
80
- if @remote_appliance[:authenticated]
80
+ if options[:test_only]
81
+ puts "Testing credentials, your current session will not be modified."
82
+ elsif @remote_appliance[:authenticated]
81
83
  puts "You will be automatically logged out of your current session as '#{@remote_appliance[:username]}'"
82
84
  end
83
85
 
@@ -508,7 +508,7 @@ module Morpheus::Cli::ProvisioningHelper
508
508
  if name_prompt['name'].nil? && !options[:name_required]
509
509
  break
510
510
  else
511
- if instances_interface.get({name: name_prompt['name']})['instances'].empty?
511
+ if instances_interface.list({name: name_prompt['name']})['instances'].empty?
512
512
  instance_name = name_prompt['name']
513
513
  else
514
514
  print_red_alert "Name must be unique"
@@ -46,6 +46,10 @@ module Morpheus
46
46
  if options[:help_field_prefix]
47
47
  option_type[:help_field_prefix] = options[:help_field_prefix]
48
48
  end
49
+ # a lot of optionTypes have fieldGroup:'Options' instead of 'default'
50
+ if option_type['fieldGroup'].to_s.downcase == 'options'
51
+ option_type['fieldGroup'] = 'default'
52
+ end
49
53
  end
50
54
  # puts "Options Prompt #{options}"
51
55
  # Sort options by default, group, advanced
@@ -598,7 +602,7 @@ module Morpheus
598
602
  # actually that is redundant, it should already be filtered to matches
599
603
  # and can just do this:
600
604
  # select_option = select_options.size == 1 ? select_options[0] : nil
601
- select_option = select_options.find{|b| (b[value_field] && (b[value_field].to_s == input.to_s)) || ((b[value_field].nil? || b[value_field].empty?) && (input == "")) }
605
+ select_option = select_options.find{|b| (b[value_field] && (b[value_field].to_s == input.to_s)) || ((b[value_field].nil? || b[value_field] == "") && (input == "")) }
602
606
  if select_option.nil?
603
607
  select_option = select_options.find{|b| b['name'] && b['name'] == input }
604
608
  end
@@ -26,7 +26,6 @@ class Morpheus::Cli::PoliciesCommand
26
26
 
27
27
  def connect(opts)
28
28
  @api_client = establish_remote_appliance_connection(opts)
29
- # @policies_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).policies
30
29
  @policies_interface = @api_client.policies
31
30
  @group_policies_interface = @api_client.group_policies
32
31
  @cloud_policies_interface = @api_client.cloud_policies