morpheus-cli 5.3.4 → 5.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (168) hide show
  1. checksums.yaml +4 -4
  2. data/Dockerfile +1 -1
  3. data/lib/morpheus/api/api_client.rb +14 -1
  4. data/lib/morpheus/api/health_interface.rb +37 -3
  5. data/lib/morpheus/api/network_dhcp_relays_interface.rb +36 -0
  6. data/lib/morpheus/api/network_dhcp_servers_interface.rb +36 -0
  7. data/lib/morpheus/api/network_edge_clusters_interface.rb +26 -0
  8. data/lib/morpheus/api/network_servers_interface.rb +68 -12
  9. data/lib/morpheus/api/roles_interface.rb +7 -0
  10. data/lib/morpheus/cli/cli_command.rb +7 -8
  11. data/lib/morpheus/cli/cli_registry.rb +1 -0
  12. data/lib/morpheus/cli/{access_token_command.rb → commands/access_token_command.rb} +1 -1
  13. data/lib/morpheus/cli/{account_groups_command.rb → commands/account_groups_command.rb} +0 -8
  14. data/lib/morpheus/cli/{activity_command.rb → commands/activity_command.rb} +0 -0
  15. data/lib/morpheus/cli/commands/{standard/alias_command.rb → alias_command.rb} +0 -3
  16. data/lib/morpheus/cli/{appliance_settings_command.rb → commands/appliance_settings_command.rb} +0 -0
  17. data/lib/morpheus/cli/{approvals_command.rb → commands/approvals_command.rb} +0 -0
  18. data/lib/morpheus/cli/{apps.rb → commands/apps.rb} +0 -9
  19. data/lib/morpheus/cli/{archives_command.rb → commands/archives_command.rb} +0 -6
  20. data/lib/morpheus/cli/{backup_jobs_command.rb → commands/backup_jobs_command.rb} +0 -0
  21. data/lib/morpheus/cli/{backup_settings_command.rb → commands/backup_settings_command.rb} +0 -0
  22. data/lib/morpheus/cli/{backups_command.rb → commands/backups_command.rb} +0 -0
  23. data/lib/morpheus/cli/commands/{standard/benchmark_command.rb → benchmark_command.rb} +0 -3
  24. data/lib/morpheus/cli/{blueprints_command.rb → commands/blueprints_command.rb} +0 -0
  25. data/lib/morpheus/cli/{boot_scripts_command.rb → commands/boot_scripts_command.rb} +0 -3
  26. data/lib/morpheus/cli/{budgets_command.rb → commands/budgets_command.rb} +0 -0
  27. data/lib/morpheus/cli/commands/{standard/cat_command.rb → cat_command.rb} +0 -0
  28. data/lib/morpheus/cli/{catalog_item_types_command.rb → commands/catalog_item_types_command.rb} +0 -0
  29. data/lib/morpheus/cli/{certificates_command.rb → commands/certificates_command.rb} +0 -0
  30. data/lib/morpheus/cli/commands/change_password_command.rb +132 -0
  31. data/lib/morpheus/cli/{cloud_datastores_command.rb → commands/cloud_datastores_command.rb} +0 -4
  32. data/lib/morpheus/cli/{cloud_folders_command.rb → commands/cloud_folders_command.rb} +0 -4
  33. data/lib/morpheus/cli/{cloud_resource_pools_command.rb → commands/cloud_resource_pools_command.rb} +0 -4
  34. data/lib/morpheus/cli/{clouds.rb → commands/clouds.rb} +0 -7
  35. data/lib/morpheus/cli/{clusters.rb → commands/clusters.rb} +0 -6
  36. data/lib/morpheus/cli/commands/{standard/coloring_command.rb → coloring_command.rb} +0 -2
  37. data/lib/morpheus/cli/{containers_command.rb → commands/containers_command.rb} +0 -7
  38. data/lib/morpheus/cli/commands/{standard/curl_command.rb → curl_command.rb} +0 -3
  39. data/lib/morpheus/cli/{cypher_command.rb → commands/cypher_command.rb} +0 -1
  40. data/lib/morpheus/cli/{dashboard_command.rb → commands/dashboard_command.rb} +0 -2
  41. data/lib/morpheus/cli/commands/{standard/debug_command.rb → debug_command.rb} +0 -1
  42. data/lib/morpheus/cli/{deploy.rb → commands/deploy.rb} +0 -1
  43. data/lib/morpheus/cli/{deployments.rb → commands/deployments.rb} +0 -0
  44. data/lib/morpheus/cli/{deploys.rb → commands/deploys.rb} +0 -1
  45. data/lib/morpheus/cli/{doc.rb → commands/doc.rb} +1 -1
  46. data/lib/morpheus/cli/commands/{standard/echo_command.rb → echo_command.rb} +0 -2
  47. data/lib/morpheus/cli/commands/{standard/edit_profile_command.rb → edit_profile_command.rb} +15 -4
  48. data/lib/morpheus/cli/commands/{standard/edit_rc_command.rb → edit_rc_command.rb} +19 -3
  49. data/lib/morpheus/cli/{environments_command.rb → commands/environments_command.rb} +0 -5
  50. data/lib/morpheus/cli/{execute_schedules_command.rb → commands/execute_schedules_command.rb} +0 -0
  51. data/lib/morpheus/cli/{execution_request_command.rb → commands/execution_request_command.rb} +0 -2
  52. data/lib/morpheus/cli/commands/{standard/exit_command.rb → exit_command.rb} +0 -2
  53. data/lib/morpheus/cli/{file_copy_request_command.rb → commands/file_copy_request_command.rb} +0 -4
  54. data/lib/morpheus/cli/{forgot_password.rb → commands/forgot_password.rb} +0 -0
  55. data/lib/morpheus/cli/commands/{standard/get_prompt_command.rb → get_prompt_command.rb} +0 -3
  56. data/lib/morpheus/cli/{groups.rb → commands/groups.rb} +0 -7
  57. data/lib/morpheus/cli/{guidance_command.rb → commands/guidance_command.rb} +1 -1
  58. data/lib/morpheus/cli/{health_command.rb → commands/health_command.rb} +104 -19
  59. data/lib/morpheus/cli/commands/{standard/history_command.rb → history_command.rb} +0 -3
  60. data/lib/morpheus/cli/{hosts.rb → commands/hosts.rb} +0 -9
  61. data/lib/morpheus/cli/{image_builder_command.rb → commands/image_builder_command.rb} +2 -8
  62. data/lib/morpheus/cli/{instance_types.rb → commands/instance_types.rb} +0 -3
  63. data/lib/morpheus/cli/{instances.rb → commands/instances.rb} +0 -4
  64. data/lib/morpheus/cli/{integrations_command.rb → commands/integrations_command.rb} +0 -0
  65. data/lib/morpheus/cli/{invoices_command.rb → commands/invoices_command.rb} +1 -1
  66. data/lib/morpheus/cli/{jobs_command.rb → commands/jobs_command.rb} +0 -0
  67. data/lib/morpheus/cli/{key_pairs.rb → commands/key_pairs.rb} +0 -6
  68. data/lib/morpheus/cli/{library_cluster_layouts_command.rb → commands/library_cluster_layouts_command.rb} +0 -4
  69. data/lib/morpheus/cli/{library_container_scripts_command.rb → commands/library_container_scripts_command.rb} +0 -0
  70. data/lib/morpheus/cli/{library_container_templates_command.rb → commands/library_container_templates_command.rb} +0 -1
  71. data/lib/morpheus/cli/{library_container_types_command.rb → commands/library_container_types_command.rb} +0 -4
  72. data/lib/morpheus/cli/{library_instance_types_command.rb → commands/library_instance_types_command.rb} +0 -4
  73. data/lib/morpheus/cli/{library_layouts_command.rb → commands/library_layouts_command.rb} +0 -4
  74. data/lib/morpheus/cli/{library_option_lists_command.rb → commands/library_option_lists_command.rb} +0 -4
  75. data/lib/morpheus/cli/{library_option_types_command.rb → commands/library_option_types_command.rb} +0 -4
  76. data/lib/morpheus/cli/{library_spec_templates_command.rb → commands/library_spec_templates_command.rb} +0 -1
  77. data/lib/morpheus/cli/{library_upgrades_command.rb → commands/library_upgrades_command.rb} +0 -4
  78. data/lib/morpheus/cli/{license.rb → commands/license.rb} +0 -3
  79. data/lib/morpheus/cli/{load_balancer_pools.rb → commands/load_balancer_pools.rb} +0 -0
  80. data/lib/morpheus/cli/{load_balancer_types.rb → commands/load_balancer_types.rb} +0 -4
  81. data/lib/morpheus/cli/{load_balancer_virtual_servers.rb → commands/load_balancer_virtual_servers.rb} +0 -0
  82. data/lib/morpheus/cli/{load_balancers.rb → commands/load_balancers.rb} +0 -1
  83. data/lib/morpheus/cli/commands/{standard/log_level_command.rb → log_level_command.rb} +0 -3
  84. data/lib/morpheus/cli/{log_settings_command.rb → commands/log_settings_command.rb} +0 -0
  85. data/lib/morpheus/cli/{login.rb → commands/login.rb} +0 -5
  86. data/lib/morpheus/cli/commands/logout.rb +63 -0
  87. data/lib/morpheus/cli/{logs_command.rb → commands/logs_command.rb} +0 -3
  88. data/lib/morpheus/cli/commands/{standard/man_command.rb → man_command.rb} +0 -2
  89. data/lib/morpheus/cli/{monitoring_alerts_command.rb → commands/monitoring_alerts_command.rb} +0 -7
  90. data/lib/morpheus/cli/{monitoring_apps_command.rb → commands/monitoring_apps_command.rb} +0 -1
  91. data/lib/morpheus/cli/{monitoring_checks_command.rb → commands/monitoring_checks_command.rb} +0 -1
  92. data/lib/morpheus/cli/{monitoring_contacts_command.rb → commands/monitoring_contacts_command.rb} +0 -7
  93. data/lib/morpheus/cli/{monitoring_groups_command.rb → commands/monitoring_groups_command.rb} +0 -1
  94. data/lib/morpheus/cli/{monitoring_incidents_command.rb → commands/monitoring_incidents_command.rb} +0 -1
  95. data/lib/morpheus/cli/commands/network_dhcp_relays_command.rb +416 -0
  96. data/lib/morpheus/cli/commands/network_dhcp_servers_command.rb +407 -0
  97. data/lib/morpheus/cli/{network_domains_command.rb → commands/network_domains_command.rb} +0 -4
  98. data/lib/morpheus/cli/commands/network_edge_clusters_command.rb +329 -0
  99. data/lib/morpheus/cli/commands/network_firewalls_command.rb +806 -0
  100. data/lib/morpheus/cli/{network_groups_command.rb → commands/network_groups_command.rb} +0 -4
  101. data/lib/morpheus/cli/{network_pool_servers_command.rb → commands/network_pool_servers_command.rb} +0 -4
  102. data/lib/morpheus/cli/{network_pools_command.rb → commands/network_pools_command.rb} +0 -4
  103. data/lib/morpheus/cli/{network_proxies_command.rb → commands/network_proxies_command.rb} +0 -4
  104. data/lib/morpheus/cli/{network_routers_command.rb → commands/network_routers_command.rb} +0 -5
  105. data/lib/morpheus/cli/{network_services_command.rb → commands/network_services_command.rb} +0 -4
  106. data/lib/morpheus/cli/{network_scopes_command.rb → commands/network_transport_zones_command.rb} +102 -92
  107. data/lib/morpheus/cli/{networks_command.rb → commands/networks_command.rb} +18 -18
  108. data/lib/morpheus/cli/{packages_command.rb → commands/packages_command.rb} +0 -2
  109. data/lib/morpheus/cli/{ping.rb → commands/ping.rb} +0 -7
  110. data/lib/morpheus/cli/{policies_command.rb → commands/policies_command.rb} +0 -7
  111. data/lib/morpheus/cli/{power_schedules_command.rb → commands/power_schedules_command.rb} +0 -0
  112. data/lib/morpheus/cli/{preseed_scripts_command.rb → commands/preseed_scripts_command.rb} +0 -3
  113. data/lib/morpheus/cli/{price_sets_command.rb → commands/price_sets_command.rb} +0 -0
  114. data/lib/morpheus/cli/{prices_command.rb → commands/prices_command.rb} +0 -0
  115. data/lib/morpheus/cli/{processes_command.rb → commands/processes_command.rb} +0 -1
  116. data/lib/morpheus/cli/{projects_command.rb → commands/projects_command.rb} +0 -0
  117. data/lib/morpheus/cli/{provisioning_licenses_command.rb → commands/provisioning_licenses_command.rb} +0 -0
  118. data/lib/morpheus/cli/{provisioning_settings_command.rb → commands/provisioning_settings_command.rb} +0 -0
  119. data/lib/morpheus/cli/{recent_activity_command.rb → commands/recent_activity_command.rb} +0 -0
  120. data/lib/morpheus/cli/{remote.rb → commands/remote.rb} +1 -7
  121. data/lib/morpheus/cli/{reports_command.rb → commands/reports_command.rb} +0 -2
  122. data/lib/morpheus/cli/commands/{standard/rm_command.rb → rm_command.rb} +0 -0
  123. data/lib/morpheus/cli/{roles.rb → commands/roles.rb} +244 -39
  124. data/lib/morpheus/cli/{search_command.rb → commands/search_command.rb} +0 -0
  125. data/lib/morpheus/cli/{security_group_rules.rb → commands/security_group_rules.rb} +0 -5
  126. data/lib/morpheus/cli/{security_groups.rb → commands/security_groups.rb} +0 -6
  127. data/lib/morpheus/cli/{service_catalog_command.rb → commands/service_catalog_command.rb} +0 -0
  128. data/lib/morpheus/cli/{service_plans_command.rb → commands/service_plans_command.rb} +0 -0
  129. data/lib/morpheus/cli/commands/{standard/set_prompt_command.rb → set_prompt_command.rb} +0 -3
  130. data/lib/morpheus/cli/{setup.rb → commands/setup.rb} +0 -0
  131. data/lib/morpheus/cli/{shell.rb → commands/shell.rb} +2 -103
  132. data/lib/morpheus/cli/commands/{standard/sleep_command.rb → sleep_command.rb} +0 -2
  133. data/lib/morpheus/cli/commands/{standard/source_command.rb → source_command.rb} +0 -2
  134. data/lib/morpheus/cli/commands/{standard/ssl_verification_command.rb → ssl_verification_command.rb} +0 -3
  135. data/lib/morpheus/cli/{storage_providers_command.rb → commands/storage_providers_command.rb} +0 -4
  136. data/lib/morpheus/cli/{subnets_command.rb → commands/subnets_command.rb} +0 -4
  137. data/lib/morpheus/cli/{tasks.rb → commands/tasks.rb} +0 -4
  138. data/lib/morpheus/cli/commands/{standard/tee_command.rb → tee_command.rb} +0 -0
  139. data/lib/morpheus/cli/{tenants_command.rb → commands/tenants_command.rb} +0 -7
  140. data/lib/morpheus/cli/commands/{standard/update_command.rb → update_command.rb} +0 -1
  141. data/lib/morpheus/cli/{usage_command.rb → commands/usage_command.rb} +0 -0
  142. data/lib/morpheus/cli/{user_groups_command.rb → commands/user_groups_command.rb} +0 -1
  143. data/lib/morpheus/cli/{user_settings_command.rb → commands/user_settings_command.rb} +0 -0
  144. data/lib/morpheus/cli/{user_sources_command.rb → commands/user_sources_command.rb} +0 -1
  145. data/lib/morpheus/cli/{users.rb → commands/users.rb} +0 -7
  146. data/lib/morpheus/cli/{vdi_allocations_command.rb → commands/vdi_allocations_command.rb} +0 -0
  147. data/lib/morpheus/cli/{vdi_apps_command.rb → commands/vdi_apps_command.rb} +0 -0
  148. data/lib/morpheus/cli/{vdi_command.rb → commands/vdi_command.rb} +0 -0
  149. data/lib/morpheus/cli/{vdi_gateways_command.rb → commands/vdi_gateways_command.rb} +0 -0
  150. data/lib/morpheus/cli/{vdi_pools_command.rb → commands/vdi_pools_command.rb} +0 -0
  151. data/lib/morpheus/cli/commands/{standard/version_command.rb → version_command.rb} +0 -0
  152. data/lib/morpheus/cli/{virtual_images.rb → commands/virtual_images.rb} +0 -4
  153. data/lib/morpheus/cli/{whitelabel_settings_command.rb → commands/whitelabel_settings_command.rb} +0 -1
  154. data/lib/morpheus/cli/{whoami.rb → commands/whoami.rb} +0 -4
  155. data/lib/morpheus/cli/{wiki_command.rb → commands/wiki_command.rb} +0 -5
  156. data/lib/morpheus/cli/{workflows.rb → commands/workflows.rb} +0 -3
  157. data/lib/morpheus/cli/mixins/logs_helper.rb +1 -1
  158. data/lib/morpheus/cli/mixins/print_helper.rb +1 -0
  159. data/lib/morpheus/cli/mixins/rest_command.rb +103 -17
  160. data/lib/morpheus/cli/mixins/secondary_rest_command.rb +105 -18
  161. data/lib/morpheus/cli/option_types.rb +56 -19
  162. data/lib/morpheus/cli/version.rb +1 -1
  163. data/lib/morpheus/cli.rb +4 -135
  164. data/lib/morpheus/terminal.rb +5 -6
  165. metadata +150 -144
  166. data/lib/morpheus/cli/change_password_command.rb +0 -147
  167. data/lib/morpheus/cli/library.rb +0 -1
  168. data/lib/morpheus/cli/logout.rb +0 -81
