morpheus-cli 5.4.0 → 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 (75) 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 +51 -9
  5. data/lib/morpheus/api/audit_interface.rb +9 -0
  6. data/lib/morpheus/api/instances_interface.rb +21 -0
  7. data/lib/morpheus/api/load_balancer_monitors_interface.rb +9 -0
  8. data/lib/morpheus/api/load_balancer_pools_interface.rb +4 -4
  9. data/lib/morpheus/api/load_balancer_profiles_interface.rb +4 -5
  10. data/lib/morpheus/api/load_balancer_virtual_servers_interface.rb +13 -4
  11. data/lib/morpheus/api/load_balancers_interface.rb +5 -0
  12. data/lib/morpheus/api/network_routers_interface.rb +9 -0
  13. data/lib/morpheus/api/network_static_routes_interface.rb +36 -0
  14. data/lib/morpheus/api/read_interface.rb +4 -3
  15. data/lib/morpheus/api/rest_interface.rb +3 -3
  16. data/lib/morpheus/api/secondary_read_interface.rb +1 -1
  17. data/lib/morpheus/api/secondary_rest_interface.rb +19 -19
  18. data/lib/morpheus/api/storage_server_types_interface.rb +14 -0
  19. data/lib/morpheus/api/storage_servers_interface.rb +9 -0
  20. data/lib/morpheus/api/storage_volume_types_interface.rb +9 -0
  21. data/lib/morpheus/api/storage_volumes_interface.rb +9 -0
  22. data/lib/morpheus/api/users_interface.rb +16 -63
  23. data/lib/morpheus/cli/cli_command.rb +253 -5
  24. data/lib/morpheus/cli/cli_registry.rb +1 -1
  25. data/lib/morpheus/cli/commands/alias_command.rb +1 -1
  26. data/lib/morpheus/cli/commands/apps.rb +14 -78
  27. data/lib/morpheus/cli/commands/audit.rb +188 -0
  28. data/lib/morpheus/cli/commands/blueprints_command.rb +1 -1
  29. data/lib/morpheus/cli/commands/change_password_command.rb +4 -4
  30. data/lib/morpheus/cli/commands/clusters.rb +37 -12
  31. data/lib/morpheus/cli/commands/hosts.rb +15 -15
  32. data/lib/morpheus/cli/commands/instances.rb +109 -2
  33. data/lib/morpheus/cli/commands/load_balancer_monitors.rb +71 -0
  34. data/lib/morpheus/cli/commands/load_balancer_pools.rb +30 -50
  35. data/lib/morpheus/cli/commands/load_balancer_profiles.rb +65 -0
  36. data/lib/morpheus/cli/commands/load_balancer_types.rb +9 -4
  37. data/lib/morpheus/cli/commands/load_balancer_virtual_servers.rb +77 -57
  38. data/lib/morpheus/cli/commands/load_balancers.rb +93 -6
  39. data/lib/morpheus/cli/commands/network_firewalls_command.rb +22 -5
  40. data/lib/morpheus/cli/commands/network_routers_command.rb +96 -45
  41. data/lib/morpheus/cli/commands/network_static_routes_command.rb +446 -0
  42. data/lib/morpheus/cli/commands/network_transport_zones_command.rb +4 -4
  43. data/lib/morpheus/cli/commands/open_command.rb +30 -0
  44. data/lib/morpheus/cli/commands/options.rb +98 -0
  45. data/lib/morpheus/cli/commands/policies_command.rb +1 -1
  46. data/lib/morpheus/cli/commands/prices_command.rb +7 -7
  47. data/lib/morpheus/cli/commands/remote.rb +4 -2
  48. data/lib/morpheus/cli/commands/roles.rb +1 -1
  49. data/lib/morpheus/cli/commands/shell.rb +2 -2
  50. data/lib/morpheus/cli/commands/storage_server_types.rb +50 -0
  51. data/lib/morpheus/cli/commands/storage_servers.rb +122 -0
  52. data/lib/morpheus/cli/commands/storage_volume_types.rb +50 -0
  53. data/lib/morpheus/cli/commands/storage_volumes.rb +103 -0
  54. data/lib/morpheus/cli/commands/tenants_command.rb +1 -1
  55. data/lib/morpheus/cli/commands/user_groups_command.rb +1 -1
  56. data/lib/morpheus/cli/commands/user_settings_command.rb +2 -1
  57. data/lib/morpheus/cli/commands/user_sources_command.rb +1 -1
  58. data/lib/morpheus/cli/commands/users.rb +28 -28
  59. data/lib/morpheus/cli/commands/view.rb +102 -0
  60. data/lib/morpheus/cli/mixins/accounts_helper.rb +5 -5
  61. data/lib/morpheus/cli/mixins/load_balancers_helper.rb +24 -4
  62. data/lib/morpheus/cli/mixins/print_helper.rb +50 -18
  63. data/lib/morpheus/cli/mixins/processes_helper.rb +1 -2
  64. data/lib/morpheus/cli/mixins/provisioning_helper.rb +15 -5
  65. data/lib/morpheus/cli/mixins/rest_command.rb +145 -73
  66. data/lib/morpheus/cli/mixins/secondary_rest_command.rb +174 -81
  67. data/lib/morpheus/cli/mixins/storage_servers_helper.rb +156 -0
  68. data/lib/morpheus/cli/mixins/storage_volumes_helper.rb +119 -0
  69. data/lib/morpheus/cli/option_types.rb +45 -24
  70. data/lib/morpheus/cli/version.rb +1 -1
  71. data/lib/morpheus/cli.rb +1 -0
  72. data/lib/morpheus/ext/string.rb +29 -6
  73. data/lib/morpheus/routes.rb +238 -0
  74. data/lib/morpheus/util.rb +6 -1
  75. metadata +29 -8
