morpheus-cli 5.3.2.3 → 5.4.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 (212) hide show
  1. checksums.yaml +4 -4
  2. data/Dockerfile +1 -1
  3. data/lib/morpheus/api/account_users_interface.rb +68 -0
  4. data/lib/morpheus/api/api_client.rb +75 -8
  5. data/lib/morpheus/api/audit_interface.rb +9 -0
  6. data/lib/morpheus/api/clouds_interface.rb +4 -11
  7. data/lib/morpheus/api/health_interface.rb +37 -3
  8. data/lib/morpheus/api/instances_interface.rb +39 -5
  9. data/lib/morpheus/api/load_balancer_monitors_interface.rb +9 -0
  10. data/lib/morpheus/api/load_balancer_profiles_interface.rb +9 -0
  11. data/lib/morpheus/api/load_balancer_virtual_servers_interface.rb +9 -0
  12. data/lib/morpheus/api/load_balancers_interface.rb +5 -0
  13. data/lib/morpheus/api/network_dhcp_relays_interface.rb +36 -0
  14. data/lib/morpheus/api/network_dhcp_servers_interface.rb +36 -0
  15. data/lib/morpheus/api/network_edge_clusters_interface.rb +26 -0
  16. data/lib/morpheus/api/network_routers_interface.rb +30 -0
  17. data/lib/morpheus/api/network_servers_interface.rb +98 -0
  18. data/lib/morpheus/api/network_static_routes_interface.rb +36 -0
  19. data/lib/morpheus/api/read_interface.rb +4 -3
  20. data/lib/morpheus/api/rest_interface.rb +5 -4
  21. data/lib/morpheus/api/roles_interface.rb +7 -0
  22. data/lib/morpheus/api/secondary_read_interface.rb +1 -1
  23. data/lib/morpheus/api/secondary_rest_interface.rb +19 -19
  24. data/lib/morpheus/api/storage_server_types_interface.rb +14 -0
  25. data/lib/morpheus/api/storage_servers_interface.rb +9 -0
  26. data/lib/morpheus/api/storage_volume_types_interface.rb +9 -0
  27. data/lib/morpheus/api/storage_volumes_interface.rb +9 -0
  28. data/lib/morpheus/api/users_interface.rb +16 -63
  29. data/lib/morpheus/api/virtual_images_interface.rb +23 -2
  30. data/lib/morpheus/api/virtual_servers_interface.rb +9 -0
  31. data/lib/morpheus/cli/cli_command.rb +274 -19
  32. data/lib/morpheus/cli/cli_registry.rb +56 -2
  33. data/lib/morpheus/cli/{access_token_command.rb → commands/access_token_command.rb} +1 -1
  34. data/lib/morpheus/cli/{account_groups_command.rb → commands/account_groups_command.rb} +0 -8
  35. data/lib/morpheus/cli/{activity_command.rb → commands/activity_command.rb} +0 -0
  36. data/lib/morpheus/cli/commands/{standard/alias_command.rb → alias_command.rb} +1 -4
  37. data/lib/morpheus/cli/{appliance_settings_command.rb → commands/appliance_settings_command.rb} +0 -0
  38. data/lib/morpheus/cli/{approvals_command.rb → commands/approvals_command.rb} +0 -0
  39. data/lib/morpheus/cli/{apps.rb → commands/apps.rb} +17 -89
  40. data/lib/morpheus/cli/{archives_command.rb → commands/archives_command.rb} +0 -6
  41. data/lib/morpheus/cli/commands/audit.rb +188 -0
  42. data/lib/morpheus/cli/{backup_jobs_command.rb → commands/backup_jobs_command.rb} +0 -0
  43. data/lib/morpheus/cli/{backup_settings_command.rb → commands/backup_settings_command.rb} +0 -0
  44. data/lib/morpheus/cli/{backups_command.rb → commands/backups_command.rb} +0 -0
  45. data/lib/morpheus/cli/commands/{standard/benchmark_command.rb → benchmark_command.rb} +0 -3
  46. data/lib/morpheus/cli/{blueprints_command.rb → commands/blueprints_command.rb} +1 -1
  47. data/lib/morpheus/cli/{boot_scripts_command.rb → commands/boot_scripts_command.rb} +0 -3
  48. data/lib/morpheus/cli/{budgets_command.rb → commands/budgets_command.rb} +0 -0
  49. data/lib/morpheus/cli/commands/{standard/cat_command.rb → cat_command.rb} +0 -0
  50. data/lib/morpheus/cli/{catalog_item_types_command.rb → commands/catalog_item_types_command.rb} +0 -0
  51. data/lib/morpheus/cli/{certificates_command.rb → commands/certificates_command.rb} +0 -0
  52. data/lib/morpheus/cli/commands/change_password_command.rb +132 -0
  53. data/lib/morpheus/cli/{cloud_datastores_command.rb → commands/cloud_datastores_command.rb} +0 -4
  54. data/lib/morpheus/cli/{cloud_folders_command.rb → commands/cloud_folders_command.rb} +0 -4
  55. data/lib/morpheus/cli/{cloud_resource_pools_command.rb → commands/cloud_resource_pools_command.rb} +170 -138
  56. data/lib/morpheus/cli/{clouds.rb → commands/clouds.rb} +22 -47
  57. data/lib/morpheus/cli/{clusters.rb → commands/clusters.rb} +86 -49
  58. data/lib/morpheus/cli/commands/{standard/coloring_command.rb → coloring_command.rb} +0 -2
  59. data/lib/morpheus/cli/{containers_command.rb → commands/containers_command.rb} +0 -7
  60. data/lib/morpheus/cli/commands/{standard/curl_command.rb → curl_command.rb} +0 -3
  61. data/lib/morpheus/cli/{cypher_command.rb → commands/cypher_command.rb} +0 -1
  62. data/lib/morpheus/cli/{dashboard_command.rb → commands/dashboard_command.rb} +0 -2
  63. data/lib/morpheus/cli/commands/{standard/debug_command.rb → debug_command.rb} +0 -1
  64. data/lib/morpheus/cli/{deploy.rb → commands/deploy.rb} +0 -1
  65. data/lib/morpheus/cli/{deployments.rb → commands/deployments.rb} +0 -0
  66. data/lib/morpheus/cli/{deploys.rb → commands/deploys.rb} +0 -1
  67. data/lib/morpheus/cli/{doc.rb → commands/doc.rb} +1 -1
  68. data/lib/morpheus/cli/commands/{standard/echo_command.rb → echo_command.rb} +0 -2
  69. data/lib/morpheus/cli/commands/{standard/edit_profile_command.rb → edit_profile_command.rb} +15 -4
  70. data/lib/morpheus/cli/commands/{standard/edit_rc_command.rb → edit_rc_command.rb} +19 -3
  71. data/lib/morpheus/cli/{environments_command.rb → commands/environments_command.rb} +0 -5
  72. data/lib/morpheus/cli/{execute_schedules_command.rb → commands/execute_schedules_command.rb} +0 -0
  73. data/lib/morpheus/cli/{execution_request_command.rb → commands/execution_request_command.rb} +0 -2
  74. data/lib/morpheus/cli/commands/{standard/exit_command.rb → exit_command.rb} +0 -2
  75. data/lib/morpheus/cli/{file_copy_request_command.rb → commands/file_copy_request_command.rb} +0 -4
  76. data/lib/morpheus/cli/{forgot_password.rb → commands/forgot_password.rb} +0 -0
  77. data/lib/morpheus/cli/commands/{standard/get_prompt_command.rb → get_prompt_command.rb} +0 -3
  78. data/lib/morpheus/cli/{groups.rb → commands/groups.rb} +0 -7
  79. data/lib/morpheus/cli/{guidance_command.rb → commands/guidance_command.rb} +1 -1
  80. data/lib/morpheus/cli/{health_command.rb → commands/health_command.rb} +104 -19
  81. data/lib/morpheus/cli/commands/{standard/history_command.rb → history_command.rb} +0 -3
  82. data/lib/morpheus/cli/{hosts.rb → commands/hosts.rb} +15 -25
  83. data/lib/morpheus/cli/{image_builder_command.rb → commands/image_builder_command.rb} +2 -8
  84. data/lib/morpheus/cli/{instance_types.rb → commands/instance_types.rb} +0 -3
  85. data/lib/morpheus/cli/{instances.rb → commands/instances.rb} +473 -150
  86. data/lib/morpheus/cli/{integrations_command.rb → commands/integrations_command.rb} +0 -0
  87. data/lib/morpheus/cli/{invoices_command.rb → commands/invoices_command.rb} +118 -134
  88. data/lib/morpheus/cli/{jobs_command.rb → commands/jobs_command.rb} +0 -0
  89. data/lib/morpheus/cli/{key_pairs.rb → commands/key_pairs.rb} +0 -6
  90. data/lib/morpheus/cli/{library_cluster_layouts_command.rb → commands/library_cluster_layouts_command.rb} +20 -4
  91. data/lib/morpheus/cli/{library_container_scripts_command.rb → commands/library_container_scripts_command.rb} +0 -0
  92. data/lib/morpheus/cli/{library_container_templates_command.rb → commands/library_container_templates_command.rb} +0 -1
  93. data/lib/morpheus/cli/{library_container_types_command.rb → commands/library_container_types_command.rb} +0 -4
  94. data/lib/morpheus/cli/{library_instance_types_command.rb → commands/library_instance_types_command.rb} +0 -4
  95. data/lib/morpheus/cli/{library_layouts_command.rb → commands/library_layouts_command.rb} +0 -4
  96. data/lib/morpheus/cli/{library_option_lists_command.rb → commands/library_option_lists_command.rb} +3 -7
  97. data/lib/morpheus/cli/{library_option_types_command.rb → commands/library_option_types_command.rb} +0 -4
  98. data/lib/morpheus/cli/{library_spec_templates_command.rb → commands/library_spec_templates_command.rb} +0 -1
  99. data/lib/morpheus/cli/{library_upgrades_command.rb → commands/library_upgrades_command.rb} +0 -4
  100. data/lib/morpheus/cli/{license.rb → commands/license.rb} +0 -3
  101. data/lib/morpheus/cli/commands/load_balancer_monitors.rb +71 -0
  102. data/lib/morpheus/cli/commands/load_balancer_pools.rb +91 -0
  103. data/lib/morpheus/cli/commands/load_balancer_profiles.rb +65 -0
  104. data/lib/morpheus/cli/{load_balancer_types.rb → commands/load_balancer_types.rb} +9 -8
  105. data/lib/morpheus/cli/commands/load_balancer_virtual_servers.rb +156 -0
  106. data/lib/morpheus/cli/commands/load_balancers.rb +176 -0
  107. data/lib/morpheus/cli/commands/{standard/log_level_command.rb → log_level_command.rb} +0 -3
  108. data/lib/morpheus/cli/{log_settings_command.rb → commands/log_settings_command.rb} +0 -0
  109. data/lib/morpheus/cli/{login.rb → commands/login.rb} +0 -5
  110. data/lib/morpheus/cli/commands/logout.rb +63 -0
  111. data/lib/morpheus/cli/{logs_command.rb → commands/logs_command.rb} +0 -3
  112. data/lib/morpheus/cli/commands/{standard/man_command.rb → man_command.rb} +0 -2
  113. data/lib/morpheus/cli/{monitoring_alerts_command.rb → commands/monitoring_alerts_command.rb} +0 -7
  114. data/lib/morpheus/cli/{monitoring_apps_command.rb → commands/monitoring_apps_command.rb} +0 -1
  115. data/lib/morpheus/cli/{monitoring_checks_command.rb → commands/monitoring_checks_command.rb} +2 -1
  116. data/lib/morpheus/cli/{monitoring_contacts_command.rb → commands/monitoring_contacts_command.rb} +0 -7
  117. data/lib/morpheus/cli/{monitoring_groups_command.rb → commands/monitoring_groups_command.rb} +0 -1
  118. data/lib/morpheus/cli/{monitoring_incidents_command.rb → commands/monitoring_incidents_command.rb} +0 -1
  119. data/lib/morpheus/cli/commands/network_dhcp_relays_command.rb +416 -0
  120. data/lib/morpheus/cli/commands/network_dhcp_servers_command.rb +407 -0
  121. data/lib/morpheus/cli/{network_domains_command.rb → commands/network_domains_command.rb} +0 -4
  122. data/lib/morpheus/cli/commands/network_edge_clusters_command.rb +329 -0
  123. data/lib/morpheus/cli/commands/network_firewalls_command.rb +823 -0
  124. data/lib/morpheus/cli/{network_groups_command.rb → commands/network_groups_command.rb} +0 -4
  125. data/lib/morpheus/cli/{network_pool_servers_command.rb → commands/network_pool_servers_command.rb} +0 -4
  126. data/lib/morpheus/cli/{network_pools_command.rb → commands/network_pools_command.rb} +0 -4
  127. data/lib/morpheus/cli/{network_proxies_command.rb → commands/network_proxies_command.rb} +0 -4
  128. data/lib/morpheus/cli/{network_routers_command.rb → commands/network_routers_command.rb} +387 -57
  129. data/lib/morpheus/cli/{network_services_command.rb → commands/network_services_command.rb} +0 -4
  130. data/lib/morpheus/cli/commands/network_static_routes_command.rb +446 -0
  131. data/lib/morpheus/cli/commands/network_transport_zones_command.rb +452 -0
  132. data/lib/morpheus/cli/{networks_command.rb → commands/networks_command.rb} +21 -21
  133. data/lib/morpheus/cli/commands/open_command.rb +30 -0
  134. data/lib/morpheus/cli/commands/options.rb +98 -0
  135. data/lib/morpheus/cli/{packages_command.rb → commands/packages_command.rb} +0 -2
  136. data/lib/morpheus/cli/{ping.rb → commands/ping.rb} +0 -7
  137. data/lib/morpheus/cli/{policies_command.rb → commands/policies_command.rb} +1 -8
  138. data/lib/morpheus/cli/{power_schedules_command.rb → commands/power_schedules_command.rb} +0 -0
  139. data/lib/morpheus/cli/{preseed_scripts_command.rb → commands/preseed_scripts_command.rb} +0 -3
  140. data/lib/morpheus/cli/{price_sets_command.rb → commands/price_sets_command.rb} +0 -0
  141. data/lib/morpheus/cli/{prices_command.rb → commands/prices_command.rb} +7 -7
  142. data/lib/morpheus/cli/{processes_command.rb → commands/processes_command.rb} +0 -1
  143. data/lib/morpheus/cli/{projects_command.rb → commands/projects_command.rb} +0 -0
  144. data/lib/morpheus/cli/{provisioning_licenses_command.rb → commands/provisioning_licenses_command.rb} +0 -0
  145. data/lib/morpheus/cli/{provisioning_settings_command.rb → commands/provisioning_settings_command.rb} +0 -0
  146. data/lib/morpheus/cli/{recent_activity_command.rb → commands/recent_activity_command.rb} +0 -0
  147. data/lib/morpheus/cli/{remote.rb → commands/remote.rb} +5 -9
  148. data/lib/morpheus/cli/{reports_command.rb → commands/reports_command.rb} +0 -2
  149. data/lib/morpheus/cli/commands/{standard/rm_command.rb → rm_command.rb} +0 -0
  150. data/lib/morpheus/cli/{roles.rb → commands/roles.rb} +245 -40
  151. data/lib/morpheus/cli/{search_command.rb → commands/search_command.rb} +0 -0
  152. data/lib/morpheus/cli/{security_group_rules.rb → commands/security_group_rules.rb} +0 -5
  153. data/lib/morpheus/cli/{security_groups.rb → commands/security_groups.rb} +0 -6
  154. data/lib/morpheus/cli/{service_catalog_command.rb → commands/service_catalog_command.rb} +0 -0
  155. data/lib/morpheus/cli/{service_plans_command.rb → commands/service_plans_command.rb} +0 -0
  156. data/lib/morpheus/cli/commands/{standard/set_prompt_command.rb → set_prompt_command.rb} +0 -3
  157. data/lib/morpheus/cli/{setup.rb → commands/setup.rb} +0 -0
  158. data/lib/morpheus/cli/{shell.rb → commands/shell.rb} +4 -105
  159. data/lib/morpheus/cli/commands/{standard/sleep_command.rb → sleep_command.rb} +0 -2
  160. data/lib/morpheus/cli/commands/{standard/source_command.rb → source_command.rb} +0 -2
  161. data/lib/morpheus/cli/commands/{standard/ssl_verification_command.rb → ssl_verification_command.rb} +0 -3
  162. data/lib/morpheus/cli/{storage_providers_command.rb → commands/storage_providers_command.rb} +0 -4
  163. data/lib/morpheus/cli/commands/storage_server_types.rb +50 -0
  164. data/lib/morpheus/cli/commands/storage_servers.rb +122 -0
  165. data/lib/morpheus/cli/commands/storage_volume_types.rb +50 -0
  166. data/lib/morpheus/cli/commands/storage_volumes.rb +103 -0
  167. data/lib/morpheus/cli/{subnets_command.rb → commands/subnets_command.rb} +7 -6
  168. data/lib/morpheus/cli/{tasks.rb → commands/tasks.rb} +25 -6
  169. data/lib/morpheus/cli/commands/{standard/tee_command.rb → tee_command.rb} +0 -0
  170. data/lib/morpheus/cli/{tenants_command.rb → commands/tenants_command.rb} +1 -8
  171. data/lib/morpheus/cli/commands/{standard/update_command.rb → update_command.rb} +0 -1
  172. data/lib/morpheus/cli/{usage_command.rb → commands/usage_command.rb} +0 -0
  173. data/lib/morpheus/cli/{user_groups_command.rb → commands/user_groups_command.rb} +1 -2
  174. data/lib/morpheus/cli/{user_settings_command.rb → commands/user_settings_command.rb} +2 -1
  175. data/lib/morpheus/cli/{user_sources_command.rb → commands/user_sources_command.rb} +1 -2
  176. data/lib/morpheus/cli/{users.rb → commands/users.rb} +28 -35
  177. data/lib/morpheus/cli/{vdi_allocations_command.rb → commands/vdi_allocations_command.rb} +0 -0
  178. data/lib/morpheus/cli/{vdi_apps_command.rb → commands/vdi_apps_command.rb} +0 -0
  179. data/lib/morpheus/cli/{vdi_command.rb → commands/vdi_command.rb} +0 -0
  180. data/lib/morpheus/cli/{vdi_gateways_command.rb → commands/vdi_gateways_command.rb} +0 -0
  181. data/lib/morpheus/cli/{vdi_pools_command.rb → commands/vdi_pools_command.rb} +4 -1
  182. data/lib/morpheus/cli/commands/{standard/version_command.rb → version_command.rb} +0 -0
  183. data/lib/morpheus/cli/commands/view.rb +102 -0
  184. data/lib/morpheus/cli/{virtual_images.rb → commands/virtual_images.rb} +251 -33
  185. data/lib/morpheus/cli/{whitelabel_settings_command.rb → commands/whitelabel_settings_command.rb} +0 -1
  186. data/lib/morpheus/cli/{whoami.rb → commands/whoami.rb} +0 -4
  187. data/lib/morpheus/cli/{wiki_command.rb → commands/wiki_command.rb} +0 -5
  188. data/lib/morpheus/cli/{workflows.rb → commands/workflows.rb} +0 -3
  189. data/lib/morpheus/cli/mixins/accounts_helper.rb +5 -5
  190. data/lib/morpheus/cli/mixins/load_balancers_helper.rb +26 -6
  191. data/lib/morpheus/cli/mixins/logs_helper.rb +1 -1
  192. data/lib/morpheus/cli/mixins/print_helper.rb +51 -18
  193. data/lib/morpheus/cli/mixins/processes_helper.rb +1 -2
  194. data/lib/morpheus/cli/mixins/provisioning_helper.rb +167 -110
  195. data/lib/morpheus/cli/mixins/rest_command.rb +268 -94
  196. data/lib/morpheus/cli/mixins/secondary_rest_command.rb +668 -0
  197. data/lib/morpheus/cli/mixins/storage_servers_helper.rb +156 -0
  198. data/lib/morpheus/cli/mixins/storage_volumes_helper.rb +119 -0
  199. data/lib/morpheus/cli/option_parser.rb +25 -17
  200. data/lib/morpheus/cli/option_types.rb +137 -52
  201. data/lib/morpheus/cli/version.rb +1 -1
  202. data/lib/morpheus/cli.rb +6 -128
  203. data/lib/morpheus/ext/string.rb +29 -6
  204. data/lib/morpheus/routes.rb +238 -0
  205. data/lib/morpheus/terminal.rb +5 -6
  206. data/lib/morpheus/util.rb +6 -1
  207. data/morpheus-cli.gemspec +1 -1
  208. metadata +183 -149
  209. data/lib/morpheus/cli/change_password_command.rb +0 -147
  210. data/lib/morpheus/cli/library.rb +0 -1
  211. data/lib/morpheus/cli/load_balancers.rb +0 -245
  212. data/lib/morpheus/cli/logout.rb +0 -81