@@ -1,6 +1,4 @@
1
- require 'optparse'
2
1
  require 'morpheus/cli/cli_command'
3
- require 'json'
4
2
 
5
3
  class Morpheus::Cli::ReportsCommand
6
4
  include Morpheus::Cli::CliCommand
@@ -1,19 +1,19 @@
1
- # require 'yaml'
2
- require 'io/console'
3
- require 'rest_client'
4
- require 'optparse'
5
1
  require 'morpheus/cli/cli_command'
6
- require 'morpheus/cli/option_types'
7
- require 'morpheus/cli/mixins/accounts_helper'
8
- require 'morpheus/cli/mixins/provisioning_helper'
9
- require 'json'
10
2
 
11
3
  class Morpheus::Cli::Roles
12
4
  include Morpheus::Cli::CliCommand
13
5
  include Morpheus::Cli::AccountsHelper
14
6
  include Morpheus::Cli::ProvisioningHelper
15
7
  include Morpheus::Cli::WhoamiHelper
16
- register_subcommands :list, :get, :add, :update, :remove, :'list-permissions', :'update-feature-access', :'update-global-group-access', :'update-group-access', :'update-global-cloud-access', :'update-cloud-access', :'update-global-instance-type-access', :'update-instance-type-access', :'update-global-blueprint-access', :'update-blueprint-access', :'update-global-catalog-item-type-access', :'update-catalog-item-type-access', :'update-persona-access', :'update-global-vdi-pool-access', :'update-vdi-pool-access'
8
+ register_subcommands :list, :get, :add, :update, :remove,
9
+ :'list-permissions', :'update-feature-access', :'update-global-group-access',
10
+ :'update-group-access', :'update-global-cloud-access', :'update-cloud-access',
11
+ :'update-global-instance-type-access', :'update-instance-type-access',
12
+ :'update-global-blueprint-access', :'update-blueprint-access',
13
+ :'update-global-catalog-item-type-access', :'update-catalog-item-type-access',
14
+ :'update-persona-access',
15
+ :'update-global-vdi-pool-access', :'update-vdi-pool-access',
16
+ :'update-global-report-type-access', :'update-report-type-access'
17
17
  alias_subcommand :details, :get
