morpheus-cli 4.1.8 → 4.1.9
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.
- checksums.yaml +4 -4
- data/Dockerfile +1 -1
- data/lib/morpheus/api/api_client.rb +24 -0
- data/lib/morpheus/api/{old_cypher_interface.rb → budgets_interface.rb} +10 -11
- data/lib/morpheus/api/cloud_datastores_interface.rb +7 -0
- data/lib/morpheus/api/cloud_resource_pools_interface.rb +2 -2
- data/lib/morpheus/api/cypher_interface.rb +18 -12
- data/lib/morpheus/api/health_interface.rb +72 -0
- data/lib/morpheus/api/instances_interface.rb +1 -1
- data/lib/morpheus/api/library_instance_types_interface.rb +7 -0
- data/lib/morpheus/api/log_settings_interface.rb +6 -0
- data/lib/morpheus/api/network_security_servers_interface.rb +30 -0
- data/lib/morpheus/api/price_sets_interface.rb +42 -0
- data/lib/morpheus/api/prices_interface.rb +68 -0
- data/lib/morpheus/api/provisioning_settings_interface.rb +29 -0
- data/lib/morpheus/api/servers_interface.rb +1 -1
- data/lib/morpheus/api/service_plans_interface.rb +34 -11
- data/lib/morpheus/api/task_sets_interface.rb +8 -0
- data/lib/morpheus/api/tasks_interface.rb +8 -0
- data/lib/morpheus/cli.rb +6 -3
- data/lib/morpheus/cli/appliance_settings_command.rb +13 -5
- data/lib/morpheus/cli/approvals_command.rb +1 -1
- data/lib/morpheus/cli/apps.rb +88 -28
- data/lib/morpheus/cli/backup_settings_command.rb +1 -1
- data/lib/morpheus/cli/blueprints_command.rb +2 -0
- data/lib/morpheus/cli/budgets_command.rb +672 -0
- data/lib/morpheus/cli/cli_command.rb +13 -2
- data/lib/morpheus/cli/cli_registry.rb +1 -0
- data/lib/morpheus/cli/clusters.rb +40 -274
- data/lib/morpheus/cli/commands/standard/benchmark_command.rb +114 -66
- data/lib/morpheus/cli/commands/standard/coloring_command.rb +12 -0
- data/lib/morpheus/cli/commands/standard/curl_command.rb +31 -6
- data/lib/morpheus/cli/commands/standard/echo_command.rb +8 -3
- data/lib/morpheus/cli/commands/standard/set_prompt_command.rb +1 -1
- data/lib/morpheus/cli/containers_command.rb +37 -24
- data/lib/morpheus/cli/cypher_command.rb +191 -150
- data/lib/morpheus/cli/health_command.rb +903 -0
- data/lib/morpheus/cli/hosts.rb +43 -32
- data/lib/morpheus/cli/instances.rb +119 -68
- data/lib/morpheus/cli/jobs_command.rb +1 -1
- data/lib/morpheus/cli/library_instance_types_command.rb +61 -11
- data/lib/morpheus/cli/library_option_types_command.rb +2 -2
- data/lib/morpheus/cli/log_settings_command.rb +46 -3
- data/lib/morpheus/cli/logs_command.rb +24 -17
- data/lib/morpheus/cli/mixins/accounts_helper.rb +2 -0
- data/lib/morpheus/cli/mixins/logs_helper.rb +73 -19
- data/lib/morpheus/cli/mixins/print_helper.rb +29 -1
- data/lib/morpheus/cli/mixins/provisioning_helper.rb +554 -96
- data/lib/morpheus/cli/mixins/whoami_helper.rb +13 -1
- data/lib/morpheus/cli/networks_command.rb +3 -0
- data/lib/morpheus/cli/option_types.rb +83 -53
- data/lib/morpheus/cli/price_sets_command.rb +543 -0
- data/lib/morpheus/cli/prices_command.rb +669 -0
- data/lib/morpheus/cli/processes_command.rb +0 -2
- data/lib/morpheus/cli/provisioning_settings_command.rb +237 -0
- data/lib/morpheus/cli/remote.rb +9 -4
- data/lib/morpheus/cli/reports_command.rb +10 -4
- data/lib/morpheus/cli/roles.rb +93 -38
- data/lib/morpheus/cli/security_groups.rb +10 -0
- data/lib/morpheus/cli/service_plans_command.rb +736 -0
- data/lib/morpheus/cli/tasks.rb +220 -8
- data/lib/morpheus/cli/tenants_command.rb +3 -16
- data/lib/morpheus/cli/users.rb +2 -25
- data/lib/morpheus/cli/version.rb +1 -1
- data/lib/morpheus/cli/whitelabel_settings_command.rb +18 -18
- data/lib/morpheus/cli/whoami.rb +28 -10
- data/lib/morpheus/cli/workflows.rb +488 -36
- data/lib/morpheus/formatters.rb +22 -0
- data/morpheus-cli.gemspec +1 -0
- metadata +28 -5
- data/lib/morpheus/cli/accounts.rb +0 -335
- data/lib/morpheus/cli/old_cypher_command.rb +0 -412
@@ -228,7 +228,7 @@ module Morpheus
|
|
228
228
|
nested_options = nested_options[name_element]
|
229
229
|
else
|
230
230
|
val = custom_option_args[1]
|
231
|
-
if val.to_s[0] == '{' && val.to_s[-1] == '}'
|
231
|
+
if (val.to_s[0] == '{' && val.to_s[-1] == '}') || (val.to_s[0] == '[' && val.to_s[-1] == ']')
|
232
232
|
begin
|
233
233
|
val = JSON.parse(val)
|
234
234
|
rescue
|
@@ -240,7 +240,7 @@ module Morpheus
|
|
240
240
|
end
|
241
241
|
else
|
242
242
|
val = custom_option_args[1]
|
243
|
-
if val.to_s[0] == '{' && val.to_s[-1] == '}'
|
243
|
+
if (val.to_s[0] == '{' && val.to_s[-1] == '}') || (val.to_s[0] == '[' && val.to_s[-1] == ']')
|
244
244
|
begin
|
245
245
|
val = JSON.parse(val)
|
246
246
|
rescue
|
@@ -897,6 +897,7 @@ module Morpheus
|
|
897
897
|
end
|
898
898
|
|
899
899
|
# parse the parameters provided by the common :list options
|
900
|
+
# this includes the :query options too via parse_query_options().
|
900
901
|
# returns Hash of params the format {"phrase": => "foobar", "max": 100}
|
901
902
|
def parse_list_options(options={})
|
902
903
|
list_params = {}
|
@@ -908,6 +909,16 @@ module Morpheus
|
|
908
909
|
end
|
909
910
|
end
|
910
911
|
# arbitrary filters
|
912
|
+
list_params.merge!(parse_query_options(options))
|
913
|
+
|
914
|
+
return list_params
|
915
|
+
end
|
916
|
+
|
917
|
+
# parse the parameters provided by the common :query (:query_filters) options
|
918
|
+
# returns Hash of params the format {"phrase": => "foobar", "max": 100}
|
919
|
+
def parse_query_options(options={})
|
920
|
+
list_params = {}
|
921
|
+
# arbitrary filters
|
911
922
|
if options[:query_filters]
|
912
923
|
options[:query_filters].each do |k, v|
|
913
924
|
if k
|
@@ -80,6 +80,7 @@ module Morpheus
|
|
80
80
|
elsif has_command?(command_name)
|
81
81
|
instance.get(command_name).new.handle(args)
|
82
82
|
else
|
83
|
+
# todo: need to just return error instead of raise
|
83
84
|
raise Morpheus::Cli::CommandError.new("'#{command_name}' is not a command. See 'morpheus --help'.")
|
84
85
|
end
|
85
86
|
end
|
@@ -41,7 +41,7 @@ class Morpheus::Cli::Clusters
|
|
41
41
|
@servers_interface = @api_client.servers
|
42
42
|
@server_types_interface = @api_client.server_types
|
43
43
|
@options_interface = @api_client.options
|
44
|
-
@active_group_id = Morpheus::Cli::Groups.
|
44
|
+
@active_group_id = Morpheus::Cli::Groups.active_groups[@appliance_name]
|
45
45
|
@provision_types_interface = @api_client.provision_types
|
46
46
|
@service_plans_interface = @api_client.service_plans
|
47
47
|
@user_groups_interface = @api_client.user_groups
|
@@ -837,6 +837,21 @@ class Morpheus::Cli::Clusters
|
|
837
837
|
options = {}
|
838
838
|
optparse = Morpheus::Cli::OptionParser.new do |opts|
|
839
839
|
opts.banner = subcommand_usage("[cluster]")
|
840
|
+
opts.on('--start TIMESTAMP','--start TIMESTAMP', "Start timestamp. Default is 30 days ago.") do |val|
|
841
|
+
options[:start] = parse_time(val) #.utc.iso8601
|
842
|
+
end
|
843
|
+
opts.on('--end TIMESTAMP','--end TIMESTAMP', "End timestamp. Default is now.") do |val|
|
844
|
+
options[:end] = parse_time(val) #.utc.iso8601
|
845
|
+
end
|
846
|
+
opts.on('--level VALUE', String, "Log Level. DEBUG,INFO,WARN,ERROR") do |val|
|
847
|
+
params['level'] = params['level'] ? [params['level'], val].flatten : val
|
848
|
+
end
|
849
|
+
opts.on('--table', '--table', "Format ouput as a table.") do
|
850
|
+
options[:table] = true
|
851
|
+
end
|
852
|
+
opts.on('-a', '--all', "Display all details: entire message." ) do
|
853
|
+
options[:details] = true
|
854
|
+
end
|
840
855
|
build_common_options(opts, options, [:list, :query, :json, :yaml, :csv, :fields, :dry_run, :remote])
|
841
856
|
end
|
842
857
|
optparse.parse!(args)
|
@@ -848,28 +863,39 @@ class Morpheus::Cli::Clusters
|
|
848
863
|
cluster = find_cluster_by_name_or_id(args[0])
|
849
864
|
params = {}
|
850
865
|
params.merge!(parse_list_options(options))
|
851
|
-
params[
|
866
|
+
params['query'] = params.delete('phrase') if params['phrase']
|
867
|
+
params['startMs'] = (options[:start].to_i * 1000) if options[:start]
|
868
|
+
params['endMs'] = (options[:end].to_i * 1000) if options[:end]
|
852
869
|
@logs_interface.setopts(options)
|
853
870
|
if options[:dry_run]
|
854
871
|
print_dry_run @logs_interface.dry.cluster_logs(cluster['id'], params)
|
855
872
|
return
|
856
873
|
end
|
857
874
|
json_response = @logs_interface.cluster_logs(cluster['id'], params)
|
858
|
-
render_result = render_with_format(json_response, options, 'data')
|
875
|
+
render_result = json_response['logs'] ? render_with_format(json_response, options, 'logs') : render_with_format(json_response, options, 'data')
|
859
876
|
return 0 if render_result
|
860
877
|
|
861
878
|
logs = json_response
|
862
879
|
title = "Cluster Logs: #{cluster['name']}"
|
863
880
|
subtitles = parse_list_subtitles(options)
|
881
|
+
if options[:start]
|
882
|
+
subtitles << "Start: #{options[:start]}".strip
|
883
|
+
end
|
884
|
+
if options[:end]
|
885
|
+
subtitles << "End: #{options[:end]}".strip
|
886
|
+
end
|
864
887
|
if params[:query]
|
865
888
|
subtitles << "Search: #{params[:query]}".strip
|
866
889
|
end
|
867
|
-
|
890
|
+
if params['level']
|
891
|
+
subtitles << "Level: #{params['level']}"
|
892
|
+
end
|
893
|
+
logs = json_response['data'] || json_response['logs']
|
868
894
|
print_h1 title, subtitles, options
|
869
|
-
if logs
|
895
|
+
if logs.empty?
|
870
896
|
puts "#{cyan}No logs found.#{reset}"
|
871
897
|
else
|
872
|
-
logs
|
898
|
+
logs.each do |log_entry|
|
873
899
|
log_level = ''
|
874
900
|
case log_entry['level']
|
875
901
|
when 'INFO'
|
@@ -923,7 +949,7 @@ class Morpheus::Cli::Clusters
|
|
923
949
|
payload['permissions'].deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) })
|
924
950
|
end
|
925
951
|
else
|
926
|
-
payload = {"permissions" => prompt_permissions(options)}
|
952
|
+
payload = {"permissions" => prompt_permissions(options.merge({:available_plans => namespace_service_plans}))}
|
927
953
|
end
|
928
954
|
|
929
955
|
@clusters_interface.setopts(options)
|
@@ -2623,7 +2649,7 @@ class Morpheus::Cli::Clusters
|
|
2623
2649
|
opts.on('--active [on|off]', String, "Enable datastore") do |val|
|
2624
2650
|
options[:active] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
|
2625
2651
|
end
|
2626
|
-
add_perms_options(opts, options, ['
|
2652
|
+
add_perms_options(opts, options, ['plans', 'groupDefaults'])
|
2627
2653
|
build_common_options(opts, options, [:options, :payload, :json, :dry_run, :remote])
|
2628
2654
|
opts.footer = "Update a cluster datastore.\n" +
|
2629
2655
|
"[cluster] is required. This is the name or id of an existing cluster.\n" +
|
@@ -2655,7 +2681,7 @@ class Morpheus::Cli::Clusters
|
|
2655
2681
|
payload = {'datastore' => {}}
|
2656
2682
|
payload['datastore']['active'] = options[:active].nil? ? (Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'active', 'fieldLabel' => 'Active', 'type' => 'checkbox', 'description' => 'Datastore Active', 'defaultValue' => true}], options[:options], @api_client))['active'] == 'on' : options[:active]
|
2657
2683
|
|
2658
|
-
perms = prompt_permissions(options, datastore['owner']['id'] == current_user['accountId'] ? ['
|
2684
|
+
perms = prompt_permissions(options.merge({:available_plans => namespace_service_plans}), datastore['owner']['id'] == current_user['accountId'] ? ['plans', 'groupDefaults'] : ['plans', 'groupDefaults', 'visibility', 'tenants'])
|
2659
2685
|
perms_payload = {}
|
2660
2686
|
perms_payload['resourcePermissions'] = perms['resourcePermissions'] if !perms['resourcePermissions'].nil?
|
2661
2687
|
perms_payload['tenantPermissions'] = perms['tenantPermissions'] if !perms['tenantPermissions'].nil?
|
@@ -3102,7 +3128,7 @@ class Morpheus::Cli::Clusters
|
|
3102
3128
|
return 1 if cluster.nil?
|
3103
3129
|
params = {}
|
3104
3130
|
params.merge!(parse_list_options(options))
|
3105
|
-
# params[
|
3131
|
+
# params['query'] = params.delete('phrase') if params['phrase']
|
3106
3132
|
@clusters_interface.setopts(options)
|
3107
3133
|
if options[:dry_run]
|
3108
3134
|
print_dry_run @clusters_interface.dry.history(cluster['id'], params)
|
@@ -3234,7 +3260,6 @@ class Morpheus::Cli::Clusters
|
|
3234
3260
|
return 1 if cluster.nil?
|
3235
3261
|
params = {}
|
3236
3262
|
params.merge!(parse_list_options(options))
|
3237
|
-
params[:query] = params.delete(:phrase) unless params[:phrase].nil?
|
3238
3263
|
@clusters_interface.setopts(options)
|
3239
3264
|
if options[:dry_run]
|
3240
3265
|
print_dry_run @clusters_interface.dry.history_details(cluster['id'], process_id, params)
|
@@ -3643,7 +3668,9 @@ class Morpheus::Cli::Clusters
|
|
3643
3668
|
end
|
3644
3669
|
|
3645
3670
|
def namespace_service_plans
|
3646
|
-
@service_plans_interface.list({'provisionable' => 'any', 'provisionTypeId' => @provision_types_interface.list({'code' => 'docker'})['provisionTypes'].first['id']})['servicePlans']
|
3671
|
+
@service_plans_interface.list({'provisionable' => 'any', 'provisionTypeId' => @provision_types_interface.list({'code' => 'docker'})['provisionTypes'].first['id']})['servicePlans'].collect {|it|
|
3672
|
+
{"name" => it["name"], "value" => it["id"]}
|
3673
|
+
} rescue []
|
3647
3674
|
end
|
3648
3675
|
|
3649
3676
|
def get_cloud_type(id)
|
@@ -3848,66 +3875,6 @@ class Morpheus::Cli::Clusters
|
|
3848
3875
|
end
|
3849
3876
|
end
|
3850
3877
|
|
3851
|
-
def add_perms_options(opts, options, excludes = [])
|
3852
|
-
if !excludes.include?('groupAccess')
|
3853
|
-
opts.on('--group-access-all [on|off]', String, "Toggle Access for all groups.") do |val|
|
3854
|
-
options[:groupAccessAll] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
|
3855
|
-
end
|
3856
|
-
opts.on('--group-access LIST', Array, "Group Access, comma separated list of group IDs.") do |list|
|
3857
|
-
if list.size == 1 && list[0] == 'null' # hacky way to clear it
|
3858
|
-
options[:groupAccessList] = []
|
3859
|
-
else
|
3860
|
-
options[:groupAccessList] = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
|
3861
|
-
end
|
3862
|
-
end
|
3863
|
-
if !excludes.include?('groupAccessDefaults')
|
3864
|
-
opts.on('--group-defaults LIST', Array, "Group Default Selection, comma separated list of group IDs") do |list|
|
3865
|
-
if list.size == 1 && list[0] == 'null' # hacky way to clear it
|
3866
|
-
options[:groupDefaultsList] = []
|
3867
|
-
else
|
3868
|
-
options[:groupDefaultsList] = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
|
3869
|
-
end
|
3870
|
-
end
|
3871
|
-
end
|
3872
|
-
end
|
3873
|
-
|
3874
|
-
if !excludes.include?('planAccess')
|
3875
|
-
opts.on('--plan-access-all [on|off]', String, "Toggle Access for all service plans.") do |val|
|
3876
|
-
options[:planAccessAll] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
|
3877
|
-
end
|
3878
|
-
opts.on('--plan-access LIST', Array, "Service Plan Access, comma separated list of plan IDs.") do |list|
|
3879
|
-
if list.size == 1 && list[0] == 'null' # hacky way to clear it
|
3880
|
-
options[:planAccessList] = []
|
3881
|
-
else
|
3882
|
-
options[:planAccessList] = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
|
3883
|
-
end
|
3884
|
-
end
|
3885
|
-
opts.on('--plan-defaults LIST', Array, "Plan Default Selection, comma separated list of plan IDs") do |list|
|
3886
|
-
if list.size == 1 && list[0] == 'null' # hacky way to clear it
|
3887
|
-
options[:planDefaultsList] = []
|
3888
|
-
else
|
3889
|
-
options[:planDefaultsList] = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
|
3890
|
-
end
|
3891
|
-
end
|
3892
|
-
end
|
3893
|
-
|
3894
|
-
if !excludes.include?('visibility')
|
3895
|
-
opts.on('--visibility [private|public]', String, "Visibility") do |val|
|
3896
|
-
options[:visibility] = val
|
3897
|
-
end
|
3898
|
-
end
|
3899
|
-
|
3900
|
-
if !excludes.include?('tenants')
|
3901
|
-
opts.on('--tenants LIST', Array, "Tenant Access, comma separated list of account IDs") do |list|
|
3902
|
-
if list.size == 1 && list[0] == 'null' # hacky way to clear it
|
3903
|
-
options[:tenants] = []
|
3904
|
-
else
|
3905
|
-
options[:tenants] = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
|
3906
|
-
end
|
3907
|
-
end
|
3908
|
-
end
|
3909
|
-
end
|
3910
|
-
|
3911
3878
|
def prompt_resource_pool(group, cloud, service_plan, provision_type, options)
|
3912
3879
|
resource_pool = nil
|
3913
3880
|
|
@@ -3962,7 +3929,7 @@ class Morpheus::Cli::Clusters
|
|
3962
3929
|
rtn['description'] = options[:description] || Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'description', 'fieldLabel' => 'Description', 'type' => 'text', 'description' => 'Namespace Description', 'required' => false}], options[:options], @api_client)['description']
|
3963
3930
|
rtn['active'] = options[:active].nil? ? (Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'active', 'fieldLabel' => 'Active', 'type' => 'checkbox', 'description' => 'Namespace Active', 'defaultValue' => true}], options[:options], @api_client))['active'] == 'on' : options[:active]
|
3964
3931
|
|
3965
|
-
perms = prompt_permissions(options)
|
3932
|
+
perms = prompt_permissions(options.merge({:available_plans => namespace_service_plans}))
|
3966
3933
|
if perms['resourcePool'] && !perms['resourcePool']['visibility'].nil?
|
3967
3934
|
rtn['visibility'] = perms['resourcePool']['visibility']
|
3968
3935
|
perms.delete('resourcePool')
|
@@ -3971,147 +3938,6 @@ class Morpheus::Cli::Clusters
|
|
3971
3938
|
rtn
|
3972
3939
|
end
|
3973
3940
|
|
3974
|
-
def prompt_permissions(options, excludes = [])
|
3975
|
-
all_groups = nil
|
3976
|
-
group_access = nil
|
3977
|
-
all_plans = nil
|
3978
|
-
plan_access = nil
|
3979
|
-
|
3980
|
-
# Group Access
|
3981
|
-
if !excludes.include?('groupAccess')
|
3982
|
-
if !options[:groupAccessAll].nil?
|
3983
|
-
all_groups = options[:groupAccessAll]
|
3984
|
-
end
|
3985
|
-
|
3986
|
-
if !options[:groupAccessList].empty?
|
3987
|
-
group_access = options[:groupAccessList].collect {|site_id| {'id' => site_id.to_i}} || []
|
3988
|
-
elsif !options[:no_prompt]
|
3989
|
-
available_groups = get_available_groups
|
3990
|
-
|
3991
|
-
if available_groups.empty?
|
3992
|
-
#print_red_alert "No available groups"
|
3993
|
-
#exit 1
|
3994
|
-
elsif available_groups.count > 1
|
3995
|
-
available_groups.unshift({"id" => '0', "name" => "All", "value" => "all"})
|
3996
|
-
|
3997
|
-
# default to all
|
3998
|
-
group_id = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'group', 'type' => 'select', 'fieldLabel' => 'Group Access', 'selectOptions' => available_groups, 'required' => false, 'description' => 'Add Group Access.'}], options[:options], @api_client, {})['group']
|
3999
|
-
|
4000
|
-
if !group_id.nil?
|
4001
|
-
if group_id == 'all'
|
4002
|
-
all_groups = true
|
4003
|
-
else
|
4004
|
-
group_access = (excludes.include?('groupAccessDefaults') ? [{'id' => group_id}] : [{'id' => group_id, 'default' => Morpheus::Cli::OptionTypes.confirm("Set '#{available_groups.find{|it| it['id'] == group_id}['name']}' as default?", {:default => false})}])
|
4005
|
-
end
|
4006
|
-
available_groups = available_groups.reject {|it| it['value'] == group_id}
|
4007
|
-
|
4008
|
-
while !group_id.nil? && !available_groups.empty? && Morpheus::Cli::OptionTypes.confirm("Add another group access?", {:default => false})
|
4009
|
-
group_id = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'group', 'type' => 'select', 'fieldLabel' => 'Group Access', 'selectOptions' => available_groups, 'required' => false, 'description' => 'Add Group Access.'}], options[:options], @api_client, {})['group']
|
4010
|
-
|
4011
|
-
if !group_id.nil?
|
4012
|
-
if group_id == 'all'
|
4013
|
-
all_groups = true
|
4014
|
-
else
|
4015
|
-
group_access ||= []
|
4016
|
-
group_access << (excludes.include?('groupAccessDefaults') ? {'id' => group_id} : {'id' => group_id, 'default' => Morpheus::Cli::OptionTypes.confirm("Set '#{available_groups.find{|it| it['id'] == group_id}['name']}' as default?", {:default => false})})
|
4017
|
-
end
|
4018
|
-
available_groups = available_groups.reject {|it| it['value'] == group_id}
|
4019
|
-
end
|
4020
|
-
end
|
4021
|
-
end
|
4022
|
-
end
|
4023
|
-
end
|
4024
|
-
end
|
4025
|
-
|
4026
|
-
# Plan Access
|
4027
|
-
if !excludes.include?('planAccess')
|
4028
|
-
if !options[:planAccessAll].nil?
|
4029
|
-
all_plans = options[:planAccessAll]
|
4030
|
-
end
|
4031
|
-
|
4032
|
-
if !options[:planAccessList].empty?
|
4033
|
-
plan_access = options[:planAccessList].collect {|plan_id| {'id' => plan_id.to_i}}
|
4034
|
-
elsif !options[:no_prompt]
|
4035
|
-
available_plans = namespace_service_plans.collect {|it| {'id' => it['id'], 'name' => it['name'], 'value' => it['id']} }
|
4036
|
-
|
4037
|
-
if available_plans.empty?
|
4038
|
-
#print_red_alert "No available plans"
|
4039
|
-
#exit 1
|
4040
|
-
elsif !available_plans.empty? && !options[:no_prompt]
|
4041
|
-
available_plans.unshift({"id" => '0', "name" => "All", "value" => "all"})
|
4042
|
-
|
4043
|
-
# default to all
|
4044
|
-
plan_id = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'plan', 'type' => 'select', 'fieldLabel' => 'Service Plan Access', 'selectOptions' => available_plans, 'required' => false, 'description' => 'Add Service Plan Access.'}], options[:options], @api_client, {})['plan']
|
4045
|
-
|
4046
|
-
if !plan_id.nil?
|
4047
|
-
if plan_id == 'all'
|
4048
|
-
all_plans = true
|
4049
|
-
else
|
4050
|
-
plan_access = [{'id' => plan_id, 'default' => Morpheus::Cli::OptionTypes.confirm("Set '#{available_plans.find{|it| it['id'] == plan_id}['name']}' as default?", {:default => false})}]
|
4051
|
-
end
|
4052
|
-
|
4053
|
-
available_plans = available_plans.reject {|it| it['value'] == plan_id}
|
4054
|
-
|
4055
|
-
while !plan_id.nil? && !available_plans.empty? && Morpheus::Cli::OptionTypes.confirm("Add another service plan access?", {:default => false})
|
4056
|
-
plan_id = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'plan', 'type' => 'select', 'fieldLabel' => 'Service Plan Access', 'selectOptions' => available_plans, 'required' => false, 'description' => 'Add Service Plan Access.'}], options[:options], @api_client, {})['plan']
|
4057
|
-
|
4058
|
-
if !plan_id.nil?
|
4059
|
-
if plan_id == 'all'
|
4060
|
-
all_plans = true
|
4061
|
-
else
|
4062
|
-
plan_access ||= []
|
4063
|
-
plan_access << {'id' => plan_id, 'default' => Morpheus::Cli::OptionTypes.confirm("Set '#{available_plans.find{|it| it['id'] == plan_id}['name']}' as default?", {:default => false})}
|
4064
|
-
end
|
4065
|
-
available_plans = available_plans.reject {|it| it['value'] == plan_id}
|
4066
|
-
end
|
4067
|
-
end
|
4068
|
-
end
|
4069
|
-
end
|
4070
|
-
end
|
4071
|
-
end
|
4072
|
-
|
4073
|
-
resource_perms = {}
|
4074
|
-
resource_perms['all'] = all_groups if !all_groups.nil?
|
4075
|
-
resource_perms['sites'] = group_access if !group_access.nil?
|
4076
|
-
resource_perms['allPlans'] = all_plans if !all_plans.nil?
|
4077
|
-
resource_perms['plans'] = plan_access if !plan_access.nil?
|
4078
|
-
|
4079
|
-
permissions = {'resourcePermissions' => resource_perms}
|
4080
|
-
|
4081
|
-
available_accounts = @accounts_interface.list()['accounts'].collect {|it| {'name' => it['name'], 'value' => it['id']}}
|
4082
|
-
accounts = []
|
4083
|
-
|
4084
|
-
# Prompts for multi tenant
|
4085
|
-
if available_accounts.count > 1
|
4086
|
-
visibility = options[:visibility] || Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'visibility', 'fieldLabel' => 'Tenant Permissions Visibility', 'type' => 'select', 'defaultValue' => 'private', 'required' => true, 'selectOptions' => [{'name' => 'Private', 'value' => 'private'},{'name' => 'Public', 'value' => 'public'}]}], options[:options], @api_client, {})['visibility']
|
4087
|
-
|
4088
|
-
permissions['resourcePool'] = {'visibility' => visibility}
|
4089
|
-
|
4090
|
-
# Tenants
|
4091
|
-
if !excludes.include?('tenants')
|
4092
|
-
if !options[:tenants].nil?
|
4093
|
-
accounts = options[:tenants].collect {|id| id.to_i}
|
4094
|
-
elsif !options[:no_prompt]
|
4095
|
-
account_id = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'account_id', 'type' => 'select', 'fieldLabel' => 'Add Tenant', 'selectOptions' => available_accounts, 'required' => false, 'description' => 'Add Tenant Permissions.'}], options[:options], @api_client, {})['account_id']
|
4096
|
-
|
4097
|
-
if !account_id.nil?
|
4098
|
-
accounts << account_id
|
4099
|
-
available_accounts = available_accounts.reject {|it| it['value'] == account_id}
|
4100
|
-
|
4101
|
-
while !available_accounts.empty? && (account_id = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'account_id', 'type' => 'select', 'fieldLabel' => 'Add Another Tenant', 'selectOptions' => available_accounts, 'required' => false, 'description' => 'Add Tenant Permissions.'}], options[:options], @api_client, {})['account_id'])
|
4102
|
-
if !account_id.nil?
|
4103
|
-
accounts << account_id
|
4104
|
-
available_accounts = available_accounts.reject {|it| it['value'] == account_id}
|
4105
|
-
end
|
4106
|
-
end
|
4107
|
-
end
|
4108
|
-
end
|
4109
|
-
permissions['tenantPermissions'] = {'accounts' => accounts}
|
4110
|
-
end
|
4111
|
-
end
|
4112
|
-
permissions
|
4113
|
-
end
|
4114
|
-
|
4115
3941
|
def update_wiki_page_option_types
|
4116
3942
|
[
|
4117
3943
|
{'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => false, 'displayOrder' => 1, 'description' => 'The name of the wiki page for this instance. Default is the instance name.'},
|
@@ -4120,64 +3946,4 @@ class Morpheus::Cli::Clusters
|
|
4120
3946
|
]
|
4121
3947
|
end
|
4122
3948
|
|
4123
|
-
def print_permissions(permissions)
|
4124
|
-
if permissions.nil?
|
4125
|
-
print_h2 "Permissions"
|
4126
|
-
print yellow,"No permissions found.",reset,"\n"
|
4127
|
-
else
|
4128
|
-
if !permissions['resourcePermissions'].nil?
|
4129
|
-
print_h2 "Group Access"
|
4130
|
-
rows = []
|
4131
|
-
if permissions['resourcePermissions']['all']
|
4132
|
-
rows.push({group: 'All'})
|
4133
|
-
end
|
4134
|
-
if permissions['resourcePermissions']['sites']
|
4135
|
-
permissions['resourcePermissions']['sites'].each do |site|
|
4136
|
-
rows.push({group: site['name'], default: site['default'] ? 'Yes' : ''})
|
4137
|
-
end
|
4138
|
-
end
|
4139
|
-
if rows.empty?
|
4140
|
-
print yellow,"No group access",reset,"\n"
|
4141
|
-
else
|
4142
|
-
columns = [:group, :default]
|
4143
|
-
print cyan
|
4144
|
-
print as_pretty_table(rows, columns)
|
4145
|
-
end
|
4146
|
-
|
4147
|
-
print_h2 "Plan Access"
|
4148
|
-
rows = []
|
4149
|
-
if permissions['resourcePermissions']['allPlans']
|
4150
|
-
rows.push({plan: 'All'})
|
4151
|
-
end
|
4152
|
-
if permissions['resourcePermissions']['plans']
|
4153
|
-
permissions['resourcePermissions']['plans'].each do |plan|
|
4154
|
-
rows.push({plan: plan['name'], default: plan['default'] ? 'Yes' : ''})
|
4155
|
-
end
|
4156
|
-
end
|
4157
|
-
if rows.empty?
|
4158
|
-
print yellow,"No plan access",reset,"\n"
|
4159
|
-
else
|
4160
|
-
columns = [:plan, :default]
|
4161
|
-
print cyan
|
4162
|
-
print as_pretty_table(rows, columns)
|
4163
|
-
end
|
4164
|
-
|
4165
|
-
if !permissions['tenantPermissions'].nil?
|
4166
|
-
print_h2 "Tenant Permissions"
|
4167
|
-
if !permissions['resourcePool'].nil?
|
4168
|
-
print cyan
|
4169
|
-
print "Visibility: #{permissions['resourcePool']['visibility'].to_s.capitalize}".center(20)
|
4170
|
-
print "\n"
|
4171
|
-
end
|
4172
|
-
if !permissions['tenantPermissions'].nil?
|
4173
|
-
print cyan
|
4174
|
-
print "Accounts: #{permissions['tenantPermissions']['accounts'].join(', ')}".center(20)
|
4175
|
-
print "\n"
|
4176
|
-
end
|
4177
|
-
end
|
4178
|
-
print "\n"
|
4179
|
-
end
|
4180
|
-
end
|
4181
|
-
end
|
4182
|
-
|
4183
3949
|
end
|