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
@@ -33,14 +33,21 @@ module Morpheus
33
33
  end
34
34
  end
35
35
 
36
+ # supresses prompting unless --prompt has been passed
36
37
  def self.no_prompt(option_types, options={}, api_client=nil,api_params={})
37
- prompt(option_types, options, api_client, api_params, true)
38
+ if options[:always_prompt]
39
+ prompt(option_types, options, api_client, api_params)
40
+ else
41
+ prompt(option_types, options, api_client, api_params, true)
42
+ end
38
43
  end
39
44
 
40
45
  def self.prompt(option_types, options={}, api_client=nil, api_params={}, no_prompt=false, paging_enabled=false)
41
46
  paging_enabled = false if Morpheus::Cli.windows?
47
+ no_prompt = no_prompt || options[:no_prompt]
42
48
  results = {}
43
49
  options = options || {}
50
+
44
51
  # inject cli only stuff into option_types (should clone() here)
45
52
  option_types.each do |option_type|
46
53
  if options[:help_field_prefix]
@@ -54,19 +61,17 @@ module Morpheus
54
61
  # puts "Options Prompt #{options}"
55
62
  # Sort options by default, group, advanced
56
63
  cur_field_group = 'default'
57
- (
58
- option_types.reject {|it| (it['fieldGroup'] || 'default') != 'default'}.sort {|a,b| a['displayOrder'].to_i <=> b['displayOrder'].to_i} +
59
- option_types.reject {|it| ['default', 'advanced'].include?(it['fieldGroup'] || 'default')}.sort{|a,b| a['displayOrder'] <=> b['displayOrder']}.group_by{|it| it['fieldGroup']}.values.collect { |it| it.sort{|a,b| a['displayOrder'].to_i <=> b['displayOrder'].to_i}}.flatten +
60
- option_types.reject {|it| it['fieldGroup'] != 'advanced'}.sort {|a,b| a['displayOrder'].to_i <=> b['displayOrder'].to_i}
61
- ).each do |option_type|
64
+ self.sorted_option_types(option_types).each do |option_type|
62
65
  context_map = results
63
66
  value = nil
64
- value_found=false
67
+ value_found = false
68
+ field_group = (option_type['fieldGroup'] || 'default').to_s.sub(/options\Z/i, "").strip # avoid "ADVANCED OPTION OPTIONS"
65
69
 
66
- if cur_field_group != (option_type['fieldGroup'] || 'default')
67
- cur_field_group = option_type['fieldGroup']
68
- cur_field_group = cur_field_group.to_s.sub(/options\Z/i, "").strip # avoid "ADVANCED OPTION OPTIONS"
69
- print "\n#{cur_field_group.upcase} OPTIONS\n#{"=" * ("#{cur_field_group} OPTIONS".length)}\n\n"
70
+ if cur_field_group != field_group
71
+ cur_field_group = field_group
72
+ if !no_prompt
73
+ print "\n#{cur_field_group.upcase} OPTIONS\n#{"=" * ("#{cur_field_group} OPTIONS".length)}\n\n"
74
+ end
70
75
  end
71
76
 
72
77
  # How about this instead?
@@ -102,10 +107,10 @@ module Morpheus
102
107
  end
103
108
 
104
109
  found_dep_value = match_type == 'all' ? true : false
105
- visible_option_check_value.split(',').each do |value|
110
+ visible_option_check_value.sub(',', ' ').split(' ').each do |value|
106
111
  parts = value.split(':')
107
112
  depends_on_code = parts[0]
108
- depends_on_value = parts.count > 1 ? parts[1].to_s.strip : '.'
113
+ depends_on_value = parts.count > 1 ? parts[1].to_s.strip : nil
109
114
  depends_on_option_type = option_types.find {|it| it["code"] == depends_on_code }
110
115
  if !depends_on_option_type