18
18
  set_default_subcommand :list
19
19
 
@@ -110,6 +110,9 @@ class Morpheus::Cli::Roles
110
110
  opts.on(nil,'--vdi-pool-access', "Display VDI Pool Access") do
111
111
  options[:include_vdi_pool_access] = true
112
112
  end
113
+ opts.on(nil,'--report-type-access', "Display Report Type Access") do
114
+ options[:include_report_type_access] = true
115
+ end
113
116
  opts.on('-a','--all', "Display All Access Lists") do
114
117
  options[:include_feature_access] = true
115
118
  options[:include_group_access] = true
@@ -119,6 +122,7 @@ class Morpheus::Cli::Roles
119
122
  options[:include_catalog_item_type_access] = true
120
123
  options[:include_personas_access] = true
121
124
  options[:include_vdi_pool_access] = true
125
+ options[:include_report_type_access] = true
122
126
  end
123
127
  build_standard_get_options(opts, options)
124
128
  opts.footer = <<-EOT
@@ -225,6 +229,7 @@ EOT
225
229
  "Blueprints" => lambda {|it| get_access_string(it['globalAppTemplateAccess'] || it['globalBlueprintAccess']) },
226
230
  "Catalog Item Types" => lambda {|it| get_access_string(it['globalCatalogItemTypeAccess']) },
