morpheus-cli 4.1.8 → 4.1.9
Sign up to get free protection for your applications and to get access to all the features.
- 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
|