morpheus-cli 3.6.28 → 3.6.29

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/lib/morpheus/api/api_client.rb +16 -0
  3. data/lib/morpheus/api/cloud_folders_interface.rb +47 -0
  4. data/lib/morpheus/api/cloud_resource_pools_interface.rb +47 -0
  5. data/lib/morpheus/api/network_types_interface.rb +26 -0
  6. data/lib/morpheus/api/reports_interface.rb +77 -0
  7. data/lib/morpheus/api/security_group_rules_interface.rb +6 -0
  8. data/lib/morpheus/api/security_groups_interface.rb +21 -15
  9. data/lib/morpheus/cli.rb +3 -0
  10. data/lib/morpheus/cli/accounts.rb +1 -1
  11. data/lib/morpheus/cli/apps.rb +2 -2
  12. data/lib/morpheus/cli/archives_command.rb +18 -18
  13. data/lib/morpheus/cli/blueprints_command.rb +1 -1
  14. data/lib/morpheus/cli/boot_scripts_command.rb +6 -6
  15. data/lib/morpheus/cli/cli_command.rb +4 -0
  16. data/lib/morpheus/cli/cloud_datastores_command.rb +58 -20
  17. data/lib/morpheus/cli/cloud_folders_command.rb +463 -0
  18. data/lib/morpheus/cli/cloud_resource_pools_command.rb +707 -0
  19. data/lib/morpheus/cli/clouds.rb +2 -0
  20. data/lib/morpheus/cli/hosts.rb +33 -8
  21. data/lib/morpheus/cli/instances.rb +79 -54
  22. data/lib/morpheus/cli/library_option_lists_command.rb +1 -1
  23. data/lib/morpheus/cli/library_option_types_command.rb +1 -1
  24. data/lib/morpheus/cli/mixins/provisioning_helper.rb +11 -2
  25. data/lib/morpheus/cli/monitoring_contacts_command.rb +1 -1
  26. data/lib/morpheus/cli/monitoring_incidents_command.rb +1 -1
  27. data/lib/morpheus/cli/network_services_command.rb +7 -3
  28. data/lib/morpheus/cli/networks_command.rb +164 -63
  29. data/lib/morpheus/cli/option_types.rb +16 -15
  30. data/lib/morpheus/cli/policies_command.rb +76 -9
  31. data/lib/morpheus/cli/preseed_scripts_command.rb +2 -2
  32. data/lib/morpheus/cli/remote.rb +26 -28
  33. data/lib/morpheus/cli/reports_command.rb +594 -0
  34. data/lib/morpheus/cli/security_group_rules.rb +5 -1
  35. data/lib/morpheus/cli/security_groups.rb +882 -45
  36. data/lib/morpheus/cli/tasks.rb +158 -23
  37. data/lib/morpheus/cli/tenants_command.rb +1 -1
  38. data/lib/morpheus/cli/users.rb +1 -1
  39. data/lib/morpheus/cli/version.rb +1 -1
  40. metadata +9 -2
@@ -201,6 +201,8 @@ class Morpheus::Cli::Clouds
201
201
  "Location" => 'location',
202
202
  "Visibility" => lambda {|it| it['visibility'].to_s.capitalize },
203
203
  "Groups" => lambda {|it| it['groups'].collect {|g| g.instance_of?(Hash) ? g['name'] : g.to_s }.join(', ') },
204
+ #"Owner" => lambda {|it| it['owner'].instance_of?(Hash) ? it['owner']['name'] : it['ownerId'] },
205
+ "Tenant" => lambda {|it| it['account'].instance_of?(Hash) ? it['account']['name'] : it['accountId'] },
204
206
  "Enabled" => lambda {|it| format_boolean(it['enabled']) },
205
207
  "Status" => lambda {|it| format_cloud_status(it) }
206
208
  }
@@ -804,7 +804,7 @@ class Morpheus::Cli::Hosts
804
804
  end
805
805
  else
806
806
  if params.empty?
807
- print_red_alert "Specify atleast one option to update"
807
+ print_red_alert "Specify at least one option to update"
808
808
  puts optparse
809
809
  return 1