@@ -1,7 +1,7 @@
1
1
  class String
2
2
 
3
3
  def pluralize
4
- value = self
4
+ value = self.dup
5
5
  if value == ""
6
6
  value
7
7
  elsif value[-1].chr == "y"
@@ -18,7 +18,7 @@ class String
18
18
  end
19
19
 
20
20
  def singularize
21
- value = self
21
+ value = self.dup
22
22
  if value == ""
23
23
  value
24
24
  elsif value.size > 3 && value[-3..-1] == "ies"
@@ -27,15 +27,38 @@ class String
27
27
  value[0..-3]
28
28
  elsif value[-1] == "s"
29
29
  value[0..-2]
30
+ else
31
+ value
30
32
  end
31
33
  end
32
34
 
33
- def dasherize
34
- self.gsub(" ", "-").gsub("_", "-")
35
+ def underscore
36
+ value = self.dup
37
+ value.gsub!(/::/, '/')
38
+ value.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
39
+ value.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
40
+ value.tr!("-", "_")
41
+ value.tr!(" ", "_")
42
+ value.downcase!
43
+ value
44
+ end
45
+
46
+ def camelcase
47
+ value = self.underscore.gsub(/\_([a-z])/) do $1.upcase end
48
+ value = value[0, 1].downcase + value[1..-1]
49
+ value
35
50
  end