227
231
  "VDI Pools" => lambda {|it| get_access_string(it['globalVdiPoolAccess']) },
232
+ "Report Types" => lambda {|it| get_access_string(it['globalReportTypeAccess']) },
228
233
  }
229
234
  if role['roleType'].to_s.downcase == 'account'
230
235
  global_access_columns.delete("Groups")
@@ -378,7 +383,7 @@ EOT
378
383
  rows = vdi_pool_permissions.collect do |it|
379
384
  {
380
385
  name: it['name'],
381
- access: format_access_string(it['access'], ["none","read","full"]),
386
+ access: format_access_string(it['access'], ["none","full"]),
382
387
  }
383
388
  end
384
389
  print as_pretty_table(rows, [:name, :access], options)
@@ -390,6 +395,27 @@ EOT
390
395
  # print cyan,bold,"VDI Pool Access: #{get_access_string(json_response['globalVdiPoolAccess'])}",reset,"\n"
391
396
  end
392
397
 
398
+ report_type_global_access = json_response['globalReportTypeAccess']
399
+ report_type_permissions = json_response['reportTypePermissions'] || []
400
+ print cyan
401
+ if report_type_global_access == 'custom'
402
+ print_h2 "Report Type Access", options
403
+ if options[:include_report_type_access]
404
+ rows = report_type_permissions.collect do |it|
405
+ {
406
+ name: it['name'],
407
+ access: format_access_string(it['access'], ["none","full"]),
408
+ }
409
+ end
410
+ print as_pretty_table(rows, [:name, :access], options)
411
+ else
412
+ print cyan,"Use --report-type-access to list custom access","\n"
413
+ end
414
+ else
415
+ # print "\n"
416
+ # print cyan,bold,"Report Type Access: #{get_access_string(json_response['globalReportTypeAccess'])}",reset,"\n"
417
+ end
418
+
393
419
  end
394
420
  print reset,"\n"
395
421
 
@@ -765,6 +791,11 @@ EOT
765
791
  optparse = Morpheus::Cli::OptionParser.new do |opts|
766
792
  opts.banner = subcommand_usage("[name] [full|read|custom|none]")
767
793
  build_common_options(opts, options, [:json, :dry_run, :remote])
794
+ opts.footer = <<-EOT
795
+ Update global group access for a role.
796
+ [role] is required. This is the name (authority) or id of a role.
797
+ [access] is required. This is the access level to assign: full, read, custom or none.
798
+ EOT
768
799
  end
769
800
  optparse.parse!(args)
770
801
 
@@ -844,16 +875,14 @@ EOT
844
875
  access_value = args[2] if args[2]
845
876
  end
846
877
  if !group_id && !do_all
847
- raise_command_error("missing required argument: [group] or --all", optparse)
878
+ raise_command_error("missing required argument: [group] or --all", args, optparse)
848
879
  end
849
880
  if !access_value
850
- raise_command_error("missing required argument: [access]", optparse)
881
+ raise_command_error("missing required argument: [access]", args, optparse)
851
882
  end