810
810
  end
@@ -1173,7 +1173,7 @@ class Morpheus::Cli::Hosts
1173
1173
 
1174
1174
  host = find_host_by_name_or_id(args[0])
1175
1175
  return 1 if host.nil?
1176
- workflow = find_workflow_by_name(args[1])
1176
+ workflow = find_workflow_by_name_or_id(args[1])
1177
1177
  return 1 if workflow.nil?
1178
1178
 
1179
1179
  # support -O options as arbitrary params
@@ -1485,16 +1485,41 @@ class Morpheus::Cli::Hosts
1485
1485
  return cloud_type
1486
1486
  end
1487
1487
 
1488
- def find_workflow_by_name(name)
1489
- task_set_results = @task_sets_interface.get(name)
1490
- if !task_set_results['taskSets'].nil? && !task_set_results['taskSets'].empty?
1491
- return task_set_results['taskSets'][0]
1488
+ def find_workflow_by_name_or_id(val)
1489
+ if val.to_s =~ /\A\d{1,}\Z/
1490
+ return find_workflow_by_id(val)
1492
1491
  else
1493
- print_red_alert "Workflow not found by name #{name}"
1494
- exit 1
1492
+ return find_workflow_by_name(val)
1493
+ end
1494
+ end
1495
+
1496
+ def find_workflow_by_id(id)
1497
+ begin
1498
+ json_response = @task_sets_interface.get(id.to_i)
1499
+ return json_response['taskSet']
1500
+ rescue RestClient::Exception => e
1501
+ if e.response && e.response.code == 404
1502
+ print_red_alert "Workflow not found by id #{id}"
1503
+ else
1504
+ raise e
1505
+ end
1495
1506
  end
1496
1507
  end
1497
1508
 
1509
+ def find_workflow_by_name(name)
1510
+ workflows = @task_sets_interface.get({name: name.to_s})['taskSets']
1511
+ if workflows.empty?
1512
+ print_red_alert "Workflow not found by name #{name}"
1513
+ return nil
1514
+ elsif workflows.size > 1
1515
+ print_red_alert "#{workflows.size} workflows by name #{name}"
1516
+ print_workflows_table(workflows, {color: red})
1517
+ print reset,"\n\n"
1518
+ return nil
1519
+ else
1520
+ return workflows[0]
1521
+ end
1522
+ end
1498
1523
 
1499
1524
  def format_server_power_state(server, return_color=cyan)
1500
1525
  out = ""
@@ -427,11 +427,11 @@ class Morpheus::Cli::Instances
427
427
  end
428
428
 
429
429
  def update(args)
430
- usage = "Usage: morpheus instances update [name] [options]"
430
+ usage = "Usage: morpheus instances update [instance] [options]"
431
431
  options = {}
432
432
  params = {}
433
433
  optparse = Morpheus::Cli::OptionParser.new do |opts|
434
- opts.banner = subcommand_usage("[name]")
434
+ opts.banner = subcommand_usage("[instance]")
435
435
  opts.on('--name VALUE', String, "Name") do |val|
436
436
  params['displayName'] = val
437
437
  end
@@ -508,7 +508,7 @@ class Morpheus::Cli::Instances
508
508
  end
509
509
  else
510
510
  if params.empty?
511
- print_red_alert "Specify atleast one option to update"
511
+ print_red_alert "Specify at least one option to update"
512
512
  puts optparse
513
513
  exit 1
514
514
  end
@@ -537,11 +537,11 @@ class Morpheus::Cli::Instances
537
537
  end
538
538
 
539
539
  def update_notes(args)
540
- usage = "Usage: morpheus instances update-notes [name] [options]"
540
+ usage = "Usage: morpheus instances update-notes [instance] [options]"
541
541
  options = {}
542
542
  params = {}
543
543
  optparse = Morpheus::Cli::OptionParser.new do |opts|
544
- opts.banner = subcommand_usage("[name]")
544
+ opts.banner = subcommand_usage("[instance]")
545
545
  opts.on('--notes VALUE', String, "Notes content (Markdown)") do |val|
546
546
  params['notes'] = val
547
547
  end