111
116
  depends_on_option_type = option_types.find {|it|
@@ -115,13 +120,22 @@ module Morpheus
115
120
 
116
121
  if depends_on_option_type
117
122
  depends_on_field_key = depends_on_option_type['fieldContext'].nil? || depends_on_option_type['fieldContext'].empty? ? "#{depends_on_option_type['fieldName']}" : "#{depends_on_option_type['fieldContext']}.#{depends_on_option_type['fieldName']}"
118
- field_value = get_object_value(results, depends_on_field_key) || get_object_value(options, depends_on_field_key)
123
+ else
124
+ depends_on_field_key = depends_on_code
125
+ end
119
126
 
120
- if !field_value.nil? && field_value.match?(depends_on_value)
121
- found_dep_value = true if match_type != 'all'
122
- else
123
- found_dep_value = false if match_type == 'all'
124
- end
127
+ field_value = get_object_value(results, depends_on_field_key) ||
128
+ get_object_value(options, depends_on_field_key) ||
129
+ get_object_value(api_params, depends_on_field_key)
130
+
131
+ if field_value.nil? && !options['_object_key'].nil?
132
+ field_value = get_object_value({options['_object_key'] => results}, depends_on_field_key)
133
+ end
134
+
135
+ if !field_value.nil? && (depends_on_value.nil? || depends_on_value.empty? || field_value.to_s.match?(depends_on_value))
136
+ found_dep_value = true if match_type != 'all'
137
+ else
138
+ found_dep_value = false if match_type == 'all'
125
139
  end
126
140
  end
127
141
  next if !found_dep_value
@@ -141,6 +155,10 @@ module Morpheus
141
155
  context_map = context_map[ns.to_s]
142
156
  end
143
157
 
158
+ # build parameters for option source api request
159
+ option_params = (option_type['noParams'] ? {} : (api_params || {}).merge(results))
160
+ option_params.merge!(option_type['optionParams']) if option_type['optionParams']
161
+
144
162
  # use the value passed in the options map
145
163
  if cur_namespace.respond_to?('key?') && cur_namespace.key?(field_name)
146
164
  value = cur_namespace[field_name]
@@ -151,25 +169,25 @@ module Morpheus
151
169
  end
152
170
  # these select prompts should just fall down through below, with the extra params no_prompt, use_value
153
171
  elsif option_type['type'] == 'select'
154
- value = select_prompt(option_type.merge({'defaultValue' => value, 'defaultInputValue' => input_value}), api_client, (option_type['noParams'] ? {} : (api_params || {}).merge(results)), true)
172
+ value = select_prompt(option_type.merge({'defaultValue' => value, 'defaultInputValue' => input_value}), api_client, option_params, true)
155
173
  elsif option_type['type'] == 'multiSelect'
156
174
  # support value as csv like "thing1, thing2"
157
175
  value_list = value.is_a?(String) ? value.parse_csv.collect {|v| v ? v.to_s.strip : v } : [value].flatten
158
176
  input_value_list = input_value.is_a?(String) ? input_value.parse_csv.collect {|v| v ? v.to_s.strip : v } : [input_value].flatten
159
177
  select_value_list = []
160
178
  value_list.each_with_index do |v, i|
161
- select_value_list << select_prompt(option_type.merge({'defaultValue' => v, 'defaultInputValue' => input_value_list[i]}), api_client, (option_type['noParams'] ? {} : (api_params || {}).merge(results)), true)
179
+ select_value_list << select_prompt(option_type.merge({'defaultValue' => v, 'defaultInputValue' => input_value_list[i]}), api_client, option_params, true)
162
180
  end
163
181
  value = select_value_list
164
182
  elsif option_type['type'] == 'typeahead'
165
- value = typeahead_prompt(option_type.merge({'defaultValue' => value, 'defaultInputValue' => input_value}), api_client, (option_type['noParams'] ? {} : (api_params || {}).merge(results)), true)
183
+ value = typeahead_prompt(option_type.merge({'defaultValue' => value, 'defaultInputValue' => input_value}), api_client, option_params, true)
166
184
  elsif option_type['type'] == 'multiTypeahead'
167
185
  # support value as csv like "thing1, thing2"
168
186
  value_list = value.is_a?(String) ? value.parse_csv.collect {|v| v ? v.to_s.strip : v } : [value].flatten
169
187
  input_value_list = input_value.is_a?(String) ? input_value.parse_csv.collect {|v| v ? v.to_s.strip : v } : [input_value].flatten
170
188
  select_value_list = []
171
189
  value_list.each_with_index do |v, i|
172
- select_value_list << typeahead_prompt(option_type.merge({'defaultValue' => v, 'defaultInputValue' => input_value_list[i]}), api_client, (option_type['noParams'] ? {} : (api_params || {}).merge(results)), true)
190
+ select_value_list << typeahead_prompt(option_type.merge({'defaultValue' => v, 'defaultInputValue' => input_value_list[i]}), api_client, option_params, true)
173
191
  end
174
192
  value = select_value_list
175
193
  end
@@ -185,7 +203,6 @@ module Morpheus
185
203
  end
186
204
  # no_prompt means skip prompting and instead
187
205
  # use default value or error if a required option is not present
188
- no_prompt = no_prompt || options[:no_prompt]
189
206
  if no_prompt
190
207
  if !value_found
191
208
  if option_type['defaultValue'] != nil && !['select', 'multiSelect','typeahead','multiTypeahead'].include?(option_type['type'])
@@ -196,11 +213,11 @@ module Morpheus
196
213
  # select type is special because it supports skipSingleOption
197
214
  # and prints the available options on error
198
215
  if ['select', 'multiSelect'].include?(option_type['type'])
199
- value = select_prompt(option_type, api_client, (option_type['noParams'] ? {} : (api_params || {}).merge(results)), true)
216
+ value = select_prompt(option_type, api_client, option_params, true)
200
217
  value_found = !!value
201
218
  end
202
219
  if ['typeahead', 'multiTypeahead'].include?(option_type['type'])
203
- value = typeahead_prompt(option_type, api_client, (option_type['noParams'] ? {} : (api_params || {}).merge(results)), true)
220
+ value = typeahead_prompt(option_type, api_client, option_params, true)
204
221
  value_found = !!value
205
222
  end
206
223
  if !value_found
@@ -237,11 +254,11 @@ module Morpheus
237
254
  # I suppose the entered value should take precedence
238
255
  # api_params = api_params.merge(options) # this might be good enough
239
256
  # dup it
240
- value = select_prompt(option_type, api_client, (option_type['noParams'] ? {} : (api_params || {}).merge(results)), options[:no_prompt], nil, paging_enabled)
257
+ value = select_prompt(option_type, api_client, option_params, options[:no_prompt], nil, paging_enabled)
241
258
  if value && option_type['type'] == 'multiSelect'
242
259
  value = [value]
243
260
  while self.confirm("Add another #{option_type['fieldLabel']}?", {:default => false}) do
244
- if addn_value = select_prompt(option_type, api_client, (option_type['noParams'] ? {} : (api_params || {}).merge(results)), options[:no_prompt], nil, paging_enabled)
261
+ if addn_value = select_prompt(option_type, api_client, option_params, options[:no_prompt], nil, paging_enabled)
245
262
  value << addn_value
246
263
  else
247
264
  break
@@ -249,11 +266,11 @@ module Morpheus
249
266
  end
250
267
  end
251
268
  elsif ['typeahead', 'multiTypeahead'].include?(option_type['type'])
252
- value = typeahead_prompt(option_type, api_client, (option_type['noParams'] ? {} : (api_params || {}).merge(results)), options[:no_prompt], nil, paging_enabled)
269
+ value = typeahead_prompt(option_type, api_client, option_params, options[:no_prompt], nil, paging_enabled)
253
270
  if value && option_type['type'] == 'multiTypeahead'
254
271
  value = [value]
255
272
  while self.confirm("Add another #{option_type['fieldLabel']}?", {:default => false}) do
256
- if addn_value = typeahead_prompt(option_type, api_client, (option_type['noParams'] ? {} : (api_params || {}).merge(results)), options[:no_prompt], nil, paging_enabled)
273
+ if addn_value = typeahead_prompt(option_type, api_client, option_params, options[:no_prompt], nil, paging_enabled)
257
274
  value << addn_value
258
275
  else
259
276
  break
@@ -261,8 +278,11 @@ module Morpheus
261
278
  end
262
279
  end
263
280
  elsif option_type['type'] == 'hidden'
264
- value = option_type['defaultValue']
265
- input = value
281
+ if option_type['optionSource'].nil?
282
+ value = option_type['defaultValue']
283
+ else
284
+ value = load_source_options(option_type['optionSource'], option_params, api_client, api_params || {})
285
+ end
266
286
  elsif option_type['type'] == 'file'
267
287
  value = file_prompt(option_type)
268
288
  elsif option_type['type'] == 'file-content'
@@ -275,8 +295,14 @@ module Morpheus
275
295
  if option_type['type'] == 'multiSelect'
276
296
  value = [value] if !value.nil? && !value.is_a?(Array)
277
297
  # parent_context_map[parent_ns] = value
298
+ elsif option_type['type'] == 'multiText'
299
+ # multiText expects csv value
300
+ if value && value.is_a?(String)
301
+ value = value.split(",").collect {|it| it.strip }
302
+ end
278
303
  end
279
- context_map[field_name] = value
304
+ context_map[field_name] = value if !(value.nil? || (value.is_a?(Hash) && value.empty?))
305
+ parent_context_map.reject! {|k,v| k == parent_ns && (v.nil? || (v.is_a?(Hash) && v.empty?))}
280
306
  end
281
307
  results
282
308
  end
@@ -292,7 +318,7 @@ module Morpheus
292
318
  end
293
319
  optionString = options.collect{ |b| b[:checked] ? "(#{b[:key]})" : b[:key]}.join(', ')
294
320
  while !value_found do
295
- print "#{option_type['fieldLabel']}#{option_type['fieldAddOn'] ? ('(' + option_type['fieldAddOn'] + ') ') : '' }[#{optionString}]: "
321
+ print "#{option_type['fieldLabel']}#{option_type['fieldAddOn'] ? (' (' + option_type['fieldAddOn'] + ') ') : '' }[#{optionString}]: "
296
322
  input = $stdin.gets.chomp!
297
323
  if input == '?'
298
324
  help_prompt(option_type)
@@ -319,7 +345,7 @@ module Morpheus
319
345
  value_found = false
320
346
  value = nil
321
347
  while !value_found do
322
- print "#{option_type['fieldLabel']}#{option_type['fieldAddOn'] ? ('(' + option_type['fieldAddOn'] + ') ') : '' }#{!option_type['required'] ? ' (optional)' : ''}#{!option_type['defaultValue'].to_s.empty? ? ' ['+option_type['defaultValue'].to_s+']' : ''}: "
348
+ print "#{option_type['fieldLabel']}#{option_type['fieldAddOn'] ? (' (' + option_type['fieldAddOn'] + ') ') : '' }#{!option_type['required'] ? ' (optional)' : ''}#{!option_type['defaultValue'].to_s.empty? ? ' ['+option_type['defaultValue'].to_s+']' : ''}: "
323
349
  input = $stdin.gets.chomp!
324
350
  value = input.empty? ? option_type['defaultValue'] : input
325
351
  if !value.to_s.empty?
@@ -343,7 +369,7 @@ module Morpheus
343
369
  Thread.current[:_last_select]
344
370
  end
345
371
 
346
- def self.select_prompt(option_type,api_client, api_params={}, no_prompt=false, use_value=nil, paging_enabled=false)
372
+ def self.select_prompt(option_type, api_client, api_params={}, no_prompt=false, use_value=nil, paging_enabled=false)
347
373
  paging_enabled = false if Morpheus::Cli.windows?
348
374
  field_key = [option_type['fieldContext'], option_type['fieldName']].select {|it| it && it != '' }.join('.')
349
375
  help_field_key = option_type[:help_field_prefix] ? "#{option_type[:help_field_prefix]}.#{field_key}" : field_key
@@ -352,7 +378,12 @@ module Morpheus
352
378
  value_field = (option_type['config'] ? option_type['config']['valueField'] : nil) || 'value'
353
379
  default_value = option_type['defaultValue']
354
380
  default_value = default_value['id'] if default_value && default_value.is_a?(Hash) && !default_value['id'].nil?
355
- api_params ||= {}
381
+
382
+ if !option_type['params'].nil?
383
+ api_params = (api_params || {}).select {|k,v| option_type['params'].key?(k) || option_type['params'].key?(k.to_s)}
384
+ option_type['params'].select {|k,v| !v.empty?}.each {|k,v| api_params[k] = v}
385
+ end
386
+
356
387
  # local array of options
357
388
  if option_type['selectOptions']
358
389
  # calculate from inline lambda
@@ -411,7 +442,8 @@ module Morpheus
411
442
  default_value = found_default_option['name'] # name is prettier than value
412
443
  end
413
444
  else
414
- found_default_option = select_options.find {|opt| opt[value_field].to_s == default_value.to_s}
445
+ found_default_option = select_options.find {|opt| opt[value_field].to_s == default_value.to_s || opt['name'] == default_value.to_s}
446
+ found_default_option = select_options.find {|opt| opt[value_field].to_s.start_with?(default_value.to_s) || opt['name'].to_s.start_with?(default_value.to_s)} if !found_default_option
415
447
  if found_default_option
416
448
  default_value = found_default_option['name'] # name is prettier than value
417
449
  end
@@ -470,7 +502,7 @@ module Morpheus
470
502
  }