852
883
  access_value = access_value.to_s.downcase
853
884
  if !allowed_access_values.include?(access_value)
854
- raise_command_error("invalid access value: #{access_value}", optparse)
855
- puts optparse
856
- return 1
885
+ raise_command_error("invalid access value: #{access_value}", args, optparse)
857
886
  end
858
887
 
859
888
  connect(options)
@@ -915,6 +944,11 @@ EOT
915
944
  optparse = Morpheus::Cli::OptionParser.new do |opts|
916
945
  opts.banner = subcommand_usage("[name] [full|custom|none]")
917
946
  build_common_options(opts, options, [:json, :dry_run, :remote])
947
+ opts.footer = <<-EOT
948
+ Update global cloud access for a role.
949
+ [role] is required. This is the name (authority) or id of a role.
950
+ [access] is required. This is the access level to assign: full, custom or none.
951
+ EOT
918
952
  end
919
953
  optparse.parse!(args)
920
954
 
@@ -993,16 +1027,14 @@ EOT
993
1027
  access_value = args[2] if args[2]
994
1028
  end
995
1029
  if !cloud_id && !do_all
996
- raise_command_error("missing required argument: [cloud] or --all", optparse)
1030
+ raise_command_error("missing required argument: [cloud] or --all", args, optparse)
997
1031
  end
998
1032
  if !access_value
999
- raise_command_error("missing required argument: [access]", optparse)
1033
+ raise_command_error("missing required argument: [access]", args, optparse)
1000
1034
  end
1001
1035
  access_value = access_value.to_s.downcase
1002
1036
  if !allowed_access_values.include?(access_value)
1003
- raise_command_error("invalid access value: #{access_value}", optparse)
1004
- puts optparse
1005
- return 1
1037
+ raise_command_error("invalid access value: #{access_value}", args, optparse)
1006
1038
  end
1007
1039
 
1008
1040
  connect(options)
@@ -1063,6 +1095,11 @@ EOT
1063
1095
  optparse = Morpheus::Cli::OptionParser.new do |opts|
1064
1096
  opts.banner = subcommand_usage("[role] [full|custom|none]")
1065
1097
  build_common_options(opts, options, [:json, :dry_run, :remote])
1098
+ opts.footer = <<-EOT
1099
+ Update global instance type access for a role.
1100
+ [role] is required. This is the name (authority) or id of a role.
1101
+ [access] is required. This is the access level to assign: full, custom or none.
1102
+ EOT
1066
1103
  end
1067
1104
  optparse.parse!(args)
1068
1105
 
@@ -1209,6 +1246,11 @@ EOT
1209
1246
  optparse = Morpheus::Cli::OptionParser.new do |opts|
1210
1247
  opts.banner = subcommand_usage("[role] [full|custom|none]")
1211
1248
  build_common_options(opts, options, [:json, :dry_run, :remote])
1249
+ opts.footer = <<-EOT
1250
+ Update global blueprint access for a role.
1251
+ [role] is required. This is the name (authority) or id of a role.
1252
+ [access] is required. This is the access level to assign: full, custom or none.
1253
+ EOT
1212
1254
  end
1213
1255
  optparse.parse!(args)
1214
1256
 
@@ -1288,16 +1330,14 @@ EOT
1288
1330
  access_value = args[2] if args[2]
1289
1331
  end
1290
1332
  if !blueprint_id && !do_all
1291
- raise_command_error("missing required argument: [blueprint] or --all", optparse)
1333
+ raise_command_error("missing required argument: [blueprint] or --all", args, optparse)
1292
1334
  end
1293
1335
  if !access_value
1294
- raise_command_error("missing required argument: [access]", optparse)
1336
+ raise_command_error("missing required argument: [access]", args, optparse)
1295
1337
  end
1296
1338
  access_value = access_value.to_s.downcase
1297
1339
  if !allowed_access_values.include?(access_value)
1298
- raise_command_error("invalid access value: #{access_value}", optparse)
1299
- puts optparse
1300
- return 1
1340
+ raise_command_error("invalid access value: #{access_value}", args, optparse)
1301
1341
  end
1302
1342
 
1303
1343
  connect(options)
@@ -1370,6 +1410,11 @@ EOT
1370
1410
  optparse = Morpheus::Cli::OptionParser.new do |opts|
1371
1411
  opts.banner = subcommand_usage("[role] [full|custom|none]")
1372
1412
  build_common_options(opts, options, [:json, :dry_run, :remote])
1413
+ opts.footer = <<-EOT
1414
+ Update global catalog item type access for a role.
1415
+ [role] is required. This is the name (authority) or id of a role.
1416
+ [access] is required. This is the access level to assign: full, custom or none.
1417
+ EOT
1373
1418
  end
1374
1419
  optparse.parse!(args)
1375
1420
 
@@ -1449,16 +1494,14 @@ EOT
1449
1494
  access_value = args[2] if args[2]
1450
1495
  end
1451
1496
  if !catalog_item_type_id && !do_all
1452
- raise_command_error("missing required argument: [catalog-item-type] or --all", optparse)
1497
+ raise_command_error("missing required argument: [catalog-item-type] or --all", args, optparse)
1453
1498
  end
1454
1499
  if !access_value
1455
- raise_command_error("missing required argument: [access]", optparse)
1500
+ raise_command_error("missing required argument: [access]", args, optparse)
1456
1501
  end
1457
1502
  access_value = access_value.to_s.downcase
1458
1503
  if !allowed_access_values.include?(access_value)
1459
- raise_command_error("invalid access value: #{access_value}", optparse)
1460
- puts optparse
1461
- return 1
1504
+ raise_command_error("invalid access value: #{access_value}", args, optparse)
1462
1505
  end
1463
1506
 
1464
1507
  connect(options)
@@ -1561,16 +1604,14 @@ EOT
1561
1604
  access_value = args[2] if args[2]
1562
1605
  end
1563
1606
  if !persona_id && !do_all
1564
- raise_command_error("missing required argument: [persona] or --all", optparse)
1607
+ raise_command_error("missing required argument: [persona] or --all", args, optparse)
1565
1608
  end
1566
1609
  if !access_value