@@ -616,7 +616,7 @@ class Morpheus::Cli::Instances
616
616
  out = ""
617
617
  options = {}
618
618
  optparse = Morpheus::Cli::OptionParser.new do |opts|
619
- opts.banner = subcommand_usage("[name]")
619
+ opts.banner = subcommand_usage("[instance]")
620
620
  build_common_options(opts, options, [:quiet, :json, :remote]) # no :dry_run, just do it man
621
621
  end
622
622
  optparse.parse!(args)
@@ -648,7 +648,7 @@ class Morpheus::Cli::Instances
648
648
  def stats(args)
649
649
  options = {}
650
650
  optparse = Morpheus::Cli::OptionParser.new do |opts|
651
- opts.banner = subcommand_usage("[name]")
651
+ opts.banner = subcommand_usage("[instance]")
652
652
  build_common_options(opts, options, [:json, :yaml, :csv, :fields, :dry_run, :remote])
653
653
  end
654
654
  optparse.parse!(args)
@@ -699,7 +699,7 @@ class Morpheus::Cli::Instances
699
699
  def console(args)
700
700
  options = {}
701
701
  optparse = Morpheus::Cli::OptionParser.new do |opts|
702
- opts.banner = subcommand_usage("[name]")
702
+ opts.banner = subcommand_usage("[instance]")
703
703
  opts.on( '-n', '--node NODE_ID', "Scope console to specific Container or VM" ) do |node_id|
704
704
  options[:node_id] = node_id.to_i
705
705
  end
@@ -736,7 +736,7 @@ class Morpheus::Cli::Instances
736
736
  def logs(args)
737
737
  options = {}
738
738
  optparse = Morpheus::Cli::OptionParser.new do |opts|
739
- opts.banner = subcommand_usage("[name]")
739
+ opts.banner = subcommand_usage("[instance]")
740
740
  opts.on( '-n', '--node NODE_ID', "Scope logs to specific Container or VM" ) do |node_id|
741
741
  options[:node_id] = node_id.to_i
742
742
  end
@@ -864,7 +864,7 @@ class Morpheus::Cli::Instances
864
864
  end
865
865
  return
866
866
  end
867
- instance = find_instance_by_name_or_id(arg)
867
+ instance = find_instance_by_name_or_id(arg =~ /\A\d{1,}\Z/ ? arg.to_i : arg)
868
868
  @instances_interface.setopts(options)
869
869
  json_response = @instances_interface.get(instance['id'])
870
870
  if options[:quiet]
@@ -1059,7 +1059,7 @@ class Morpheus::Cli::Instances
1059
1059
  def list_containers(args)
1060
1060
  options = {}
1061
1061
  optparse = Morpheus::Cli::OptionParser.new do |opts|
1062
- opts.banner = subcommand_usage("[name]")
1062
+ opts.banner = subcommand_usage("[instance]")
1063
1063
  build_common_options(opts, options, [:json, :yaml, :csv, :fields, :dry_run, :remote])
1064
1064
  end
1065
1065
  optparse.parse!(args)
@@ -1152,7 +1152,7 @@ class Morpheus::Cli::Instances
1152
1152
  def backups(args)
1153
1153
  options = {}
1154
1154
  optparse = Morpheus::Cli::OptionParser.new do |opts|
1155
- opts.banner = subcommand_usage("[name]")
1155
+ opts.banner = subcommand_usage("[instance]")
1156
1156
  build_common_options(opts, options, [:json, :dry_run, :remote])
1157
1157
  end
1158
1158
  optparse.parse!(args)
@@ -1245,7 +1245,7 @@ class Morpheus::Cli::Instances
1245
1245
  def clone(args)
1246
1246
  options = {}
1247
1247
  optparse = Morpheus::Cli::OptionParser.new do |opts|
1248
- opts.banner = subcommand_usage("[name] -g GROUP")
1248
+ opts.banner = subcommand_usage("[instance] -g GROUP")
1249
1249
  build_option_type_options(opts, options, clone_instance_option_types(false))
1250
1250
  opts.on( '-g', '--group GROUP', "Group Name or ID for the new instance" ) do |val|