471
503
 
472
504
  has_more_pages = paging && (paging[:cur_page] * paging[:page_size]) < paging[:total]
473
- input = Readline.readline("#{option_type['fieldLabel']}#{option_type['fieldAddOn'] ? ('(' + option_type['fieldAddOn'] + ') ') : '' }#{!option_type['required'] ? ' (optional)' : ''}#{!default_value.to_s.empty? ? ' ['+default_value.to_s+']' : ''} ['?' for#{has_more_pages && paging[:cur_page] > 0 ? ' more ' : ' '}options]: ", false).to_s
505
+ input = Readline.readline("#{option_type['fieldLabel']}#{option_type['fieldAddOn'] ? (' (' + option_type['fieldAddOn'] + ') ') : '' }#{!option_type['required'] ? ' (optional)' : ''}#{!default_value.to_s.empty? ? ' ['+default_value.to_s+']' : ''} ['?' for#{has_more_pages && paging[:cur_page] > 0 ? ' more ' : ' '}options]: ", false).to_s
474
506
  input = input.chomp.strip
475
507
  if input.empty? && default_value
476
508
  input = default_value.to_s
@@ -504,7 +536,9 @@ module Morpheus
504
536
  # this works like select_prompt, but refreshes options with ?query=value between inputs
505
537
  # paging_enabled is ignored right now