1567
- raise_command_error("missing required argument: [access]", optparse)
1610
+ raise_command_error("missing required argument: [access]", args, optparse)
1568
1611
  end
1569
1612
  access_value = access_value.to_s.downcase
1570
1613
  if !allowed_access_values.include?(access_value)
1571
- raise_command_error("invalid access value: #{access_value}", optparse)
1572
- puts optparse
1573
- return 1
1614
+ raise_command_error("invalid access value: #{access_value}", args, optparse)
1574
1615
  end
1575
1616
 
1576
1617
  connect(options)
@@ -1622,13 +1663,18 @@ EOT
1622
1663
  optparse = Morpheus::Cli::OptionParser.new do |opts|
1623
1664
  opts.banner = subcommand_usage("[role] [full|custom|none]")
1624
1665
  build_common_options(opts, options, [:json, :dry_run, :remote])
1666
+ opts.footer = <<-EOT
1667
+ Update global VDI pool access for a role.
1668
+ [role] is required. This is the name (authority) or id of a role.
1669
+ [access] is required. This is the access level to assign: full, custom or none.
1670
+ EOT
1625
1671
  end
1626
1672
  optparse.parse!(args)
1627
1673
  verify_args!(args:args, optparse:optparse, count: 2)
1628
1674
  name = args[0]
1629
1675
  access_value = args[1].to_s.downcase
1630
1676
  if !['full', 'custom', 'none'].include?(access_value)
1631
- raise_command_error("invalid access value: #{args[1]}", optparse)
1677
+ raise_command_error("invalid access value: #{args[1]}", args, optparse)
1632
1678
  end
1633
1679
 
1634
1680
 
@@ -1696,14 +1742,14 @@ EOT
1696
1742
  access_value = args[2] if args[2]
1697
1743
  end
1698
1744
  if !vdi_pool_id && !do_all
1699
- raise_command_error("missing required argument: [vdi-pool] or --all", optparse)
1745
+ raise_command_error("missing required argument: [vdi-pool] or --all", args, optparse)
1700
1746
  end
1701
1747
  if !access_value
1702
- raise_command_error("missing required argument: [access]", optparse)
1748
+ raise_command_error("missing required argument: [access]", args, optparse)
1703
1749
  end
1704
1750
  access_value = access_value.to_s.downcase
1705
1751
  if !allowed_access_values.include?(access_value)
1706
- raise_command_error("invalid access value: #{access_value}", optparse)
1752
+ raise_command_error("invalid access value: #{access_value}", args, optparse)
1707
1753
  puts optparse
1708
1754
  return 1
1709
1755
  end
@@ -1770,6 +1816,165 @@ EOT
1770
1816
  end
1771
1817
  end
1772
1818
 
1819
+ def update_global_report_type_access(args)
1820
+ usage = "Usage: morpheus roles update-global-report-type-access [role] [full|custom|none]"
1821
+ options = {}
1822
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
1823
+ opts.banner = subcommand_usage("[role] [full|custom|none]")
1824
+ build_common_options(opts, options, [:json, :dry_run, :remote])
1825
+ opts.footer = <<-EOT
1826
+ Update global report type access for a role.
1827
+ [role] is required. This is the name (authority) or id of a role.
1828
+ [access] is required. This is the access level to assign: full, custom or none.
1829
+ EOT
1830
+ end
1831
+ optparse.parse!(args)
1832
+ verify_args!(args:args, optparse:optparse, count: 2)
1833
+ name = args[0]
1834
+ access_value = args[1].to_s.downcase
1835
+ if !['full', 'custom', 'none'].include?(access_value)
1836
+ raise_command_error("invalid access value: #{args[1]}", args, optparse)
1837
+ end
1838
+
1839
+
1840
+ connect(options)
1841
+ begin
1842
+ account = find_account_from_options(options)
1843
+ account_id = account ? account['id'] : nil
1844
+ role = find_role_by_name_or_id(account_id, name)
1845
+ exit 1 if role.nil?
1846
+ # note: ReportTypes being plural is odd, the others are singular
1847
+ params = {permissionCode: 'ReportTypes', access: access_value}
1848
+ @roles_interface.setopts(options)
1849
+ if options[:dry_run]
1850
+ print_dry_run @roles_interface.dry.update_permission(account_id, role['id'], params)
1851
+ return
1852
+ end
1853
+ json_response = @roles_interface.update_permission(account_id, role['id'], params)
1854
+
1855
+ if options[:json]
1856
+ print JSON.pretty_generate(json_response)
1857
+ print "\n"
1858
+ else
1859
+ print_green_success "Role #{role['authority']} global report type access updated"
1860
+ end
1861
+ rescue RestClient::Exception => e
1862
+ print_rest_exception(e, options)
1863
+ exit 1
1864
+ end
1865
+ end
1866
+
1867
+ def update_report_type_access(args)
1868
+ options = {}
1869
+ report_type_id = nil
1870
+ access_value = nil
1871
+ do_all = false
1872
+ allowed_access_values = ['full', 'none']
1873
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
1874
+ opts.banner = subcommand_usage("[role] [report-type] [access]")
1875
+ opts.on( '--report-type ID', String, "Report Type ID or Name" ) do |val|
1876
+ report_type_id = val
1877
+ end
1878
+ opts.on( nil, '--all', "Update all report types at once." ) do
1879
+ do_all = true
1880
+ end
1881
+ opts.on( '--access VALUE', String, "Access value [#{allowed_access_values.join('|')}]" ) do |val|
1882
+ access_value = val
1883
+ end
1884
+ build_common_options(opts, options, [:json, :dry_run, :remote])
1885
+ opts.footer = "Update role access for a report type or all report types.\n" +
1886
+ "[role] is required. This is the name or id of a role.\n" +
1887
+ "--report-type or --all is required. This is the name or id of a report type.\n" +
1888
+ "--access is required. This is the new access value. #{anded_list(allowed_access_values)}"
1889
+ end
1890
+ optparse.parse!(args)
1891
+
1892
+ # usage: update-report-type-access [role] [access] --all
1893
+ # update-report-type-access [role] [report-type] [access]
1894
+ name = args[0]
1895
+ if do_all
1896
+ verify_args!(args:args, optparse:optparse, min:1, max:2)
1897
+ access_value = args[1] if args[1]
1898
+ else
1899
+ verify_args!(args:args, optparse:optparse, min:1, max:3)
1900
+ report_type_id = args[1] if args[1]
1901
+ access_value = args[2] if args[2]
1902
+ end
1903
+ if !report_type_id && !do_all
1904
+ raise_command_error("missing required argument: [report-type] or --all", args, optparse)
1905
+ end
1906
+ if !access_value
1907
+ raise_command_error("missing required argument: [access]", args, optparse)
1908
+ end
1909
+ access_value = access_value.to_s.downcase
1910
+ if !allowed_access_values.include?(access_value)
1911
+ raise_command_error("invalid access value: #{access_value}", args, optparse)
1912
+ puts optparse
1913
+ return 1
1914
+ end
1915
+
1916
+ connect(options)
1917
+ begin
1918
+ account = find_account_from_options(options)
1919
+ account_id = account ? account['id'] : nil
1920
+ role = find_role_by_name_or_id(account_id, name)
1921
+ return 1 if role.nil?
1922
+
1923
+ role_json = @roles_interface.get(account_id, role['id'])
1924
+ report_type_global_access = role_json['globalReportTypeAccess']
1925
+ report_type_permissions = role_json['reportTypePermissions'] || []
1926
+ if report_type_global_access != 'custom'
1927
+ print "\n", red, "Global Report Type Access is currently: #{report_type_global_access.to_s.capitalize}"
1928
+ print "\n", "You must first set it to Custom via `morpheus roles update-global-report-type-access \"#{name}\" custom`"
1929
+ print "\n\n", reset
1930
+ return 1
1931
+ end
1932
+
1933
+ # hacky, but support name or code lookup via the list returned in the show payload
1934
+ report_type = nil
1935
+ if !do_all
1936
+ if report_type_id.to_s =~ /\A\d{1,}\Z/
1937
+ report_type = report_type_permissions.find {|b| b['id'] == report_type_id.to_i }
1938
+ else
1939
+ report_type = report_type_permissions.find {|b| b['name'] == report_type_id }
1940
+ end
1941
+ if report_type.nil?
1942
+ print_red_alert "Report Type not found: '#{report_type_id}'"
1943
+ return 1
1944
+ end
1945
+ end
1946
+
1947
+ params = {}
1948
+ if do_all
1949
+ params['allReportTypes'] = true
1950
+ else
1951
+ params['reportTypeId'] = report_type['id']
1952
+ end
1953
+ params['access'] = access_value
1954
+ @roles_interface.setopts(options)
1955
+ if options[:dry_run]
1956
+ print_dry_run @roles_interface.dry.update_report_type(account_id, role['id'], params)
1957
+ return
1958
+ end
1959
+ json_response = @roles_interface.update_report_type(account_id, role['id'], params)
1960
+
1961
+ if options[:json]
1962
+ print JSON.pretty_generate(json_response)
1963
+ print "\n"
1964
+ else
1965
+ if do_all
1966
+ print_green_success "Role #{role['authority']} access updated for all report types"
1967
+ else
1968
+ print_green_success "Role #{role['authority']} access updated for report type #{report_type['name']}"
1969
+ end
1970
+ end
1971
+ return 0
1972
+ rescue RestClient::Exception => e
1973
+ print_rest_exception(e, options)
1974
+ exit 1
1975
+ end
1976
+ end
1977
+
1773
1978
  private