1251
1251
  options[:group] = val
@@ -1312,7 +1312,7 @@ class Morpheus::Cli::Instances
1312
1312
  def envs(args)
1313
1313
  options = {}
1314
1314
  optparse = Morpheus::Cli::OptionParser.new do |opts|
1315
- opts.banner = subcommand_usage("[name]")
1315
+ opts.banner = subcommand_usage("[instance]")
1316
1316
  build_common_options(opts, options, [:json, :dry_run, :remote])
1317
1317
  end
1318
1318
  optparse.parse!(args)
@@ -1353,7 +1353,7 @@ class Morpheus::Cli::Instances
1353
1353
  options = {}
1354
1354
 
1355
1355
  optparse = Morpheus::Cli::OptionParser.new do |opts|
1356
- opts.banner = subcommand_usage("[name] VAR VALUE [-e]")
1356
+ opts.banner = subcommand_usage("[instance] VAR VALUE [-e]")
1357
1357
  opts.on( '-e', "Exportable" ) do |exportable|
1358
1358
  options[:export] = exportable
1359
1359
  end
@@ -1394,7 +1394,7 @@ class Morpheus::Cli::Instances
1394
1394
  def delenv(args)
1395
1395
  options = {}
1396
1396
  optparse = Morpheus::Cli::OptionParser.new do |opts|
1397
- opts.banner = subcommand_usage("[name] VAR")
1397
+ opts.banner = subcommand_usage("[instance] VAR")
1398
1398
  build_common_options(opts, options, [:json, :dry_run, :remote])
1399
1399
  end
1400
1400
  optparse.parse!(args)
@@ -1428,7 +1428,7 @@ class Morpheus::Cli::Instances
1428
1428
  params = {'server' => true, 'muteMonitoring' => false}
1429
1429
  options = {}
1430
1430
  optparse = Morpheus::Cli::OptionParser.new do |opts|
1431
- opts.banner = subcommand_usage("[name]")
1431
+ opts.banner = subcommand_usage("[instance]")
1432
1432
  opts.on('--mute-monitoring [on|off]', String, "Mute monitoring. Default is off.") do |val|
1433
1433
  params['muteMonitoring'] = val.nil? || val.to_s == 'on' || val.to_s == 'true'
1434
1434
  end
@@ -1496,10 +1496,10 @@ class Morpheus::Cli::Instances
1496
1496
  params = {'server' => true}
1497
1497
  options = {}
1498
1498
  optparse = Morpheus::Cli::OptionParser.new do |opts|
1499
- opts.banner = subcommand_usage("[name]")
1499
+ opts.banner = subcommand_usage("[instance]")
1500
1500
  build_common_options(opts, options, [:auto_confirm, :quiet, :json, :dry_run, :remote])
1501
1501
  opts.footer = "Start an instance.\n" +
1502
- "[name] is required. This is the name or id of an instance. Supports 1-N [name] arguments."
1502
+ "[instance] is required. This is the name or id of an instance. Supports 1-N [instance] arguments."
1503
1503
  end
1504
1504
  optparse.parse!(args)
1505
1505
  if args.count < 1
@@ -1556,7 +1556,7 @@ class Morpheus::Cli::Instances
1556
1556
  params = {'server' => true, 'muteMonitoring' => true}
1557
1557
  options = {}
1558
1558
  optparse = Morpheus::Cli::OptionParser.new do |opts|
1559
- opts.banner = subcommand_usage("[name]")
1559
+ opts.banner = subcommand_usage("[instance]")
1560
1560
  opts.on('--mute-monitoring [on|off]', String, "Mute monitoring. Default is on.") do |val|
1561
1561
  params['muteMonitoring'] = val.nil? || val.to_s == 'on' || val.to_s == 'true'
1562
1562
  end
@@ -1566,7 +1566,7 @@ class Morpheus::Cli::Instances
1566
1566
  opts.add_hidden_option('muteMonitoring') if opts.is_a?(Morpheus::Cli::OptionParser)
1567
1567
  build_common_options(opts, options, [:auto_confirm, :quiet, :json, :dry_run, :remote])