506
538
  def self.typeahead_prompt(option_type,api_client, api_params={}, no_prompt=false, use_value=nil, paging_enabled=false)
507
- select_options = []
539
+ paging_enabled = false if Morpheus::Cli.windows?
540
+ paging = nil
541
+ select_options = nil
508
542
  field_key = [option_type['fieldContext'], option_type['fieldName']].select {|it| it && it != '' }.join('.')
509
543
  help_field_key = option_type[:help_field_prefix] ? "#{option_type[:help_field_prefix]}.#{field_key}" : field_key
510
544
  input = ""
@@ -538,7 +572,8 @@ module Morpheus
538
572
  matches
539
573
  }
540
574
  # prompt for typeahead input value
541
- input = Readline.readline("#{option_type['fieldLabel']}#{option_type['fieldAddOn'] ? ('(' + option_type['fieldAddOn'] + ') ') : '' }#{!option_type['required'] ? ' (optional)' : ''}#{!default_value.to_s.empty? ? ' ['+default_value.to_s+']' : ''} ['?' for options]: ", false).to_s
575
+ has_more_pages = paging && ((paging[:cur_page] + 1) * paging[:page_size]) < paging[:total]
576
+ input = Readline.readline("#{option_type['fieldLabel']}#{option_type['fieldAddOn'] ? (' (' + option_type['fieldAddOn'] + ') ') : '' }#{!option_type['required'] ? ' (optional)' : ''}#{!default_value.to_s.empty? ? ' ['+default_value.to_s+']' : ''} ['?' for#{has_more_pages ? ' more ' : ' '}options]: ", false).to_s
542
577
  input = input.chomp.strip