1774
1979
 
1775
1980
  def add_role_option_types
@@ -1,8 +1,3 @@
1
- # require 'yaml'
2
- require 'io/console'
3
- require 'rest_client'
4
- require 'optparse'
5
- require 'filesize'
6
1
  require 'morpheus/cli/cli_command'
7
2
 
8
3
  class Morpheus::Cli::SecurityGroupRules
@@ -1,10 +1,4 @@
1
- # require 'yaml'
2
- require 'io/console'
3
- require 'rest_client'
4
- require 'optparse'
5
- require 'filesize'
6
1
  require 'morpheus/cli/cli_command'
7
- require 'morpheus/cli/mixins/infrastructure_helper'
8
2
 
9
3
  class Morpheus::Cli::SecurityGroups
10
4
  include Morpheus::Cli::CliCommand
@@ -1,6 +1,3 @@
1
- require 'optparse'
2
- require 'json'
3
- require 'morpheus/logging'
4
1
  require 'morpheus/cli/cli_command'
5
2
 
6
3
  class Morpheus::Cli::SetPromptCommand
File without changes
@@ -1,18 +1,6 @@
1
- # require 'yaml'
2
- require 'io/console'
3
- require 'rest_client'
4
- require 'optparse'
5
- require "shellwords"
6
- require 'readline'
7
- require 'logger'
8
- require 'fileutils'
9
- require 'morpheus/cli/cli_registry'
10
1
  require 'morpheus/cli/cli_command'
11
- require 'morpheus/cli/error_handler'
12
- require 'morpheus/cli/expression_parser'
13
- require 'morpheus/terminal'
14
- require 'morpheus/logging'
15
- require 'morpheus/benchmarking'
2
+ require "shellwords"
3
+ require "readline"
16
4
 
17
5
  #class Morpheus::Cli::Shell < Morpheus::Terminal
18
6
  class Morpheus::Cli::Shell
@@ -391,102 +379,14 @@ class Morpheus::Cli::Shell
391
379
  elsif input =~ /^\s*#/
392
380
  Morpheus::Logging::DarkPrinter.puts "ignored comment: #{input}" if Morpheus::Logging.debug?
393
381
  return 0