@@ -17,7 +17,8 @@ class Morpheus::Cli::Remote
17
17
 
18
18
  set_default_subcommand :list
19
19
 
20
- set_subcommands_hidden :setup # this is going away too
20
+ set_subcommands_hidden :setup # moved to 'setup'
21
+ set_subcommands_hidden :view # moved to 'view'
21
22
 
22
23
  def initialize()
23
24
  @appliance_name, @appliance_url = Morpheus::Cli::Remote.active_appliance
@@ -895,6 +896,7 @@ EOT
895
896
  end
896
897
 
897
898
  def view(args)
899
+ print_error "#{yellow}DEPRECATION WARNING: `remote view` has been deprecated and replaced with `view`. Please use `view` instead.#{reset}\n"
898
900
  options = {}
899
901
  path = "/"
900
902
  no_auth = false
@@ -903,7 +905,7 @@ EOT
903
905
  opts.on('--path PATH', String, "Specify a path to load. eg '/logs'" ) do |val|
904
906
  path = val
905
907
  end
906
- opts.on('--no-auth PATH', String, "Do not attempt to login with access token." ) do |val|
908
+ opts.on('--no-auth', "Do not attempt to login with access token." ) do |val|
907
909
  no_auth = true
908
910
  end
909
911
  build_common_options(opts, options, [:dry_run])
@@ -20,7 +20,7 @@ class Morpheus::Cli::Roles
20
20
  def connect(opts)
21
21
  @api_client = establish_remote_appliance_connection(opts)
22
22
  @whoami_interface = @api_client.whoami
23
- @users_interface = @api_client.users
23
+ @account_users_interface = @api_client.account_users
24
24
  @accounts_interface = @api_client.accounts
25
25
  @roles_interface = @api_client.roles
26
26
  @groups_interface = @api_client.groups
@@ -723,10 +723,10 @@ class Morpheus::Cli::Shell
723
723
  end
724
724
  if options[:show_pagination]
725
725
  if options[:phrase] || options[:sort] || options[:direction] || options[:offset]
726
- print_results_pagination({:meta => history_result[:meta]})
726
+ print_results_pagination(history_result[:meta])
727
727
  else
728
728
  # default order is weird, it's the last page of results, 1-25 is misleading and showing the indexes is stranger
729
- print_results_pagination({:meta => history_result[:meta]}, {:message =>"Viewing most recent %{size} of %{total} %{label}"})
729
+ print_results_pagination(history_result[:meta], {:message =>"Viewing most recent %{size} of %{total} %{label}"})
730
730
  end