36
51
 
37
- def underscoreize
38
- self.gsub(" ", "_").gsub("-", "_")
52
+ def upcamelcase
53
+ self.camelcase.capitalize
54
+ end
55
+
56
+ def titleize
57
+ self.underscore.split("_").map(&:capitalize).join(" ")
58
+ end
59
+
60
+ def dasherize
61
+ self.underscore.gsub("_", "-")
39
62
  end
40
63
 
41
64
  end
@@ -0,0 +1,238 @@
1
+ # Routes is a module to provide a way to look up routes in the Morpheus UI.
2
+ # Examples:
3
+ # Routes.lookup("users") == "/admin/users"
4
+ # Routes.lookup("instances") == "/provisioning/instances"
5
+ #
6
+ # puts "All routes", Morpheus::Routes.routes
7
+ #
8
+ module Morpheus::Routes
9
+
10
+ # A static site map for the Morpheus UI.
11
+ # todo: move to YAML or load from api
12
+ SITE_MAP = {
13
+ operations: {
14
+ dashboard: {},
15
+ reports: {},
16
+ analytics: {},
17
+ guidance: {},
18
+ wiki: {},
19
+ costing: {
20
+ budgets: {},
21
+ invoices: {},
22
+ usage: {},
23
+ },
24
+ approvals: {},
25
+ activity: {},
26
+ alarms: {},
27
+ },
28
+ provisioning: {
29
+ instances: {},
30
+ apps: {},
31
+ catalog: {},
32
+ jobs: {},
33
+ executions: {},
34
+ code: {
35
+ respositories: {},
36
+ deployments: {},
37
+ # integrations: {}, # Integrations
38
+ },
39
+ },
40
+ library: {
41
+ automation: [
42
+ "#!tasks",
43
+ "#!workflows",
44
+ "#!thresholds",
45
+ "#!power-schedules",
46
+ "#!execute-schedules",
47
+ ],
48
+ blueprints: [
49
+ "#instance-types",
50
+ "#!instance-type-layouts",
51
+ "#!container-types",
52
+ "#!app-templates", # App Blueprints (blueprints)
53
+ "#!catalog-items",
54
+ "#!compute-type-layouts", # Cluster Layouts
55
+ ],
56
+ :'virtual-images' => {},
57
+ options: [
58
+ "#!option-type-lists", # Option Lists
59
+ ],
60
+ templates: [
61
+ "#!specs",
62
+ "#!files",
63
+ "#!scripts",
64
+ "#!security-specs",
65
+ ],
66
+ services: {}, # Integrations
67
+
68
+ },
69
+ infrastructure: {
70
+ groups: {},
71
+ clouds: {},
72
+ clusters: {},
73
+ servers: {}, # Hosts (still used for loading by id)
74
+ inventory: [ # Compute
75
+ "#!hosts",
76
+ "#!virtual-machines",
77
+ "#!containers",
78
+ "#!resources",
79
+ "#!bare-metal",
80
+ ],
81
+ networks: {},
82
+ :'load-balancers' => {},
83
+ storage: {
84
+ buckets: {},
85
+ shares: {}, # File Shares
86
+ volumes: {},
87
+ :'data-stores' => {}, # ugh, should be datastores
88
+ servers: {}, # Storage Servers
89
+ },
90
+ # :'keys-and-certs' => {},
91
+ :'key-pairs' => {},
92
+ certificates: {},
93
+ },
94
+ backups: {
95
+
96
+ },
97
+ monitoring: {
98
+ status: {},
99
+ logs: {},
100
+ apps: {},
101
+ checks: {},
102
+ groups: {},
103
+ incidents: {},
104
+ contacts: {},
105
+ :'alert-rules' => {},
106
+ },
107
+ tools: {
108
+ cypher: {},
109
+ archives: {
110
+ buckets: {},
111
+ },
112
+ :'image-builder' => {},
113
+ :vdi => {}
114
+ },
115
+ admin: {
116
+ accounts: {}, # Tenants
117
+ :'service-plans' => [
118
+ "#prices",
119
+ "#pricesets"
120
+ ],
121
+ roles: {},
122
+ users: {},
123
+ :'user-groups' => {},
124
+ integrations: {},
125
+ policies: {},
126
+ health: ["logs"],
127
+ settings: {},
128
+ },
129
+ :'user-settings' => {}, # User Settings (Profile)
130
+ } unless defined?(SITE_MAP)
131
+
132
+ # A list of routes generated from the site map and cached
133
+ @@routes = nil
134
+
135
+ # @return an array of well known Morpheus UI routes.
136
+ def self.routes
137
+ if !@@routes
138
+ @@routes = build_routes(SITE_MAP)
139
+ end
140
+ return @@routes
141
+ end
142
+
143
+ # lookup a route in the morpheus UI
144
+ # @param path [String] The input to lookup a route for eg. "dashboard"
145
+ # @return full path like "/operations/dashboard"
146
+ def self.lookup(input)
147
+ path = input.to_s
148
+ if path.start_with?("/")
149
+ # absolute path is being looked up
150
+ return path
151
+ else
152
+ # todo: make this smarter, regex, case insensitive, etc
153
+ # find the one with smallest match index
154
+
155
+ # map well known aliases
156
+ case(path.underscore.singularize)
157
+ when "server","host","vm","virtual-machine"
158
+ # actually should be "/infrastructure/inventory" unless id is passed, show route uses /servers though
159
+ path = "/infrastructure/servers"
160
+ when "compute"
161
+ path = "/infrastructure/inventory"
162
+ when "tenant"
163
+ path = "/admin/accounts"
164
+ end
165
+ # dasherize path and attempt to match the plural first
166
+ plural_path = path.pluralize
167
+ paths = [path.dasherize]
168
+ if plural_path != path
169
+ paths.unshift(plural_path.dasherize)
170
+ end
171
+
172
+ best_route = nil
173
+ best_index = nil
174
+ best_prefix_words = nil
175
+ paths.each do |p|
176
+ if best_route.nil?
177
+ self.routes.each do |it|
178
+ match_index = it.index(p)
179
+ if match_index
180
+ prefix_route = match_index == 0 ? "" : it[0..(match_index-1)]
181
+ prefix_words = prefix_route.split("/")
182
+ #if best_index.nil? || match_index < best_index
183
+ if best_prefix_words.nil? || prefix_words.size < best_prefix_words.size
184
+ best_route = it
185
+ best_index = match_index
186
+ best_prefix_words = prefix_words
187
+ end
188
+ end
189
+ end
190
+ end
191
+ end
192
+ if best_route
193
+ return best_route
194
+ else
195
+ # no match found
196
+ return nil
197
+ end
198
+ end
199
+
200
+ end
201
+
202
+ protected
203
+
204
+ # build_routes constructs an array of routes (paths)
205
+ # This traversing the route map recursively and appends paths to output
206
+ # @params route_map [Hash] map of routes
207
+ # @params context [String] the current content
208
+ # @params output [Array] the list of route paths being constructed for return
209
+ # @return array like ["/operations", "/operations/dashboard", "/admin", "/etc"]
210
+ def self.build_routes(route_map, context="", output = nil)
211
+ if output.nil?
212
+ output = []
213
+ end
214
+ route_map.each do |k,v|
215
+ leaf_path = "#{context}/#{k}"
216
+ output << leaf_path
217
+ if v.is_a?(Hash)
218
+ build_routes(v, leaf_path, output)
219
+ elsif v.is_a?(Array)
220
+ v.each do |obj|
221
+ if obj.is_a?(Hash)
222
+ build_routes(obj, leaf_path, output)
223
+ elsif obj.is_a?(Symbol) || obj.is_a?(String)
224
+ # route leaf type not handled
225
+ output << "#{leaf_path}/#{obj}"
226
+ else
227
+ # route leaf type not handled
228
+ end
229
+ end
230
+ else
231
+ # route leaf type not handled
232
+ end
233
+ end
234
+ return output
235
+ end
236
+
237
+
238
+ end
@@ -1,15 +1,13 @@
1
- #!/usr/bin/env ruby
2
- require 'term/ansicolor'
3
- require 'optparse'
4
1
  require 'morpheus/cli'
