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
data/lib/morpheus/cli/tasks.rb
CHANGED
@@ -7,15 +7,17 @@ require 'morpheus/cli/cli_command'
|
|
7
7
|
class Morpheus::Cli::Tasks
|
8
8
|
include Morpheus::Cli::CliCommand
|
9
9
|
|
10
|
-
register_subcommands :list, :get, :add, :update, :remove, :types => :task_types
|
10
|
+
register_subcommands :list, :get, :add, :update, :remove, :execute, :types => :task_types
|
11
11
|
alias_subcommand :details, :get
|
12
12
|
alias_subcommand :'task-types', :task_types
|
13
13
|
set_default_subcommand :list
|
14
14
|
|
15
15
|
def connect(opts)
|
16
16
|
@api_client = establish_remote_appliance_connection(opts)
|
17
|
-
@tasks_interface =
|
18
|
-
@task_sets_interface =
|
17
|
+
@tasks_interface = @api_client.tasks
|
18
|
+
@task_sets_interface = @api_client.task_sets
|
19
|
+
@instances_interface = @api_client.instances
|
20
|
+
@servers_interface = @api_client.servers
|
19
21
|
end
|
20
22
|
|
21
23
|
def handle(args)
|
@@ -162,6 +164,9 @@ class Morpheus::Cli::Tasks
|
|
162
164
|
format_boolean(it['retryable'])
|
163
165
|
end
|
164
166
|
},
|
167
|
+
"Allow Custom Config" => lambda {|it| format_boolean(it['allowCustomConfig']) },
|
168
|
+
"Created" => lambda {|it| format_local_dt(it['dateCreated']) },
|
169
|
+
"Updated" => lambda {|it| format_local_dt(it['lastUpdated']) }
|
165
170
|
}
|
166
171
|
print_description_list(description_cols, task)
|
167
172
|
|
@@ -233,21 +238,22 @@ class Morpheus::Cli::Tasks
|
|
233
238
|
@tasks_interface.setopts(options)
|
234
239
|
if options[:dry_run]
|
235
240
|
print_dry_run @tasks_interface.dry.update(task['id'], payload)
|
236
|
-
return
|
241
|
+
return 0
|
237
242
|
end
|
238
243
|
response = @tasks_interface.update(task['id'], payload)
|
239
244
|
if options[:json]
|
240
245
|
print JSON.pretty_generate(json_response)
|
241
246
|
if !response['success']
|
242
|
-
|
247
|
+
return 1
|
243
248
|
end
|
244
249
|
else
|
245
250
|
print_green_success "Task #{response['task']['name']} updated"
|
246
251
|
get([task['id']])
|
247
252
|
end
|
253
|
+
return 0
|
248
254
|
rescue RestClient::Exception => e
|
249
255
|
print_rest_exception(e, options)
|
250
|
-
|
256
|
+
return 1
|
251
257
|
end
|
252
258
|
end
|
253
259
|
|
@@ -349,6 +355,9 @@ class Morpheus::Cli::Tasks
|
|
349
355
|
opts.on('--retry-delay SECONDS', String, "Retry Delay Seconds" ) do |val|
|
350
356
|
options[:options]['retryDelaySeconds'] = val.to_i
|
351
357
|
end
|
358
|
+
opts.on('--allow-custom-config [on|off]', String, "Allow Custom Config") do |val|
|
359
|
+
options[:options]['allowCustomConfig'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
|
360
|
+
end
|
352
361
|
opts.on('--file FILE', "File containing the script. This can be used instead of --O taskOptions.script" ) do |filename|
|
353
362
|
full_filename = File.expand_path(filename)
|
354
363
|
if File.exists?(full_filename)
|
@@ -554,6 +563,13 @@ class Morpheus::Cli::Tasks
|
|
554
563
|
end
|
555
564
|
|
556
565
|
|
566
|
+
# Allow Custom Config
|
567
|
+
if options[:options]['allowCustomConfig'] != nil
|
568
|
+
payload['task']['allowCustomConfig'] = options[:options]['allowCustomConfig']
|
569
|
+
else
|
570
|
+
v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'allowCustomConfig', 'fieldLabel' => 'Allow Custom Config', 'type' => 'checkbox', 'defaultValue' => false}], options[:options], @api_client)
|
571
|
+
payload['task']['allowCustomConfig'] = ['true','on'].include?(v_prompt['allowCustomConfig'].to_s) unless v_prompt['allowCustomConfig'].nil?
|
572
|
+
end
|
557
573
|
|
558
574
|
|
559
575
|
end
|
@@ -568,7 +584,7 @@ class Morpheus::Cli::Tasks
|
|
568
584
|
print JSON.pretty_generate(json_response),"\n"
|
569
585
|
elsif !options[:quiet]
|
570
586
|
task = json_response['task']
|
571
|
-
print_green_success "Task #{task['name']} created
|
587
|
+
print_green_success "Task #{task['name']} created"
|
572
588
|
get([task['id']])
|
573
589
|
end
|
574
590
|
rescue RestClient::Exception => e
|
@@ -617,8 +633,127 @@ class Morpheus::Cli::Tasks
|
|
617
633
|
end
|
618
634
|
end
|
619
635
|
|
636
|
+
def execute(args)
|
637
|
+
params = {}
|
638
|
+
options = {}
|
639
|
+
target_type = nil
|
640
|
+
instance_ids = []
|
641
|
+
instances = []
|
642
|
+
server_ids = []
|
643
|
+
servers = []
|
644
|
+
optparse = Morpheus::Cli::OptionParser.new do |opts|
|
645
|
+
opts.banner = subcommand_usage("[task] --instance [instance] [options]")
|
646
|
+
opts.on('--instance INSTANCE', String, "Instance name or id to execute the task on. This option can be passed more than once.") do |val|
|
647
|
+
target_type = 'instance'
|
648
|
+
instance_ids << val
|
649
|
+
end
|
650
|
+
opts.on('--instances [LIST]', Array, "Instances, comma separated list of instance names or IDs.") do |list|
|
651
|
+
target_type = 'instance'
|
652
|
+
instance_ids = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
|
653
|
+
end
|
654
|
+
opts.on('--host HOST', String, "Host name or id to execute the task on. This option can be passed more than once.") do |val|
|
655
|
+
target_type = 'server'
|
656
|
+
server_ids << val
|
657
|
+
end
|
658
|
+
opts.on('--hosts [LIST]', Array, "Hosts, comma separated list of host names or IDs.") do |list|
|
659
|
+
target_type = 'server'
|
660
|
+
server_ids = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
|
661
|
+
end
|
662
|
+
opts.on('--server HOST', String, "alias for --host") do |val|
|
663
|
+
target_type = 'server'
|
664
|
+
server_ids << val
|
665
|
+
end
|
666
|
+
opts.on('--servers [LIST]', Array, "alias for --hosts") do |list|
|
667
|
+
target_type = 'server'
|
668
|
+
server_ids = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
|
669
|
+
end
|
670
|
+
opts.add_hidden_option('--server')
|
671
|
+
opts.add_hidden_option('--servers')
|
672
|
+
opts.on('--config [TEXT]', String, "Custom config") do |val|
|
673
|
+
params['customConfig'] = val.to_s
|
674
|
+
end
|
675
|
+
build_common_options(opts, options, [:options, :json, :dry_run, :remote])
|
676
|
+
end
|
677
|
+
optparse.parse!(args)
|
678
|
+
if args.count != 1
|
679
|
+
raise_command_error "wrong number of arguments, expected 1 and got (#{args.count}) #{args.join(' ')}\n#{optparse}"
|
680
|
+
end
|
681
|
+
task_name = args[0]
|
682
|
+
connect(options)
|
683
|
+
begin
|
684
|
+
task = find_task_by_name_or_id(task_name)
|
685
|
+
return 1 if task.nil?
|
686
|
+
|
687
|
+
passed_options = options[:options] ? options[:options].reject {|k,v| k.is_a?(Symbol) } : {}
|
688
|
+
payload = nil
|
689
|
+
if options[:payload]
|
690
|
+
payload = options[:payload]
|
691
|
+
payload.deep_merge!({'job' => passed_options}) unless passed_options.empty?
|
692
|
+
else
|
693
|
+
if instance_ids.size > 0 && server_ids.size > 0
|
694
|
+
raise_command_error "Pass --instance or --host, not both.\n#{optparse}"
|
695
|
+
elsif instance_ids.size > 0
|
696
|
+
instance_ids.each do |instance_id|
|
697
|
+
instance = find_instance_by_name_or_id(instance_id)
|
698
|
+
return 1 if instance.nil?
|
699
|
+
instances << instance
|
700
|
+
end
|
701
|
+
params['instances'] = instances.collect {|it| it['id'] }
|
702
|
+
elsif server_ids.size > 0
|
703
|
+
server_ids.each do |server_id|
|
704
|
+
server = find_server_by_name_or_id(server_id)
|
705
|
+
return 1 if server.nil?
|
706
|
+
servers << server
|
707
|
+
end
|
708
|
+
params['servers'] = servers.collect {|it| it['id'] }
|
709
|
+
else
|
710
|
+
raise_command_error "missing required option: --instance or --host\n#{optparse}"
|
711
|
+
end
|
712
|
+
|
713
|
+
# todo: prompt to task optionTypes for customOptions
|
714
|
+
if task['optionTypes']
|
715
|
+
|
716
|
+
end
|
717
|
+
|
718
|
+
params['targetType'] = target_type
|
719
|
+
|
720
|
+
job_payload = {}
|
721
|
+
job_payload.deep_merge!(params)
|
722
|
+
job_payload.deep_merge!(passed_options) unless passed_options.empty?
|
723
|
+
payload = {'job' => job_payload}
|
724
|
+
end
|
725
|
+
|
726
|
+
@tasks_interface.setopts(options)
|
727
|
+
if options[:dry_run]
|
728
|
+
print_dry_run @tasks_interface.dry.run(task['id'], payload)
|
729
|
+
return
|
730
|
+
end
|
731
|
+
response = @tasks_interface.run(task['id'], payload)
|
732
|
+
if options[:json]
|
733
|
+
print JSON.pretty_generate(json_response)
|
734
|
+
if !response['success']
|
735
|
+
return 1
|
736
|
+
end
|
737
|
+
else
|
738
|
+
target_desc = ""
|
739
|
+
if instances.size() > 0
|
740
|
+
target_desc = (instances.size() == 1) ? "instance #{instances[0]['name']}" : "#{instances.size()} instances"
|
741
|
+
elsif servers.size() > 0
|
742
|
+
target_desc = (servers.size() == 1) ? "host #{servers[0]['name']}" : "#{servers.size()} hosts"
|
743
|
+
end
|
744
|
+
print_green_success "Executing task #{task['name']} on #{target_desc}"
|
745
|
+
# todo: load job/execution
|
746
|
+
# get([task['id']])
|
747
|
+
end
|
748
|
+
return 0
|
749
|
+
rescue RestClient::Exception => e
|
750
|
+
print_rest_exception(e, options)
|
751
|
+
return 1
|
752
|
+
end
|
753
|
+
end
|
620
754
|
|
621
755
|
private
|
756
|
+
|
622
757
|
def find_task_by_name_or_id(val)
|
623
758
|
if val.to_s =~ /\A\d{1,}\Z/
|
624
759
|
return find_task_by_id(val)
|
@@ -634,6 +769,7 @@ class Morpheus::Cli::Tasks
|
|
634
769
|
rescue RestClient::Exception => e
|
635
770
|
if e.response && e.response.code == 404
|
636
771
|
print_red_alert "Task not found by id #{id}"
|
772
|
+
return nil
|
637
773
|
else
|
638
774
|
raise e
|
639
775
|
end
|
@@ -690,7 +826,7 @@ class Morpheus::Cli::Tasks
|
|
690
826
|
{"ID" => lambda {|it| it['id'] } },
|
691
827
|
{"NAME" => lambda {|it| it['name'] } },
|
692
828
|
{"TYPE" => lambda {|it| it['taskType']['name'] ? it['taskType']['name'] : it['type'] } },
|
693
|
-
|
829
|
+
{"CREATED" => lambda {|it| format_local_dt(it['dateCreated']) } },
|
694
830
|
# {"UPDATED" => lambda {|it| format_local_dt(it['lastUpdated']) } },
|
695
831
|
]
|
696
832
|
if opts[:include_fields]
|
@@ -699,4 +835,80 @@ class Morpheus::Cli::Tasks
|
|
699
835
|
print as_pretty_table(tasks, columns, opts)
|
700
836
|
end
|
701
837
|
|
838
|
+
def find_instance_by_name_or_id(val)
|
839
|
+
if val.to_s =~ /\A\d{1,}\Z/
|
840
|
+
return find_instance_by_id(val)
|
841
|
+
else
|
842
|
+
return find_instance_by_name(val)
|
843
|
+
end
|
844
|
+
end
|
845
|
+
|
846
|
+
def find_instance_by_id(id)
|
847
|
+
begin
|
848
|
+
json_response = @instances_interface.get(id.to_i)
|
849
|
+
return json_response['instance']
|
850
|
+
rescue RestClient::Exception => e
|
851
|
+
if e.response && e.response.code == 404
|
852
|
+
print_red_alert "Instance not found by id #{id}"
|
853
|
+
return nil
|
854
|
+
else
|
855
|
+
raise e
|
856
|
+
end
|
857
|
+
end
|
858
|
+
end
|
859
|
+
|
860
|
+
def find_instance_by_name(name)
|
861
|
+
instances = @instances_interface.list({name: name.to_s})['instances']
|
862
|
+
if instances.empty?
|
863
|
+
print_red_alert "Instance not found by name #{name}"
|
864
|
+
return nil
|
865
|
+
elsif instances.size > 1
|
866
|
+
print_red_alert "#{instances.size} instances found by name #{name}"
|
867
|
+
as_pretty_table(instances, [:id, :name], {color: red})
|
868
|
+
print_red_alert "Try using ID instead"
|
869
|
+
print reset,"\n"
|
870
|
+
return nil
|
871
|
+
else
|
872
|
+
return instances[0]
|
873
|
+
end
|
874
|
+
end
|
875
|
+
|
876
|
+
def find_server_by_name_or_id(val)
|
877
|
+
if val.to_s =~ /\A\d{1,}\Z/
|
878
|
+
return find_server_by_id(val)
|
879
|
+
else
|
880
|
+
return find_server_by_name(val)
|
881
|
+
end
|
882
|
+
end
|
883
|
+
|
884
|
+
def find_server_by_id(id)
|
885
|
+
begin
|
886
|
+
json_response = @servers_interface.get(id.to_i)
|
887
|
+
return json_response['server']
|
888
|
+
rescue RestClient::Exception => e
|
889
|
+
if e.response && e.response.code == 404
|
890
|
+
print_red_alert "Server not found by id #{id}"
|
891
|
+
return nil
|
892
|
+
else
|
893
|
+
raise e
|
894
|
+
end
|
895
|
+
end
|
896
|
+
end
|
897
|
+
|
898
|
+
def find_server_by_name(name)
|
899
|
+
servers = @servers_interface.list({name: name.to_s})['servers']
|
900
|
+
if servers.empty?
|
901
|
+
print_red_alert "Host not found by name #{name}"
|
902
|
+
return nil
|
903
|
+
elsif servers.size > 1
|
904
|
+
print_red_alert "#{servers.size} hosts found by name #{name}"
|
905
|
+
as_pretty_table(servers, [:id, :name], {color: red})
|
906
|
+
print_red_alert "Try using ID instead"
|
907
|
+
print reset,"\n"
|
908
|
+
return nil
|
909
|
+
else
|
910
|
+
return servers[0]
|
911
|
+
end
|
912
|
+
end
|
913
|
+
|
702
914
|
end
|
@@ -188,12 +188,7 @@ class Morpheus::Cli::TenantsCommand
|
|
188
188
|
account_keys = ['name', 'description', 'currency']
|
189
189
|
account_payload = params.select {|k,v| account_keys.include?(k) }
|
190
190
|
account_payload['currency'] = account_payload['currency'].to_s.empty? ? "USD" : account_payload['currency'].upcase
|
191
|
-
|
192
|
-
account_payload['instanceLimits'] = {}
|
193
|
-
account_payload['instanceLimits']['maxStorage'] = params['instanceLimits.maxStorage'].to_i if params['instanceLimits.maxStorage'].to_s.strip != ''
|
194
|
-
account_payload['instanceLimits']['maxMemory'] = params['instanceLimits.maxMemory'].to_i if params['instanceLimits.maxMemory'].to_s.strip != ''
|
195
|
-
account_payload['instanceLimits']['maxCpu'] = params['instanceLimits.maxCpu'].to_i if params['instanceLimits.maxCpu'].to_s.strip != ''
|
196
|
-
end
|
191
|
+
|
197
192
|
if params['role'].to_s != ''
|
198
193
|
role = find_role_by_name(nil, params['role'])
|
199
194
|
exit 1 if role.nil?
|
@@ -255,15 +250,10 @@ class Morpheus::Cli::TenantsCommand
|
|
255
250
|
end
|
256
251
|
|
257
252
|
#puts "parsed params is : #{params.inspect}"
|
258
|
-
#account_keys = ['name', 'description', 'currency'
|
253
|
+
#account_keys = ['name', 'description', 'currency']
|
259
254
|
account_payload = params
|
260
255
|
account_payload['currency'] = account_payload['currency'].upcase unless account_payload['currency'].to_s.empty?
|
261
|
-
|
262
|
-
# account_payload['instanceLimits'] = {}
|
263
|
-
# account_payload['instanceLimits']['maxStorage'] = params['instanceLimits.maxStorage'].to_i if params['instanceLimits.maxStorage'].to_s.strip != ''
|
264
|
-
# account_payload['instanceLimits']['maxMemory'] = params['instanceLimits.maxMemory'].to_i if params['instanceLimits.maxMemory'].to_s.strip != ''
|
265
|
-
# account_payload['instanceLimits']['maxCpu'] = params['instanceLimits.maxCpu'].to_i if params['instanceLimits.maxCpu'].to_s.strip != ''
|
266
|
-
# end
|
256
|
+
|
267
257
|
if params['role'].to_s != ''
|
268
258
|
role = find_role_by_name(nil, params['role'])
|
269
259
|
exit 1 if role.nil?
|
@@ -345,9 +335,6 @@ class Morpheus::Cli::TenantsCommand
|
|
345
335
|
{'fieldName' => 'description', 'fieldLabel' => 'Description', 'type' => 'text', 'displayOrder' => 2},
|
346
336
|
{'fieldName' => 'role', 'fieldLabel' => 'Base Role', 'type' => 'text', 'displayOrder' => 3},
|
347
337
|
{'fieldName' => 'currency', 'fieldLabel' => 'Currency', 'type' => 'text', 'displayOrder' => 4}
|
348
|
-
# {'fieldName' => 'instanceLimits.maxStorage', 'fieldLabel' => 'Max Storage (bytes)', 'type' => 'text', 'displayOrder' => 5},
|
349
|
-
# {'fieldName' => 'instanceLimits.maxMemory', 'fieldLabel' => 'Max Memory (bytes)', 'type' => 'text', 'displayOrder' => 6},
|
350
|
-
# {'fieldName' => 'instanceLimits.maxCpu', 'fieldLabel' => 'CPU Count', 'type' => 'text', 'displayOrder' => 7},
|
351
338
|
]
|
352
339
|
end
|
353
340
|
|
data/lib/morpheus/cli/users.rb
CHANGED
@@ -202,13 +202,6 @@ class Morpheus::Cli::Users
|
|
202
202
|
}
|
203
203
|
print_description_list(description_cols, user)
|
204
204
|
|
205
|
-
# print_h2 "User Instance Limits", options
|
206
|
-
# print cyan
|
207
|
-
# print_description_list({
|
208
|
-
# "Max Storage" => lambda {|it| (it && it['maxStorage'].to_i != 0) ? Filesize.from("#{it['maxStorage']} B").pretty : "no limit" },
|
209
|
-
# "Max Memory" => lambda {|it| (it && it['maxMemory'].to_i != 0) ? Filesize.from("#{it['maxMemory']} B").pretty : "no limit" },
|
210
|
-
# "CPU Count" => lambda {|it| (it && it['maxCpu'].to_i != 0) ? it['maxCpu'] : "no limit" }
|
211
|
-
# }, user['instanceLimits'])
|
212
205
|
|
213
206
|
if options[:include_feature_access] && user_feature_permissions
|
214
207
|
if user_feature_permissions
|
@@ -258,11 +251,7 @@ class Morpheus::Cli::Users
|
|
258
251
|
prompt_option_types = add_user_option_types().reject {|it| 'role' == it['fieldName'] }
|
259
252
|
v_prompt = Morpheus::Cli::OptionTypes.prompt(prompt_option_types, options[:options], @api_client, options[:params])
|
260
253
|
params.deep_merge!(v_prompt)
|
261
|
-
|
262
|
-
params['instanceLimits']['maxStorage'] = params['instanceLimits']['maxStorage'].to_i if params['instanceLimits']['maxStorage'].to_s.strip != ''
|
263
|
-
params['instanceLimits']['maxMemory'] = params['instanceLimits']['maxMemory'].to_i if params['instanceLimits']['maxMemory'].to_s.strip != ''
|
264
|
-
params['instanceLimits']['maxCpu'] = params['instanceLimits']['maxCpu'].to_i if params['instanceLimits']['maxCpu'].to_s.strip != ''
|
265
|
-
end
|
254
|
+
|
266
255
|
# prompt for roles
|
267
256
|
selected_roles = []
|
268
257
|
selected_roles += params.delete('role').split(',').collect {|r| r.strip.empty? ? nil : r.strip}.uniq if params['role']
|
@@ -359,13 +348,7 @@ class Morpheus::Cli::Users
|
|
359
348
|
return 1
|
360
349
|
end
|
361
350
|
|
362
|
-
|
363
|
-
if params['instanceLimits']
|
364
|
-
params['instanceLimits']['maxStorage'] = params['instanceLimits']['maxStorage'].to_i if params['instanceLimits']['maxStorage'].to_s.strip != ''
|
365
|
-
params['instanceLimits']['maxMemory'] = params['instanceLimits']['maxMemory'].to_i if params['instanceLimits']['maxMemory'].to_s.strip != ''
|
366
|
-
params['instanceLimits']['maxCpu'] = params['instanceLimits']['maxCpu'].to_i if params['instanceLimits']['maxCpu'].to_s.strip != ''
|
367
|
-
end
|
368
|
-
|
351
|
+
|
369
352
|
payload = {'user' => params}
|
370
353
|
end
|
371
354
|
@users_interface.setopts(options)
|
@@ -524,9 +507,6 @@ class Morpheus::Cli::Users
|
|
524
507
|
{'fieldName' => 'email', 'fieldLabel' => 'Email', 'type' => 'text', 'required' => true, 'displayOrder' => 4},
|
525
508
|
{'fieldName' => 'password', 'fieldLabel' => 'Password', 'type' => 'password', 'required' => true, 'displayOrder' => 6},
|
526
509
|
{'fieldName' => 'passwordConfirmation', 'fieldLabel' => 'Confirm Password', 'type' => 'password', 'required' => true, 'displayOrder' => 7},
|
527
|
-
{'fieldContext' => 'instanceLimits', 'fieldName' => 'maxStorage', 'fieldLabel' => 'Max Storage (bytes)', 'type' => 'text', 'displayOrder' => 8},
|
528
|
-
{'fieldContext' => 'instanceLimits', 'fieldName' => 'maxMemory', 'fieldLabel' => 'Max Memory (bytes)', 'type' => 'text', 'displayOrder' => 9},
|
529
|
-
{'fieldContext' => 'instanceLimits', 'fieldName' => 'maxCpu', 'fieldLabel' => 'CPU Count', 'type' => 'text', 'displayOrder' => 10},
|
530
510
|
{'fieldName' => 'role', 'fieldLabel' => 'Role', 'type' => 'text', 'displayOrder' => 11, 'description' => "Role names (comma separated)"},
|
531
511
|
]
|
532
512
|
end
|
@@ -539,9 +519,6 @@ class Morpheus::Cli::Users
|
|
539
519
|
{'fieldName' => 'email', 'fieldLabel' => 'Email', 'type' => 'text', 'required' => false, 'displayOrder' => 4},
|
540
520
|
{'fieldName' => 'password', 'fieldLabel' => 'Password', 'type' => 'password', 'required' => false, 'displayOrder' => 6},
|
541
521
|
{'fieldName' => 'passwordConfirmation', 'fieldLabel' => 'Confirm Password', 'type' => 'password', 'required' => false, 'displayOrder' => 7},
|
542
|
-
{'fieldContext' => 'instanceLimits', 'fieldName' => 'maxStorage', 'fieldLabel' => 'Max Storage (bytes)', 'type' => 'text', 'displayOrder' => 8},
|
543
|
-
{'fieldContext' => 'instanceLimits', 'fieldName' => 'maxMemory', 'fieldLabel' => 'Max Memory (bytes)', 'type' => 'text', 'displayOrder' => 9},
|
544
|
-
{'fieldContext' => 'instanceLimits', 'fieldName' => 'maxCpu', 'fieldLabel' => 'CPU Count', 'type' => 'text', 'displayOrder' => 10},
|
545
522
|
{'fieldName' => 'role', 'fieldLabel' => 'Role', 'type' => 'text', 'displayOrder' => 11, 'description' => "Role names (comma separated)"},
|
546
523
|
]
|
547
524
|
end
|
data/lib/morpheus/cli/version.rb
CHANGED
@@ -5,7 +5,7 @@ class Morpheus::Cli::WhitelabelSettingsCommand
|
|
5
5
|
# include Morpheus::Cli::AccountsHelper
|
6
6
|
|
7
7
|
set_command_name :'whitelabel-settings'
|
8
|
-
|
8
|
+
|
9
9
|
register_subcommands :get, :update
|
10
10
|
register_subcommands :update_images, :reset_image, :download_image, :view_image
|
11
11
|
set_default_subcommand :get
|
@@ -154,58 +154,58 @@ class Morpheus::Cli::WhitelabelSettingsCommand
|
|
154
154
|
params['resetFavicon'] = true
|
155
155
|
end
|
156
156
|
opts.on("--header-bg-color VALUE", String, "Header background color") do |val|
|
157
|
-
params['headerBgColor'] = val
|
157
|
+
params['headerBgColor'] = val == 'null' ? nil : val
|
158
158
|
end
|
159
159
|
opts.on("--header-fg-color VALUE", String, "Header foreground color") do |val|
|
160
|
-
params['headerFgColor'] = val
|
160
|
+
params['headerFgColor'] = val == 'null' ? nil : val
|
161
161
|
end
|
162
162
|
opts.on("--nav-bg-color VALUE", String, "Nav background color") do |val|
|
163
|
-
params['navBgColor'] = val
|
163
|
+
params['navBgColor'] = val == 'null' ? nil : val
|
164
164
|
end
|
165
165
|
opts.on("--nav-fg-color VALUE", String, "Nav foreground color") do |val|
|
166
|
-
params['navFgColor'] = val
|
166
|
+
params['navFgColor'] = val == 'null' ? nil : val
|
167
167
|
end
|
168
168
|
opts.on("--nav-hover-color VALUE", String, "Nav hover color") do |val|
|
169
|
-
params['navHoverColor'] = val
|
169
|
+
params['navHoverColor'] = val == 'null' ? nil : val
|
170
170
|
end
|
171
171
|
opts.on("--primary-button-bg-color VALUE", String, "Primary button background color") do |val|
|
172
|
-
params['primaryButtonBgColor'] = val
|
172
|
+
params['primaryButtonBgColor'] = val == 'null' ? nil : val
|
173
173
|
end
|
174
174
|
opts.on("--primary-button-fg-color VALUE", String, "Primary button foreground color") do |val|
|
175
|
-
params['primaryButtonFgColor'] = val
|
175
|
+
params['primaryButtonFgColor'] = val == 'null' ? nil : val
|
176
176
|
end
|
177
177
|
opts.on("--primary-button-hover-bg-color VALUE", String, "Primary button hover background color") do |val|
|
178
|
-
params['primaryButtonHoverBgColor'] = val
|
178
|
+
params['primaryButtonHoverBgColor'] = val == 'null' ? nil : val
|
179
179
|
end
|
180
180
|
opts.on("--primary-button-hover-fg-color VALUE", String, "Primary button hover foreground color") do |val|
|
181
|
-
params['primaryButtonHoverFgColor'] = val
|
181
|
+
params['primaryButtonHoverFgColor'] = val == 'null' ? nil : val
|
182
182
|
end
|
183
183
|
opts.on("--footer-bg-color VALUE", String, "Footer background color") do |val|
|
184
|
-
params['footerBgColor'] = val
|
184
|
+
params['footerBgColor'] = val == 'null' ? nil : val
|
185
185
|
end
|
186
186
|
opts.on("--footer-fg-color VALUE", String, "Footer foreground color") do |val|
|
187
|
-
params['footerFgColor'] = val
|
187
|
+
params['footerFgColor'] = val == 'null' ? nil : val
|
188
188
|
end
|
189
189
|
opts.on("--login-bg-color VALUE", String, "Login background color") do |val|
|
190
|
-
params['loginBgColor'] = val
|
190
|
+
params['loginBgColor'] = val == 'null' ? nil : val
|
191
191
|
end
|
192
192
|
opts.on("--copyright TEXT", String, "Copyright String") do |val|
|
193
|
-
params['copyrightString'] = val
|
193
|
+
params['copyrightString'] = val == 'null' ? nil : val
|
194
194
|
end
|
195
195
|
opts.on("--css TEXT", String, "Override CSS") do |val|
|
196
|
-
params['overrideCss'] = val
|
196
|
+
params['overrideCss'] = val == 'null' ? nil : val
|
197
197
|
end
|
198
198
|
opts.on("--css-file FILE", String, "Override CSS from local file") do |val|
|
199
199
|
options[:overrideCssFile] = val
|
200
200
|
end
|
201
201
|
opts.on("--terms TEXT", String, "Terms of use content") do |val|
|
202
|
-
params['termsOfUse'] = val
|
202
|
+
params['termsOfUse'] = val == 'null' ? nil : val
|
203
203
|
end
|
204
204
|
opts.on("--terms-file FILE", String, "Terms of use content from local file") do |val|
|
205
205
|
options[:termsOfUseFile] = val
|
206
206
|
end
|
207
207
|
opts.on("--privacy-policy TEXT", String, "Privacy policy content") do |val|
|
208
|
-
params['privacyPolicy'] = val
|
208
|
+
params['privacyPolicy'] = val == 'null' ? nil : val
|
209
209
|
end
|
210
210
|
opts.on("--privacy-policy-file FILE", String, "Privacy policy content from local file") do |val|
|
211
211
|
options[:privacyPolicyFile] = val
|
@@ -215,7 +215,7 @@ class Morpheus::Cli::WhitelabelSettingsCommand
|
|
215
215
|
support_menu_links = JSON.parse(val.to_s)
|
216
216
|
params['supportMenuLinks'] = support_menu_links.kind_of?(Array) ? support_menu_links : [support_menu_links]
|
217
217
|
rescue JSON::ParserError => e
|
218
|
-
print_red_alert "Unable to parse
|
218
|
+
print_red_alert "Unable to parse support menu links JSON"
|
219
219
|
exit 1
|
220
220
|
end
|
221
221
|
end
|