731
731
  print reset, "\n"
732
732
  else
@@ -0,0 +1,50 @@
1
+ require 'morpheus/cli/cli_command'
2
+
3
+ class Morpheus::Cli::StorageServerTypes
4
+ include Morpheus::Cli::CliCommand
5
+ include Morpheus::Cli::RestCommand
6
+ include Morpheus::Cli::StorageServersHelper
7
+
8
+ set_command_description "View storage server types"
9
+ set_command_name :'storage-server-types'
10
+ register_subcommands :list, :get
11
+
12
+ # register_interfaces :storage_server_types
13
+
14
+ protected
15
+
16
+ def storage_server_type_list_column_definitions(options)
17
+ {
18
+ "ID" => 'id',
19
+ "Name" => 'name',
20
+ "Code" => 'code',
21
+ "Description" => 'description',
22
+ }
23
+ end
24
+
25
+ def storage_server_type_column_definitions(options)
26
+ {
27
+ "ID" => 'id',
28
+ "Name" => 'name',
29
+ "Code" => 'code',
30
+ "Description" => 'description',
31
+ "Creatable" => lambda {|it| format_boolean(it['creatable']) },
32
+ "Create Namespaces" => lambda {|it| format_boolean(it['createNamespaces']) },
33
+ "Create Groups" => lambda {|it| format_boolean(it['createGroups']) },
34
+ "Create Hosts" => lambda {|it| format_boolean(it['createHosts']) },
35
+ "Create Disks" => lambda {|it| format_boolean(it['createDisks']) },
36
+ "Has Namespaces" => lambda {|it| format_boolean(it['hasNamespaces']) },
37
+ "Has Groups" => lambda {|it| format_boolean(it['hasGroups']) },
38
+ "Has Hosts" => lambda {|it| format_boolean(it['hasHosts']) },
39
+ "Has Disks" => lambda {|it| format_boolean(it['hasDisks']) },
40
+ "Has File Browser" => lambda {|it| format_boolean(it['hasFileBrowser']) },
41
+ }
42
+ end
43
+
44
+ # overridden to support name or code
45
+ def find_storage_server_type_by_name_or_id(name)
46
+ storage_server_type_for_name_or_id(name)
47
+ end
48
+
49
+ end
50
+
@@ -0,0 +1,122 @@
1
+ require 'morpheus/cli/cli_command'
2
+
3
+ class Morpheus::Cli::StorageServers
4
+ include Morpheus::Cli::CliCommand
5
+ include Morpheus::Cli::RestCommand
6
+ include Morpheus::Cli::StorageServersHelper
7
+
8
+ set_command_name :'storage-servers'
9
+ set_command_description "View and manage storage servers."
10
+ register_subcommands :list, :get, :add, :update, :remove
11
+
12
+ # RestCommand settings
13
+ register_interfaces :storage_servers, :storage_server_types
14
+ set_rest_has_type true
15
+ # set_rest_type :storage_server_types
16
+
17
+ def render_response_for_get(json_response, options)
18
+ render_response(json_response, options, rest_object_key) do
19
+ record = json_response[rest_object_key]
20
+ print_h1 rest_label, [], options
21
+ print cyan
22
+ print_description_list(rest_column_definitions(options), record, options)
23
+ # show Storage Server Configuration
24
+ config = record['config']
25
+ if config && !config.empty?
26
+ print_h2 "Configuration"
27
+ print_description_list(config.keys, config)
28
+ end
29
+ print reset,"\n"
30
+ end
31
+ end
32
+
33
+ protected
34
+
35
+ def storage_server_list_column_definitions(options)
36
+ {
37
+ "ID" => 'id',
38
+ "Name" => 'name',
39
+ "Type" => lambda {|it| it['type'] ? it['type']['name'] : '' },
40
+ "Service URL" => lambda {|it| it['serviceUrl'] },
41
+ "Tenants" => lambda {|it|
42
+ if it['tenants'] && !it['tenants'].empty?
43
+ it['tenants'].collect {|account| account['name'] }.join(', ')
44
+ else
45
+ it['owner'] ? it['owner']['name'] : (it['account'] ? it['account']['name'] : nil)
46
+ end
47
+ },
48
+ "Status" => lambda {|it| format_storage_server_status(it) },
49
+ }
50
+ end
51
+
52
+ def storage_server_column_definitions(options)
53
+ {
54
+ "ID" => 'id',
55
+ "Name" => 'name',
56
+ "Description" => 'description',
57
+ "Type" => lambda {|it| it['type'] ? it['type']['name'] : '' },
58
+ "Service URL" => lambda {|it| it['serviceUrl'] },
59
+ "Service Username" => lambda {|it| it['serviceUsername'] },
60
+ "Tenants" => lambda {|it| it['tenants'].collect {|account| account['name'] }.join(', ') },
61
+ "Owner" => lambda {|it| it['owner'] ? it['owner']['name'] : (it['account'] ? it['account']['name'] : nil) },
62
+ "Enabled" => lambda {|it| format_boolean(it['enabled']) },
63
+ "Status" => lambda {|it| format_storage_server_status(it) },
64
+ "Created" => lambda {|it| format_local_dt(it['dateCreated']) },
65
+ "Updated" => lambda {|it| format_local_dt(it['lastUpdated']) }
66
+ }
67
+ end
68
+
69
+ # overridden to work with name or code
70
+ # nope, api works with name=code now too
71
+ # def find_storage_server_type_by_name_or_id(name)
72
+ # storage_server_type_for_name_or_id(name)
73
+ # end
74
+
75
+ def add_storage_server_option_types()
76
+ [
77
+ {'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => true},
78
+ {'fieldName' => 'description', 'fieldLabel' => 'Description', 'type' => 'text', 'required' => false},
79
+ {'fieldName' => 'enabled', 'fieldLabel' => 'Enabled', 'type' => 'checkbox', 'required' => false, 'defaultValue' => true},
80
+ # {'fieldName' => 'type', 'fieldLabel' => 'Storage Server Type', 'type' => 'select', 'optionSource' => 'storageServerTypes', 'required' => true},
81
+ ]
82
+ end
83
+
84
+ def add_storage_server_advanced_option_types()
85
+ [
86
+ {'fieldName' => 'visibility', 'fieldLabel' => 'Visibility', 'fieldGroup' => 'Advanced', 'type' => 'select', 'selectOptions' => [{'name' => 'Private', 'value' => 'private'},{'name' => 'Public', 'value' => 'public'}], 'required' => false, 'description' => 'Visibility', 'category' => 'permissions'},
87
+ {'fieldName' => 'tenants', 'fieldLabel' => 'Tenants', 'fieldGroup' => 'Advanced', 'type' => 'multiSelect', 'optionSource' => lambda { |api_client, api_params|
88
+ api_client.options.options_for_source("allTenants", {})['data']
89
+ }},
90
+ ]
91
+ end
92
+
93
+ def update_storage_server_option_types()
94
+ [
95
+ {'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text'},
96
+ {'fieldName' => 'description', 'fieldLabel' => 'Description', 'type' => 'text'},
97
+ {'fieldName' => 'enabled', 'fieldLabel' => 'Enabled', 'type' => 'checkbox'},
98
+ ]
99
+ end
100
+
101
+ def update_storage_server_advanced_option_types()
102
+ add_storage_server_advanced_option_types()
103
+ end
104
+
105
+ def format_storage_server_status(storage_server, return_color=cyan)
106
+ out = ""
107
+ status_string = storage_server['status']
108
+ if storage_server['enabled'] == false
109
+ out << "#{red}DISABLED#{return_color}"
110
+ elsif status_string.nil? || status_string.empty? || status_string == "unknown"
111
+ out << "#{white}UNKNOWN#{return_color}"
112
+ elsif status_string == 'ok'
113
+ out << "#{green}#{status_string.upcase}#{return_color}"
114
+ elsif status_string == 'syncing'
115
+ out << "#{yellow}#{status_string.upcase}#{return_color}"
116
+ else
117
+ out << "#{red}#{status_string ? status_string.upcase : 'N/A'}#{storage_server['statusMessage'] ? "#{return_color} - #{storage_server['statusMessage']}" : ''}#{return_color}"
118
+ end
119
+ out
120
+ end
121
+
122
+ end
@@ -0,0 +1,50 @@
1
+ require 'morpheus/cli/cli_command'
2
+
3
+ class Morpheus::Cli::StorageVolumeTypes
4
+ include Morpheus::Cli::CliCommand
5
+ include Morpheus::Cli::RestCommand
6
+ include Morpheus::Cli::StorageVolumesHelper
7
+
8
+ set_command_name :'storage-volume-types'
9
+ register_subcommands :list, :get
10
+
11
+ # register_interfaces :storage_volume_types
12
+
13
+ protected
14
+
15
+ def build_list_options(opts, options, params)
16
+ opts.on('--name VALUE', String, "Filter by name") do |val|
17
+ params['name'] = val
18
+ end
19
+ opts.on('--category VALUE', String, "Filter by category") do |val|
20
+ params['category'] = val
21
+ end
22
+ # build_standard_list_options(opts, options)
23
+ super
24
+ end
25
+
26
+ def storage_volume_type_list_column_definitions(options)
27
+ {
28
+ "ID" => 'id',
29
+ "Name" => 'name',
30
+ "Code" => 'code',
31
+ "Description" => 'description',
32
+ }
33
+ end
34
+
35
+ def storage_volume_type_column_definitions(options)
36
+ {
37
+ "ID" => 'id',
38
+ "Name" => 'name',
39
+ "Code" => 'code',
40
+ "Description" => 'description',
41
+ }
42
+ end
43
+
44
+ # overridden to support name or code
45
+ def find_storage_volume_type_by_name_or_id(name)
46
+ storage_volume_type_for_name_or_id(name)
47
+ end
48
+
49
+ end
50
+
@@ -0,0 +1,103 @@
1
+ require 'morpheus/cli/cli_command'
2
+
3
+ class Morpheus::Cli::StorageVolumes
4
+ include Morpheus::Cli::CliCommand
5
+ include Morpheus::Cli::RestCommand
6
+ include Morpheus::Cli::StorageVolumesHelper
7
+
8
+ set_command_name :'storage-volumes'
9
+ set_command_description "View and manage storage volumes."
10
+ register_subcommands %w{list get add remove}
11
+
12
+ # RestCommand settings
13
+ register_interfaces :storage_volumes, :storage_volume_types
14
+ set_rest_has_type true
15
+
16
+ protected
17
+
18
+ def build_list_options(opts, options, params)
19
+ opts.on('--storage-server VALUE', String, "Storage Server Name or ID") do |val|
20
+ options[:storage_server] = val
21
+ end
22
+ opts.on('-t', '--type TYPE', "Filter by type") do |val|
23
+ params['type'] = val
24
+ end
25
+ opts.on('--name VALUE', String, "Filter by name") do |val|
26
+ params['name'] = val
27
+ end
28
+ opts.on('--category VALUE', String, "Filter by category") do |val|
29
+ params['category'] = val
30
+ end
31
+ # build_standard_list_options(opts, options)
32
+ super
33
+ end
34
+
35
+ def parse_list_options!(args, options, params)
36
+ parse_parameter_as_resource_id!(:storage_server, options, params)
37
+ super
38
+ end
39
+
40
+ def storage_volume_list_column_definitions(options)
41
+ {
42
+ "ID" => 'id',
43
+ "Name" => 'name',
44
+ "Type" => lambda {|it| it['type'] ? it['type']['name'] : '' },
45
+ "Source" => lambda {|it| format_storage_volume_source(it) },
46
+ "Storage" => lambda {|it| format_bytes(it['maxStorage']) },
47
+ "Status" => lambda {|it| format_storage_volume_status(it) },
48
+ }
49
+ end
50
+
51
+ def storage_volume_column_definitions(options)
52
+ {
53
+ "ID" => 'id',
54
+ "Name" => 'name',
55
+ "Description" => 'description',
56
+ "Type" => lambda {|it| it['type'] ? it['type']['name'] : '' },
57
+ "Owner" => lambda {|it| it['owner'] ? it['owner']['name'] : (it['account'] ? it['account']['name'] : nil) },
58
+ "Cloud" => lambda {|it| it['zone']['name'] rescue '' },
59
+ "Datastore" => lambda {|it| it['datastore']['name'] rescue '' },
60
+ "Storage Group" => lambda {|it| it['storageGroup']['name'] rescue '' },
61
+ "Storage Server" => lambda {|it| it['storageServer']['name'] rescue '' },
62
+ "Source" => lambda {|it| format_storage_volume_source(it) },
63
+ "Storage" => lambda {|it| format_bytes(it['maxStorage']) },
64
+ "Status" => lambda {|it| format_storage_volume_status(it) },
65
+ }
66
+ end
67
+
68
+ # overridden to work with name or code
69
+ # nope, api works with name=code now too
70
+ # def find_storage_volume_type_by_name_or_id(name)
71
+ # storage_volume_type_for_name_or_id(name)
72
+ # end
73
+
74
+ def add_storage_volume_option_types()
75
+ [
76
+ {'fieldContext' => 'storageServer', 'fieldName' => 'id', 'fieldLabel' => 'Storage Server', 'type' => 'select', 'optionSource' => 'storageServers', 'optionParams' => {'createType' => 'block'}, 'required' => true},
77
+ {'fieldContext' => 'storageGroup', 'fieldName' => 'id', 'fieldLabel' => 'Storage Group', 'type' => 'select', 'optionSource' => 'storageGroups', 'required' => true},
78
+ {'shorthand' => '-t', 'fieldName' => 'type', 'fieldLabel' => 'Storage Volume Type', 'type' => 'select', 'optionSource' => 'storageVolumeTypes', 'required' => true},
79
+ {'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => true},
80
+ ]
81
+ end
82
+
83
+ def update_storage_volume_option_types()
84
+ [
85
+ {'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text'},
86
+ ]
87
+ end
88
+
89
+ def load_option_types_for_storage_volume(type_record, parent_record)
90
+ storage_volume_type = type_record
91
+ option_types = storage_volume_type['optionTypes']
92
+ # ughhh, all this to change a label for API which uses bytes and not MB
93
+ if option_types
94
+ size_option_type = option_types.find {|it| it['fieldName'] == 'maxStorage' }
95
+ if size_option_type
96
+ #size_option_type['fieldLabel'] = "Volume Size (bytes)"
97
+ size_option_type['fieldAddOn'] = "bytes"
98
+ end
99
+ end
100
+ return option_types
101
+ end
102
+
103
+ end
@@ -18,7 +18,7 @@ class Morpheus::Cli::TenantsCommand
18
18
 
19
19
  def connect(opts)
20
20
  @api_client = establish_remote_appliance_connection(opts)
21
- @users_interface = @api_client.users
21
+ @account_users_interface = @api_client.account_users
22
22
  @accounts_interface = @api_client.accounts
23
23
  @roles_interface = @api_client.roles
24
24
  end
@@ -12,7 +12,7 @@ class Morpheus::Cli::UserGroupsCommand
12
12
  def connect(opts)
13
13
  @api_client = establish_remote_appliance_connection(opts)
14
14
  @user_groups_interface = @api_client.user_groups
15
- @users_interface = @api_client.users
15
+ @account_users_interface = @api_client.account_users
16
16
  @accounts_interface = @api_client.accounts
17
17
  end
18
18
 
@@ -17,7 +17,8 @@ class Morpheus::Cli::UserSettingsCommand
17
17
  def connect(opts)
18
18
  @api_client = establish_remote_appliance_connection(opts)
19
19
  @user_settings_interface = @api_client.user_settings
20
- @users_interface = @api_client.users
20
+ @accounts_interface = @api_client.accounts
21
+ @account_users_interface = @api_client.account_users
21
22
  end
22
23
 
23
24
  def handle(args)
@@ -21,7 +21,7 @@ class Morpheus::Cli::UserSourcesCommand
21
21
  @api_client = establish_remote_appliance_connection(opts)
22
22
  @user_sources_interface = @api_client.user_sources
23
23
  @accounts_interface = @api_client.accounts
24
- @users_interface = @api_client.users
24
+ @account_users_interface = @api_client.account_users
25
25
  end
26
26
 
27
27
  def handle(args)
@@ -15,7 +15,7 @@ class Morpheus::Cli::Users
15
15
 
16
16
  def connect(opts)
17
17
  @api_client = establish_remote_appliance_connection(opts)
18
- @users_interface = @api_client.users
18
+ @account_users_interface = @api_client.account_users
19
19
  @accounts_interface = @api_client.accounts
20
20
  @roles_interface = @api_client.roles
21
21
  end
@@ -55,12 +55,12 @@ class Morpheus::Cli::Users
55
55
  account_id = account ? account['id'] : nil
56
56
  params['global'] = true if options[:global]
57
57
  params.merge!(parse_list_options(options))
58
- @users_interface.setopts(options)
58
+ @account_users_interface.setopts(options)
59
59
  if options[:dry_run]
60
- print_dry_run @users_interface.dry.list(account_id, params)
60
+ print_dry_run @account_users_interface.dry.list(account_id, params)
61
61
  return 0, nil
62
62
  end
63
- json_response = @users_interface.list(account_id, params)
63
+ json_response = @account_users_interface.list(account_id, params)
64
64
  render_response(json_response, options, "users") do
65
65
  users = json_response['users']
66
66
  title = "Morpheus Users"
@@ -103,12 +103,12 @@ class Morpheus::Cli::Users
103
103
  account_id = account ? account['id'] : nil
104
104
  params['global'] = true if options[:global]
105
105
  params.merge!(parse_list_options(options))
106
- @users_interface.setopts(options)
106
+ @account_users_interface.setopts(options)
107
107
  if options[:dry_run]
108
- print_dry_run @users_interface.dry.list(account_id, params)
108
+ print_dry_run @account_users_interface.dry.list(account_id, params)
109
109
  return
110
110
  end
111
- json_response = @users_interface.list(account_id, params)
111
+ json_response = @account_users_interface.list(account_id, params)
112
112
  # print number only
113
113
  if json_response['meta'] && json_response['meta']['total']
114
114
  print cyan, json_response['meta']['total'], reset, "\n"
@@ -195,12 +195,12 @@ EOT
195
195
  account = find_account_from_options(options)
196
196
  account_id = account ? account['id'] : nil
197
197
  params['global'] = true if options[:global]
198
- @users_interface.setopts(options)
198
+ @account_users_interface.setopts(options)
199
199
  if options[:dry_run]
200
200
  if args[0].to_s =~ /\A\d{1,}\Z/
201
- print_dry_run @users_interface.dry.get(account_id, args[0].to_i, params)
201
+ print_dry_run @account_users_interface.dry.get(account_id, args[0].to_i, params)
202
202
  else
203
- print_dry_run @users_interface.dry.list(account_id, params.merge({username: args[0]}))
203
+ print_dry_run @account_users_interface.dry.list(account_id, params.merge({username: args[0]}))
204
204
  end
205
205
  return
206
206
  end
@@ -213,7 +213,7 @@ EOT
213
213
  user_id = user['id']
214
214
  end
215
215
  # always get by id, index does not return 'access'
216
- json_response = @users_interface.get(account_id, user_id, params)
216
+ json_response = @account_users_interface.get(account_id, user_id, params)
217
217
  user = json_response['user']
218
218
  render_response(json_response, options, "user") do
219
219
  is_tenant_account = current_account['id'] != user['account']['id']
@@ -223,7 +223,7 @@ EOT
223
223
 
224
224
  # backward compatibility
225
225
  if user['access'].nil? && options[:include_features_access]
226
- user_feature_permissions_json = @users_interface.feature_permissions(account_id, user['id'])
226
+ user_feature_permissions_json = @account_users_interface.feature_permissions(account_id, user['id'])
227
227
  user_feature_permissions = user_feature_permissions_json['permissions'] || user_feature_permissions_json['featurePermissions']
228
228
 
229
229
  if user_feature_permissions
@@ -308,15 +308,15 @@ EOT
308
308
  params['global'] = true if options[:global]
309
309
  user = find_user_by_username_or_id(account_id, args[0], params)
310
310
  return 1 if user.nil?
311
- @users_interface.setopts(options)
311
+ @account_users_interface.setopts(options)
312
312
  if options[:dry_run]
313
- print_dry_run @users_interface.dry.permissions(account_id, user['id'])
313
+ print_dry_run @account_users_interface.dry.permissions(account_id, user['id'])
314
314
  return
315
315
  end
316
316
 
317
317
  is_tenant_account = current_account['id'] != user['account']['id']
318
318
 
319
- json_response = @users_interface.permissions(account_id, user['id'])
319
+ json_response = @account_users_interface.permissions(account_id, user['id'])
320
320
 
321
321
  # backward compatibility
322
322
  if !json_response['permissions'].nil?
@@ -460,12 +460,12 @@ EOT
460
460
  puts as_json(payload, options)
461
461
  return 0
462
462
  end
463
- @users_interface.setopts(options)
463
+ @account_users_interface.setopts(options)
464
464
  if options[:dry_run]
465
- print_dry_run @users_interface.dry.create(account_id, payload)
465
+ print_dry_run @account_users_interface.dry.create(account_id, payload)
466
466
  return
467
467
  end
468
- json_response = @users_interface.create(account_id, payload)
468
+ json_response = @account_users_interface.create(account_id, payload)
469
469
  if options[:json]
470
470
  print JSON.pretty_generate(json_response)
471
471
  print "\n"
@@ -545,12 +545,12 @@ EOT
545
545
  end
546
546
  end
547
547
 
548
- @users_interface.setopts(options)
548
+ @account_users_interface.setopts(options)
549
549
  if options[:dry_run]
550
- print_dry_run @users_interface.dry.update(account_id, user['id'], payload)
550
+ print_dry_run @account_users_interface.dry.update(account_id, user['id'], payload)
551
551
  return
552
552
  end
553
- json_response = @users_interface.update(account_id, user['id'], payload)
553
+ json_response = @account_users_interface.update(account_id, user['id'], payload)
554
554
  user = json_response['user']
555
555
  if options[:json]
556
556
  print JSON.pretty_generate(json_response)
@@ -645,12 +645,12 @@ EOT
645
645
  }
646
646
 
647
647
  end
648
- @users_interface.setopts(options)
648
+ @account_users_interface.setopts(options)
649
649
  if options[:dry_run]
650
- print_dry_run @users_interface.dry.update(account_id, user['id'], payload)
650
+ print_dry_run @account_users_interface.dry.update(account_id, user['id'], payload)
651
651
  return
652
652
  end
653
- json_response = @users_interface.update(account_id, user['id'], payload)
653
+ json_response = @account_users_interface.update(account_id, user['id'], payload)
654
654
  render_response(json_response, optparse, "user") do
655
655
  print_green_success "Updated password for user #{user['username']}"
656
656
  end
@@ -684,12 +684,12 @@ EOT
684
684
  unless options[:yes] || Morpheus::Cli::OptionTypes.confirm("Are you sure you want to delete the user #{user['username']}?")
685
685
  exit 9, "arborted"
686
686
  end
687
- @users_interface.setopts(options)
687
+ @account_users_interface.setopts(options)
688
688
  if options[:dry_run]
689
- print_dry_run @users_interface.dry.destroy(account_id, user['id'])
689
+ print_dry_run @account_users_interface.dry.destroy(account_id, user['id'])
690
690
  return 0
691
691
  end
692
- json_response = @users_interface.destroy(account_id, user['id'])
692
+ json_response = @account_users_interface.destroy(account_id, user['id'])
693
693
 
694
694
  if options[:json]
695
695
  print JSON.pretty_generate(json_response)
@@ -759,7 +759,7 @@ EOT
759
759
  end
760
760
  end
761
761
 
762
- available_roles = @users_interface.available_roles(account_id, user_id)['roles']
762
+ available_roles = @account_users_interface.available_roles(account_id, user_id)['roles']
763
763
 
764
764
  if available_roles.empty?
765
765
  print_red_alert "No available roles found."