543
578
  end
544
579
 
@@ -565,8 +600,22 @@ module Morpheus
565
600
  # looking for help with this input
566
601
  if input == '?'
567
602
  help_prompt(option_type)
568
- select_options = load_options(option_type, api_client, api_params)
569
- display_select_options(option_type, select_options) unless select_options.empty?
603
+ select_options = select_options || load_options(option_type, api_client, api_params)
604
+
605
+ if !select_options.empty?
606
+ if paging_enabled
607
+ if paging.nil?
608
+ option_count = select_options ? select_options.count : 0
609
+ page_size = Readline.get_screen_size[0] - 6
610
+ if page_size < option_count
611
+ paging = {:cur_page => 0, :page_size => page_size, :total => option_count}
612
+ end
613
+ else
614
+ paging[:cur_page] = (paging[:cur_page] + 1) * paging[:page_size] < paging[:total] ? paging[:cur_page] + 1 : 0
615
+ end
616
+ end
617
+ display_select_options(option_type, select_options, paging)
618
+ end
570
619
  next
571
620
  end
572
621
 
@@ -713,7 +762,7 @@ module Morpheus
713
762
  value_found = false
714
763
  value = nil
715
764
  while !value_found do
716
- print "#{option_type['fieldLabel']}#{option_type['fieldAddOn'] ? ('(' + option_type['fieldAddOn'] + ') ') : '' }#{!option_type['required'] ? ' (optional)' : ''}#{!option_type['defaultValue'].to_s.empty? ? ' ['+option_type['defaultValue'].to_s+']' : ''}: "
765
+ print "#{option_type['fieldLabel']}#{option_type['fieldAddOn'] ? (' (' + option_type['fieldAddOn'] + ') ') : '' }#{!option_type['required'] ? ' (optional)' : ''}#{!option_type['defaultValue'].to_s.empty? ? ' ['+option_type['defaultValue'].to_s+']' : ''}: "
717
766
  input = $stdin.gets.chomp!
718
767
  value = input.empty? ? option_type['defaultValue'] : input
719
768
  if input == '?'
@@ -730,7 +779,7 @@ module Morpheus
730
779
  value = nil
731
780
  while !value_found do
732
781
  if value.nil?
733
- print "#{option_type['fieldLabel']}#{option_type['fieldAddOn'] ? ('(' + option_type['fieldAddOn'] + ') ') : '' }#{optional_label(option_type)} [Type 'EOF' to stop input]: \n"
782
+ print "#{option_type['fieldLabel']}#{option_type['fieldAddOn'] ? (' (' + option_type['fieldAddOn'] + ') ') : '' }#{optional_label(option_type)} [Type 'EOF' to stop input]: \n"
734
783
  end
735
784
  input = $stdin.gets.chomp!
736
785
  # value = input.empty? ? option_type['defaultValue'] : input
@@ -754,7 +803,7 @@ module Morpheus
754
803
  def self.password_prompt(option_type)
755
804
  value_found = false
756
805
  while !value_found do
757
- print "#{option_type['fieldLabel']}#{option_type['fieldAddOn'] ? ('(' + option_type['fieldAddOn'] + ') ') : '' }#{optional_label(option_type)}#{option_type['defaultValue'] ? ' ['+option_type['defaultValue'].to_s+']' : ''}: "
806
+ print "#{option_type['fieldLabel']}#{option_type['fieldAddOn'] ? (' (' + option_type['fieldAddOn'] + ') ') : '' }#{optional_label(option_type)}#{option_type['defaultValue'] ? ' ['+option_type['defaultValue'].to_s+']' : ''}: "
758
807
  input = $stdin.noecho(&:gets).chomp!
759
808
  value = input
760
809
  print "\n"
@@ -774,11 +823,11 @@ module Morpheus
774
823
  value_found = false
775
824
  value = nil
776
825
  while !value_found do
777
- #print "#{option_type['fieldLabel']}#{option_type['fieldAddOn'] ? ('(' + option_type['fieldAddOn'] + ') ') : '' }#{optional_label(option_type)}#{option_type['defaultValue'] ? ' ['+option_type['defaultValue'].to_s+']' : ''}: "
826
+ #print "#{option_type['fieldLabel']}#{option_type['fieldAddOn'] ? (' (' + option_type['fieldAddOn'] + ') ') : '' }#{optional_label(option_type)}#{option_type['defaultValue'] ? ' ['+option_type['defaultValue'].to_s+']' : ''}: "
778
827
  Readline.completion_append_character = ""
779
828
  Readline.basic_word_break_characters = ''