1568
1568
  opts.footer = "Restart an instance.\n" +
1569
- "[name] is required. This is the name or id of an instance. Supports 1-N [name] arguments."
1569
+ "[instance] is required. This is the name or id of an instance. Supports 1-N [instance] arguments."
1570
1570
  end
1571
1571
  optparse.parse!(args)
1572
1572
  if args.count < 1
@@ -1623,13 +1623,13 @@ class Morpheus::Cli::Instances
1623
1623
  params = {'server' => true, 'muteMonitoring' => false}
1624
1624
  options = {}
1625
1625
  optparse = Morpheus::Cli::OptionParser.new do |opts|
1626
- opts.banner = subcommand_usage("[name]")
1626
+ opts.banner = subcommand_usage("[instance]")
1627
1627
  opts.on('--muteMonitoring [on|off]', String, "Mute monitoring. Default is off.") do |val|
1628
1628
  params['muteMonitoring'] = val.nil? || val.to_s == 'on' || val.to_s == 'true'
1629
1629
  end
1630
1630
  build_common_options(opts, options, [:auto_confirm, :quiet, :json, :dry_run, :remote])
1631
1631
  opts.footer = "Suspend an instance.\n" +
1632
- "[name] is required. This is the name or id of an instance. Supports 1-N [name] arguments."
1632
+ "[instance] is required. This is the name or id of an instance. Supports 1-N [instance] arguments."
1633
1633
  end
1634
1634
  optparse.parse!(args)
1635
1635
  if args.count < 1
@@ -1674,10 +1674,10 @@ class Morpheus::Cli::Instances
1674
1674
  params = {'server' => true}
1675
1675
  options = {}
1676
1676
  optparse = Morpheus::Cli::OptionParser.new do |opts|
1677
- opts.banner = subcommand_usage("[name]")
1677
+ opts.banner = subcommand_usage("[instance]")
1678
1678
  build_common_options(opts, options, [:auto_confirm, :quiet, :json, :dry_run, :remote])
1679
1679
  opts.footer = "Eject an instance.\n" +
1680
- "[name] is required. This is the name or id of an instance. Supports 1-N [name] arguments."
1680
+ "[instance] is required. This is the name or id of an instance. Supports 1-N [instance] arguments."
1681
1681
  end
1682
1682
  optparse.parse!(args)
1683
1683
  if args.count < 1
@@ -1722,7 +1722,7 @@ class Morpheus::Cli::Instances
1722
1722
  params = {'server' => false, 'muteMonitoring' => false}
1723
1723
  options = {}
1724
1724
  optparse = Morpheus::Cli::OptionParser.new do |opts|
1725
- opts.banner = subcommand_usage("[name]")
1725
+ opts.banner = subcommand_usage("[instance]")
1726
1726
  opts.on('--mute-monitoring [on|off]', String, "Mute monitoring. Default is off.") do |val|
1727
1727
  params['muteMonitoring'] = val.nil? || val.to_s == 'on' || val.to_s == 'true'
1728
1728
  end
@@ -1732,7 +1732,7 @@ class Morpheus::Cli::Instances
1732
1732
  opts.add_hidden_option('muteMonitoring') if opts.is_a?(Morpheus::Cli::OptionParser)
1733
1733
  build_common_options(opts, options, [:auto_confirm, :quiet, :json, :dry_run, :remote])
1734
1734
  opts.footer = "Stop service on an instance.\n" +
1735
- "[name] is required. This is the name or id of an instance. Supports 1-N [name] arguments."
1735
+ "[instance] is required. This is the name or id of an instance. Supports 1-N [instance] arguments."
1736
1736
  end
1737
1737
  optparse.parse!(args)
1738
1738
  if args.count < 1
@@ -1790,10 +1790,10 @@ class Morpheus::Cli::Instances
1790
1790
  params = {'server' => true} # server is true eh? so start-service is the same as start
1791
1791
  options = {}
1792
1792
  optparse = Morpheus::Cli::OptionParser.new do |opts|
1793
- opts.banner = subcommand_usage("[name]")
1793
+ opts.banner = subcommand_usage("[instance]")
1794
1794
  build_common_options(opts, options, [:auto_confirm, :quiet, :json, :dry_run, :remote])