394
- # this is a full blown command now
395
- # elsif input =~ /^sleep/
396
- # sleep_sec = input.sub("sleep ", "").to_f
397
- # if (!(sleep_sec > 0))
398
- # # raise_command_error "sleep requires the argument [seconds]. eg. sleep 3.14"
399
- # puts_error "sleep requires argument [seconds]. eg. sleep 3.14"
400
- # return false
401
- # end
402
- # log_history_command(input)
403
- # Morpheus::Logging::DarkPrinter.puts "sleeping for #{sleep_sec}s ... zzzZzzzZ" if Morpheus::Logging.debug?
404
- # begin
405
- # sleep(sleep_sec)
406
- # rescue Interrupt
407
- # Morpheus::Logging::DarkPrinter.puts "\nInterrupt. waking up from sleep early"
408
- # end
409
- # return 0
410
- # elsif input =~ /^history/
411
- # n_commands = input.sub(/^history\s?/, '').sub(/\-n\s?/, '')
412
- # n_commands = n_commands.empty? ? 25 : n_commands.to_i
413
- # cmd_numbers = @history.keys.last(n_commands)
414
- # if cmd_numbers.size == 1
415
- # puts "Last command"
416
- # else
417
- # puts "Last #{cmd_numbers.size} commands"
418
- # end
419
- # cmd_numbers.each do |cmd_number|
420
- # cmd = @history[cmd_number]
421
- # puts "#{cmd_number.to_s.rjust(3, ' ')} #{cmd}"
422
- # end
423
- # last_cmd = cmd_numbers.last ? @history[cmd_numbers.last] : nil
424
- # if input != last_cmd # no consecutive
425
- # log_history_command(input)
426
- # end
427
- # return 0
428
382
  elsif input == 'clear'
429
383
  print "\e[H\e[2J"
430
384
  return 0
431
- # elsif input == 'flush-history' || input == 'flush_history'
432
- # file_path = history_file_path
433
- # if File.exists?(file_path)
434
- # File.truncate(file_path, 0)
435
- # end
436
- # @history = {}
437
- # @last_command_number = 0
438
- # @history_logger = load_history_logger
439
- # puts "history cleared!"
440
- # return 0
441
- # elsif input == "edit rc"
442
- # fn = Morpheus::Cli::DotFile.morpheusrc_filename
443
- # editor = ENV['EDITOR'] # || 'nano'
444
- # if !editor
445
- # puts "You have no EDITOR defined. Use 'export EDITOR=emacs'"
446
- # #puts "Trying nano..."
447
- # #editor = "nano"
448
- # end
449
- # system("which #{editor} > /dev/null 2>&1")
450
- # has_editor = $?.success?
451
- # if has_editor
452
- # puts "opening #{fn} for editing with #{editor} ..."
453
- # system("#{editor} #{fn}")
454
- # puts "Use 'reload' to re-execute your startup script #{File.basename(fn)}"
455
- # else
456
- # puts_error2 Morpheus::Terminal.angry_prompt
457
- # puts_error "The defined EDITOR '#{editor}' was not found on your system."
458
- # end
459
- # return 0 # $?
460
- # elsif input == "edit profile"
461
- # fn = Morpheus::Cli::DotFile.morpheus_profile_filename
462
- # editor = ENV['EDITOR'] # || 'nano'
463
- # if !editor
464
- # puts "You have no EDITOR defined. Use 'export EDITOR=emacs'."
465
- # #puts "Trying nano..."
466
- # #editor = "nano"
467
- # end
468
- # system("which #{editor} > /dev/null 2>&1")
469
- # has_editor = $?.success?
470
- # if has_editor
471
- # puts "opening #{fn} for editing with #{editor} ..."
472
- # `#{editor} #{fn}`
473
- # puts "Use 'reload' to re-execute your startup script #{File.basename(fn)}"
474
- # else
475
- # puts_error Morpheus::Terminal.angry_prompt
476
- # puts_error "The defined EDITOR '#{editor}' was not found on your system."
477
- # end
478
- # return 0 # $?
479
385
  elsif input == 'reload' || input == 'reload!'
480
- # raise RestartShellPlease
481
- #log_history_command(input)
482
- # could just fork instead?
483
386
  # clear registry
484
387
  Morpheus::Cli::CliRegistry.instance.flush
485
388
  # reload code
486
389
  Morpheus::Cli.load!
487
-
488
- # raise RestartShellPlease
489
-
490
390
  # execute startup scripts
491
391
  if File.exists?(Morpheus::Cli::DotFile.morpheus_profile_filename)
492
392
  Morpheus::Cli::DotFile.new(Morpheus::Cli::DotFile.morpheus_profile_filename).execute()
@@ -494,7 +394,6 @@ class Morpheus::Cli::Shell
494
394
  if File.exists?(Morpheus::Cli::DotFile.morpheusrc_filename)
495
395
  Morpheus::Cli::DotFile.new(Morpheus::Cli::DotFile.morpheusrc_filename).execute()
496
396
  end
497
-
498
397
  # recalculate shell environment
499
398
  reinitialize()
500
399
 
@@ -1,6 +1,4 @@
1
1
  require 'morpheus/cli/cli_command'
2
- require 'term/ansicolor'
3
- require 'json'
4
2
 
5
3
  # This is for use in dotfile scripts
6
4
  class Morpheus::Cli::Sleep
@@ -1,6 +1,4 @@
1
- require 'optparse'
2
1
  require 'morpheus/cli/cli_command'
3
- require 'json'
4
2
 
5
3
  # This is for use in dotfile scripts and the shell..
6
4
  class Morpheus::Cli::SourceCommand
@@ -1,7 +1,4 @@
1
- require 'optparse'
2
- require 'morpheus/rest_client'
3
1
  require 'morpheus/cli/cli_command'
4
- require 'json'
5
2
 
6
3
  # This is for use in dotfile scripts
7
4
  class Morpheus::Cli::SslVerificationCommand
@@ -1,8 +1,4 @@
1
- require 'rest_client'
2
- require 'optparse'
3
- require 'filesize'
4
1
  require 'morpheus/cli/cli_command'
5
- require 'morpheus/cli/mixins/infrastructure_helper'
6
2
 
7
3
  class Morpheus::Cli::StorageProvidersCommand
8
4
  include Morpheus::Cli::CliCommand
@@ -1,8 +1,4 @@
1
- require 'rest_client'
2
- require 'optparse'
3
- require 'filesize'
4
1
  require 'morpheus/cli/cli_command'
5
- require 'morpheus/cli/mixins/infrastructure_helper'
6
2
 
7
3
  class Morpheus::Cli::SubnetsCommand
8
4
  include Morpheus::Cli::CliCommand