780
829
  Readline.completion_proc = proc {|s| Readline::FILENAME_COMPLETION_PROC.call(s) }
781
- input = Readline.readline("#{option_type['fieldLabel']}#{option_type['fieldAddOn'] ? ('(' + option_type['fieldAddOn'] + ') ') : '' }#{optional_label(option_type)}#{option_type['defaultValue'] ? ' ['+option_type['defaultValue'].to_s+']' : ''}: ", false).to_s
830
+ input = Readline.readline("#{option_type['fieldLabel']}#{option_type['fieldAddOn'] ? (' (' + option_type['fieldAddOn'] + ') ') : '' }#{optional_label(option_type)}#{option_type['defaultValue'] ? ' ['+option_type['defaultValue'].to_s+']' : ''}: ", false).to_s
782
831
  input = input.chomp.strip
783
832
  #input = $stdin.gets.chomp!
784
833
  value = input.empty? ? option_type['defaultValue'] : input.to_s
@@ -896,6 +945,8 @@ module Morpheus
896
945
  select_options = filtered_options
897
946
  end
898
947
  elsif option_type['optionSource']
948
+ api_params = api_params.select {|k,v| option_type['params'].include(k)} if option_type['params'].nil? && api_params
949
+
899
950
  # calculate from inline lambda
900
951
  if option_type['optionSource'].is_a?(Proc)
901
952
  select_options = option_type['optionSource'].call(api_client, api_params || {})
@@ -947,27 +998,36 @@ module Morpheus
947
998
  out << "\n"
948
999
  out << "#{header}\n"
949
1000
  out << "#{'=' * header.length}\n"
1001
+
950
1002
  select_options.each do |option|
951
- out << " * #{option['name']} [#{option['value']}]\n"
1003
+ out << (option['isGroup'] ? "- #{option['name']}\n" : " * #{option['name']} [#{option['value']}]\n")
952
1004
  end
953
1005
  return out
954
1006
  end
955
1007
 
1008
+ def self.sorted_option_types(option_types)
1009
+ option_types.reject {|it| (it['fieldGroup'] || 'default') != 'default'}.sort {|a,b| a['displayOrder'].to_i <=> b['displayOrder'].to_i} +
1010
+ option_types.reject {|it| ['default', 'advanced'].include?(it['fieldGroup'] || 'default')}.sort{|a,b| a['displayOrder'] <=> b['displayOrder']}.group_by{|it| it['fieldGroup']}.values.collect { |it| it.sort{|a,b| a['displayOrder'].to_i <=> b['displayOrder'].to_i}}.flatten +
1011
+ option_types.reject {|it| it['fieldGroup'] != 'advanced'}.sort {|a,b| a['displayOrder'].to_i <=> b['displayOrder'].to_i}
1012
+ end
1013
+
956
1014
  def self.display_select_options(opt, select_options = [], paging = nil)
957
- puts format_select_options_help(opt, select_options, paging)
1015
+ puts self.format_select_options_help(opt, select_options, paging)
958
1016
  end
959
1017
 
960
1018
  def self.format_option_types_help(option_types, opts={})
1019
+ option_types = self.sorted_option_types(option_types).reject {|it| it['hidden']}
1020
+
961
1021
  if option_types.empty?
962
1022
  "#{opts[:color]}#{opts[:title] || "Available Options:"}\nNone\n\n"
963
1023
  else
964
1024
  if opts[:include_context]