1795
1795
  opts.footer = "Start service on an instance.\n" +
1796
- "[name] is required. This is the name or id of an instance. Supports 1-N [name] arguments."
1796
+ "[instance] is required. This is the name or id of an instance. Supports 1-N [instance] arguments."
1797
1797
  end
1798
1798
  optparse.parse!(args)
1799
1799
  if args.count < 1
@@ -1850,7 +1850,7 @@ class Morpheus::Cli::Instances
1850
1850
  params = {'server' => false, 'muteMonitoring' => true}
1851
1851
  options = {}
1852
1852
  optparse = Morpheus::Cli::OptionParser.new do |opts|
1853
- opts.banner = subcommand_usage("[name]")
1853
+ opts.banner = subcommand_usage("[instance]")
1854
1854
  opts.on('--mute-monitoring [on|off]', String, "Mute monitoring. Default is on.") do |val|
1855
1855
  params['muteMonitoring'] = val.nil? || val.to_s == 'on' || val.to_s == 'true'
1856
1856
  end
@@ -1860,7 +1860,7 @@ class Morpheus::Cli::Instances
1860
1860
  opts.add_hidden_option('muteMonitoring') if opts.is_a?(Morpheus::Cli::OptionParser)
1861
1861
  build_common_options(opts, options, [:auto_confirm, :quiet, :json, :dry_run, :remote])
1862
1862
  opts.footer = "Restart service on an instance.\n" +
1863
- "[name] is required. This is the name or id of an instance. Supports 1-N [name] arguments."
1863
+ "[instance] is required. This is the name or id of an instance. Supports 1-N [instance] arguments."
1864
1864
  end
1865
1865
  optparse.parse!(args)
1866
1866
  if args.count < 1
@@ -2060,7 +2060,7 @@ class Morpheus::Cli::Instances
2060
2060
  def resize(args)
2061
2061
  options = {}
2062
2062
  optparse = Morpheus::Cli::OptionParser.new do |opts|
2063
- opts.banner = subcommand_usage("[name]")
2063
+ opts.banner = subcommand_usage("[instance]")
2064
2064
  build_common_options(opts, options, [:options, :json, :dry_run, :remote])
2065
2065
  end
2066
2066
  optparse.parse!(args)
@@ -2136,7 +2136,7 @@ class Morpheus::Cli::Instances
2136
2136
  def backup(args)
2137
2137
  options = {}
2138
2138
  optparse = Morpheus::Cli::OptionParser.new do |opts|
2139
- opts.banner = subcommand_usage("[name]")
2139
+ opts.banner = subcommand_usage("[instance]")
2140
2140
  build_common_options(opts, options, [:auto_confirm, :json, :dry_run, :remote])
2141
2141
  end
2142
2142
  optparse.parse!(args)
@@ -2186,7 +2186,7 @@ class Morpheus::Cli::Instances
2186
2186
  options = {}
2187
2187
  query_params = {}
2188
2188
  optparse = Morpheus::Cli::OptionParser.new do |opts|
2189
- opts.banner = subcommand_usage("[name]")
2189
+ opts.banner = subcommand_usage("[instance]")
2190
2190
  opts.on( '-B', '--keep-backups', "Preserve copy of backups" ) do
2191
2191
  query_params[:keepBackups] = 'on'
2192
2192
  end
@@ -2239,7 +2239,7 @@ class Morpheus::Cli::Instances
2239
2239
  def firewall_disable(args)
2240
2240
  options = {}
2241
2241
  optparse = Morpheus::Cli::OptionParser.new do |opts|
2242
- opts.banner = subcommand_usage("[name]")
2242
+ opts.banner = subcommand_usage("[instance]")
2243
2243
  build_common_options(opts, options, [:json, :dry_run, :quiet, :remote])
2244
2244
  end
2245
2245
  optparse.parse!(args)
@@ -2271,7 +2271,7 @@ class Morpheus::Cli::Instances
2271
2271
  def firewall_enable(args)
2272
2272
  options = {}