2
+ require 'morpheus/benchmarking'
3
+ require 'morpheus/logging'
5
4
  require 'morpheus/rest_client'
6
5
  require 'morpheus/cli/cli_registry'
7
6
  require 'morpheus/cli/dot_file'
8
7
  require 'morpheus/cli/error_handler'
9
8
  require 'morpheus/cli/expression_parser'
10
- require 'morpheus/logging'
11
- require 'morpheus/benchmarking'
12
- require 'morpheus/cli'
9
+ require 'morpheus/cli/option_parser'
10
+ require 'term/ansicolor'
13
11
 
14
12
  module Morpheus
15
13
 
@@ -478,6 +476,7 @@ module Morpheus
478
476
 
479
477
  # shell is a Singleton command class
480
478
  if args[0] == "shell"
479
+ require 'morpheus/cli/commands/shell'
481
480
  result = Morpheus::Cli::Shell.instance.handle(args[1..-1])
482
481
  else
483
482
  #result = Morpheus::Cli::CliRegistry.exec_expression(formatted_cmd)
data/lib/morpheus/util.rb CHANGED
@@ -19,6 +19,11 @@ module Morpheus::Util
19
19
 
20
20
  def self.open_url(url)
21
21
  cmd = open_url_command(url)
22
- return system(cmd)
22
+ result = system(cmd)
23
+ if result
24
+ return 0, nil
25
+ else
26
+ return $?.exitstatus, "system command '#{cmd}' exited non-zero"
27
+ end
23
28
  end
24
29
  end
data/morpheus-cli.gemspec CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.required_ruby_version = '>= 2.5.1' # according to http.rb doc
22
- spec.add_development_dependency "bundler", "~> 1.6"
22
+ spec.add_development_dependency "bundler", "~> 2.2"
23
23
  spec.add_development_dependency "rake"
24
24
  spec.add_dependency 'term-ansicolor', '~> 1.3.0'
25
25
  spec.add_dependency "rest-client", "2.0.2"