965
- option_lines = option_types.sort {|it| it['displayOrder']}.collect {|it|
1025
+ option_lines = option_types.collect {|it|
966
1026
  field_context = (opts[:context_map] || {})[it['fieldContext']] || it['fieldContext']
967
1027
  " -O #{field_context && field_context != '' ? "#{field_context}." : ''}#{it['fieldName']}=\"value\""
968
1028
  }
969
1029
  else
970
- option_lines = option_types.sort {|it| it['displayOrder']}.collect {|it| " -O #{it['fieldName']}=\"value\"" }
1030
+ option_lines = option_types.collect {|it| " -O #{it['fieldName']}=\"value\"" }
971
1031
  end
972
1032
  "#{opts[:color]}#{opts[:title] || "Available Options:"}\n#{option_lines.join("\n")}\n\n"
973
1033
  end
@@ -985,6 +1045,31 @@ module Morpheus
985
1045
  return option_type['required'] ? '' : ' (optional)'
986
1046
  end
987
1047
  end
1048
+
1049
+ def self.get_option_value(obj, option_type, format=false)
1050
+ context = option_type['fieldContext'] == 'config' ? obj['config'] : obj
1051
+ name = option_type['fieldName']
1052
+ tokens = name.split('.')
1053
+
1054
+ if tokens.length > 1
1055
+ tokens.slice(0, tokens.length - 1).each do |token|
1056
+ context = context[token]
1057
+ end
1058
+ name = tokens.last
1059
+ end
1060
+
1061
+ if context.kind_of?(Array)
1062
+ rtn = context.collect {|it| it['name'] || it[name]}.join ', '
1063
+ else
1064
+ rtn = context[name]
1065
+ end
1066
+
1067
+ if format
1068
+ rtn = (rtn ? 'On' : 'Off') if option_type['type'] == 'checkbox'
1069
+ rtn = rtn.join(', ') if rtn.is_a?(Array)
1070
+ end
1071
+ rtn
1072
+ end
988
1073
  end
989
1074
  end
990
1075
  end
@@ -1,6 +1,6 @@
1
1
 
2
2
  module Morpheus
3
3
  module Cli
4
- VERSION = "5.3.2.3"
4
+ VERSION = "5.4.1"
5
5
  end
6
6
  end
data/lib/morpheus/cli.rb CHANGED
@@ -4,6 +4,7 @@ require 'morpheus/rest_client'
4
4
  require 'morpheus/formatters'
5
5
  require 'morpheus/logging'
6
6
  require 'morpheus/util'
7
+ require 'morpheus/routes'
7
8
  require 'term/ansicolor'
8
9
 
9
10
  Dir[File.dirname(__FILE__) + "/ext/*.rb"].each {|file| require file }
@@ -11,12 +12,12 @@ Dir[File.dirname(__FILE__) + "/ext/*.rb"].each {|file| require file }
11
12
  module Morpheus
12
13
  module Cli
13
14
 
14
- # get the home directory, where morpheus-cli stores things
15
15
  # The default is $MORPHEUS_CLI_HOME or $HOME/.morpheus
16
16
  unless defined?(@@home_directory)
17
17
  @@home_directory = ENV['MORPHEUS_CLI_HOME'] || File.join(Dir.home, ".morpheus")
18
18
  end
19
19
 
20
+ # get the home directory, where morpheus-cli stores things
20
21
  def self.home_directory
21
22
  @@home_directory
22
23
  end
@@ -50,12 +51,9 @@ module Morpheus
50
51
  Dir[File.dirname(__FILE__) + "/api/**/*.rb"].each {|file| load file }
51
52
 
52
53
  # load mixins
53
- Dir[File.dirname(__FILE__) + "/cli/mixins/*.rb"].each {|file| load file }
54
+ Dir[File.dirname(__FILE__) + "/cli/mixins/**/*.rb"].each {|file| load file }
54
55
 
55
- # load commands
56
- # Dir[File.dirname(__FILE__) + "/cli/*.rb"].each {|file| load file }
57
-
58
- # utilites
56
+ # load utilites
59
57
  require 'morpheus/cli/cli_registry.rb'
60
58
  require 'morpheus/cli/expression_parser.rb'
61
59
  require 'morpheus/cli/dot_file.rb'
@@ -65,128 +63,8 @@ module Morpheus
65
63
  load 'morpheus/cli/option_types.rb'
66
64
  load 'morpheus/cli/credentials.rb'
67
65
 
68
- # all standard commands
69
- Dir[File.dirname(__FILE__) + "/cli/commands/standard/**/*.rb"].each {|file| load file }
70
-
71
- # all the known commands
72
- load 'morpheus/cli/remote.rb'
73
- load 'morpheus/cli/doc.rb'
74
- load 'morpheus/cli/ping.rb'
75
- load 'morpheus/cli/setup.rb'
76
- load 'morpheus/cli/login.rb'
77
- load 'morpheus/cli/logout.rb'
78
- load 'morpheus/cli/forgot_password.rb'
79
- load 'morpheus/cli/whoami.rb'
80
- load 'morpheus/cli/access_token_command.rb'
81
- load 'morpheus/cli/user_settings_command.rb'
82
- load 'morpheus/cli/search_command.rb'
83
- load 'morpheus/cli/dashboard_command.rb'
84
- load 'morpheus/cli/recent_activity_command.rb' # deprecated, removing soon
85
- load 'morpheus/cli/activity_command.rb'
86
- load 'morpheus/cli/appliance_settings_command.rb'
87
- load 'morpheus/cli/power_schedules_command.rb'
88
- load 'morpheus/cli/execute_schedules_command.rb'
89
- load 'morpheus/cli/groups.rb'
90
- load 'morpheus/cli/clouds.rb'
91
- load 'morpheus/cli/cloud_datastores_command.rb'
92
- load 'morpheus/cli/cloud_resource_pools_command.rb'
93
- load 'morpheus/cli/cloud_folders_command.rb'
94
- load 'morpheus/cli/hosts.rb'
95
- load 'morpheus/cli/load_balancers.rb'
96
- load 'morpheus/cli/load_balancer_types.rb'
97
- load 'morpheus/cli/shell.rb'
98
- load 'morpheus/cli/tasks.rb'
99
- load 'morpheus/cli/workflows.rb'
100
- load 'morpheus/cli/deployments.rb'
101
- load 'morpheus/cli/deploy.rb'
102
- load 'morpheus/cli/deploys.rb'
103
- load 'morpheus/cli/instances.rb'
104
- load 'morpheus/cli/containers_command.rb'
105
- load 'morpheus/cli/apps.rb'
106
- load 'morpheus/cli/blueprints_command.rb'
107
- load 'morpheus/cli/license.rb'
108
- load 'morpheus/cli/instance_types.rb'
109
- load 'morpheus/cli/jobs_command.rb'
110
- load 'morpheus/cli/integrations_command.rb'
111
- load 'morpheus/cli/security_groups.rb'
112
- load 'morpheus/cli/security_group_rules.rb'
113
- load 'morpheus/cli/clusters.rb'
114
- load 'morpheus/cli/tenants_command.rb'
115
- load 'morpheus/cli/account_groups_command.rb'
116
- load 'morpheus/cli/users.rb'
117
- load 'morpheus/cli/change_password_command.rb'
118
- load 'morpheus/cli/user_groups_command.rb'
119
- load 'morpheus/cli/user_sources_command.rb'
120
- load 'morpheus/cli/roles.rb'
121
- load 'morpheus/cli/key_pairs.rb'
122
- load 'morpheus/cli/virtual_images.rb'
123
- # load 'morpheus/cli/library.rb' # gone until we collapse these again
124
- load 'morpheus/cli/library_instance_types_command.rb'
125
- load 'morpheus/cli/library_cluster_layouts_command.rb'
126
- load 'morpheus/cli/library_layouts_command.rb'
127
- load 'morpheus/cli/library_upgrades_command.rb'
128
- load 'morpheus/cli/library_container_types_command.rb'
129
- load 'morpheus/cli/library_container_scripts_command.rb'
130
- load 'morpheus/cli/library_container_templates_command.rb'
131
- load 'morpheus/cli/library_option_types_command.rb'
132
- load 'morpheus/cli/library_option_lists_command.rb'
133
- load 'morpheus/cli/library_spec_templates_command.rb'
134
- load 'morpheus/cli/monitoring_incidents_command.rb'
135
- load 'morpheus/cli/monitoring_checks_command.rb'
136
- load 'morpheus/cli/monitoring_contacts_command.rb'
137
- load 'morpheus/cli/monitoring_alerts_command.rb'
138
- load 'morpheus/cli/monitoring_groups_command.rb'
139
- load 'morpheus/cli/monitoring_apps_command.rb'
140
- load 'morpheus/cli/logs_command.rb'
141
- load 'morpheus/cli/policies_command.rb'
142
- load 'morpheus/cli/networks_command.rb'
143
- load 'morpheus/cli/subnets_command.rb'
144
- load 'morpheus/cli/network_groups_command.rb'
145
- load 'morpheus/cli/network_pools_command.rb'
146
- load 'morpheus/cli/network_services_command.rb'
147
- load 'morpheus/cli/network_pool_servers_command.rb'
148
- load 'morpheus/cli/network_domains_command.rb'
149
- load 'morpheus/cli/network_proxies_command.rb'
150
- load 'morpheus/cli/network_routers_command.rb'
151
- load 'morpheus/cli/cypher_command.rb'
152
- load 'morpheus/cli/image_builder_command.rb'
153
- load 'morpheus/cli/preseed_scripts_command.rb'
154
- load 'morpheus/cli/boot_scripts_command.rb'
155
- load 'morpheus/cli/archives_command.rb'
156
- load 'morpheus/cli/storage_providers_command.rb'
157
- load 'morpheus/cli/execution_request_command.rb'
158
- load 'morpheus/cli/file_copy_request_command.rb'
159
- load 'morpheus/cli/processes_command.rb'
160
- load 'morpheus/cli/packages_command.rb'
161
- load 'morpheus/cli/reports_command.rb'
162
- load 'morpheus/cli/environments_command.rb'
163
- load 'morpheus/cli/backup_settings_command.rb'
164
- load 'morpheus/cli/log_settings_command.rb'
165
- load 'morpheus/cli/whitelabel_settings_command.rb'
166
- load 'morpheus/cli/wiki_command.rb'
167
- load 'morpheus/cli/approvals_command.rb'
168
- load 'morpheus/cli/service_plans_command.rb'
169
- load 'morpheus/cli/price_sets_command.rb'
170
- load 'morpheus/cli/prices_command.rb'
171
- load 'morpheus/cli/provisioning_settings_command.rb'
172
- load 'morpheus/cli/provisioning_licenses_command.rb'
173
- load 'morpheus/cli/budgets_command.rb'
174
- load 'morpheus/cli/health_command.rb'
175
- load 'morpheus/cli/invoices_command.rb'
176
- load 'morpheus/cli/guidance_command.rb'
177
- load 'morpheus/cli/projects_command.rb'
178
- load 'morpheus/cli/backups_command.rb'
179
- load 'morpheus/cli/backup_jobs_command.rb'
180
- load 'morpheus/cli/catalog_item_types_command.rb' # self-service
181
- load 'morpheus/cli/service_catalog_command.rb' # catalog (Service Catalog persona)
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)
189
- # add new commands here...
66
+ # load all commands
67
+ Dir[File.dirname(__FILE__) + "/cli/commands/**/*.rb"].each {|file| load file }
190
68
 
191
69
  end
192
70