2273
2273
  optparse = Morpheus::Cli::OptionParser.new do |opts|
2274
- opts.banner = subcommand_usage("[name]")
2274
+ opts.banner = subcommand_usage("[instance]")
2275
2275
  build_common_options(opts, options, [:json, :dry_run, :quiet, :remote])
2276
2276
  end
2277
2277
  optparse.parse!(args)
@@ -2303,7 +2303,7 @@ class Morpheus::Cli::Instances
2303
2303
  def security_groups(args)
2304
2304
  options = {}
2305
2305
  optparse = Morpheus::Cli::OptionParser.new do |opts|
2306
- opts.banner = subcommand_usage("[name]")
2306
+ opts.banner = subcommand_usage("[instance]")
2307
2307
  build_common_options(opts, options, [:json, :dry_run, :remote])
2308
2308
  end
2309
2309
  optparse.parse!(args)
@@ -2351,7 +2351,7 @@ class Morpheus::Cli::Instances
2351
2351
  security_group_ids = nil
2352
2352
  clear_or_secgroups_specified = false
2353
2353
  optparse = Morpheus::Cli::OptionParser.new do |opts|
2354
- opts.banner = subcommand_usage("[name] [-S] [-c]")
2354
+ opts.banner = subcommand_usage("[instance] [-S] [-c]")
2355
2355
  opts.on( '-S', '--secgroups SECGROUPS', "Apply the specified comma separated security group ids" ) do |secgroups|
2356
2356
  security_group_ids = secgroups.split(",")
2357
2357
  clear_or_secgroups_specified = true
@@ -2398,7 +2398,7 @@ class Morpheus::Cli::Instances
2398
2398
  def run_workflow(args)
2399
2399
  options = {}
2400
2400
  optparse = Morpheus::Cli::OptionParser.new do |opts|
2401
- opts.banner = subcommand_usage("[name] [workflow] [options]")
2401
+ opts.banner = subcommand_usage("[instance] [workflow] [options]")
2402
2402
  build_common_options(opts, options, [:options, :json, :dry_run, :remote])
2403
2403
  end
2404
2404
  optparse.parse!(args)
@@ -2408,7 +2408,7 @@ class Morpheus::Cli::Instances
2408
2408
  end
2409
2409
  connect(options)
2410
2410
  instance = find_instance_by_name_or_id(args[0])
2411
- workflow = find_workflow_by_name(args[1])
2411
+ workflow = find_workflow_by_name_or_id(args[1])
2412
2412
  task_types = @tasks_interface.task_types()
2413
2413
  editable_options = []
2414
2414
  workflow['taskSetTasks'].sort{|a,b| a['taskOrder'] <=> b['taskOrder']}.each do |task_set_task|
@@ -2457,7 +2457,7 @@ class Morpheus::Cli::Instances
2457
2457
  options = {}
2458
2458
  storage_provider_id = nil
2459
2459
  optparse = Morpheus::Cli::OptionParser.new do |opts|
2460
- opts.banner = subcommand_usage("[name]")
2460
+ opts.banner = subcommand_usage("[instance]")
2461
2461
  opts.on("--storage-provider ID", String, "Optional storage provider") do |val|
2462
2462
  storage_provider_id = val
2463
2463
  end
@@ -2513,7 +2513,7 @@ class Morpheus::Cli::Instances
2513
2513
  options = {}
2514
2514
  params = {}
2515
2515
  optparse = Morpheus::Cli::OptionParser.new do|opts|
2516
- opts.banner = subcommand_usage("[name]")
2516
+ opts.banner = subcommand_usage("[instance]")
2517
2517
  build_common_options(opts, options, [:json, :yaml, :csv, :fields, :dry_run, :remote])
2518
2518
  opts.footer = "Show scaling threshold information for an instance."
2519
2519
  end
@@ -2567,10 +2567,10 @@ class Morpheus::Cli::Instances
2567
2567
  end
2568
2568
 
2569
2569
  def scaling_update(args)
2570
- usage = "Usage: morpheus instances scaling-update [name] [options]"
2570
+ usage = "Usage: morpheus instances scaling-update [instance] [options]"
2571
2571
  options = {}
2572
2572
  optparse = Morpheus::Cli::OptionParser.new do|opts|
2573
- opts.banner = subcommand_usage("[name]")
2573
+ opts.banner = subcommand_usage("[instance]")
2574
2574
  build_option_type_options(opts, options, instance_scaling_option_types(nil))
2575
2575
  build_common_options(opts, options, [:options, :json, :dry_run, :remote])
2576
2576
  opts.footer = "Update scaling threshold information for an instance."
@@ -2689,10 +2689,10 @@ class Morpheus::Cli::Instances
2689
2689
 
2690
2690
  def load_balancer_update(args)
2691
2691
  raise "Not Yet Implemented"
2692
- usage = "Usage: morpheus instances lb-update [name] [options]"
2692
+ usage = "Usage: morpheus instances lb-update [instance] [options]"
2693
2693
  options = {}
2694
2694
  optparse = Morpheus::Cli::OptionParser.new do|opts|
2695
- opts.banner = subcommand_usage("[name]")
2695
+ opts.banner = subcommand_usage("[instance]")
2696
2696
  #build_option_type_options(opts, options, instance_load_balancer_option_types(nil))
2697
2697
  build_common_options(opts, options, [:options, :json, :dry_run, :remote])
2698
2698
  opts.footer = "Assign a load balancer for an instance."
@@ -2770,10 +2770,10 @@ class Morpheus::Cli::Instances
2770
2770
  end
2771
2771
 
2772
2772
  def load_balancer_remove(args)
2773
- usage = "Usage: morpheus instances lb-remove [name] [options]"
2773
+ usage = "Usage: morpheus instances lb-remove [instance] [options]"
2774
2774
  options = {}
2775
2775
  optparse = Morpheus::Cli::OptionParser.new do|opts|
2776
- opts.banner = subcommand_usage("[name]")
2776
+ opts.banner = subcommand_usage("[instance]")
2777
2777
  build_option_type_options(opts, options, instance_scaling_option_types(nil))
2778
2778
  build_common_options(opts, options, [:auto_confirm, :json, :dry_run, :remote])
2779
2779
  opts.footer = "Remove a load balancer from an instance."
@@ -3273,16 +3273,41 @@ private
3273
3273
  end
3274
3274
  end
3275
3275
 
3276
- def find_workflow_by_name(name)
3277
- task_set_results = @task_sets_interface.get(name)
3278
- if !task_set_results['taskSets'].nil? && !task_set_results['taskSets'].empty?
3279
- return task_set_results['taskSets'][0]
3276
+ def find_workflow_by_name_or_id(val)
3277
+ if val.to_s =~ /\A\d{1,}\Z/
3278
+ return find_workflow_by_id(val)
3280
3279
  else
3281
- print_red_alert "Workflow not found by name #{name}"
3282
- exit 1
3280
+ return find_workflow_by_name(val)
3283
3281
  end
3284
3282
  end
3285
3283
 
3284
+ def find_workflow_by_id(id)
3285
+ begin
3286
+ json_response = @task_sets_interface.get(id.to_i)
3287
+ return json_response['taskSet']
3288
+ rescue RestClient::Exception => e
3289
+ if e.response && e.response.code == 404
3290
+ print_red_alert "Workflow not found by id #{id}"
3291
+ else
3292
+ raise e
3293
+ end
3294
+ end
3295
+ end
3296
+
3297
+ def find_workflow_by_name(name)
3298
+ workflows = @task_sets_interface.get({name: name.to_s})['taskSets']
3299
+ if workflows.empty?
3300
+ print_red_alert "Workflow not found by name #{name}"
3301
+ return nil
3302
+ elsif workflows.size > 1
3303
+ print_red_alert "#{workflows.size} workflows by name #{name}"
3304
+ print_workflows_table(workflows, {color: red})
3305
+ print reset,"\n\n"
3306
+ return nil
3307
+ else
3308
+ return workflows[0]
3309
+ end
3310
+ end
3286
3311
 
3287
3312
  def format_instance_status(instance, return_color=cyan)
3288
3313
  out = ""