morpheus-cli 5.5.2.2 → 5.5.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (132) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/Dockerfile +1 -1
  4. data/README.md +57 -4
  5. data/Rakefile +9 -0
  6. data/bin/morpheus +4 -4
  7. data/lib/morpheus/api/api_client.rb +20 -2
  8. data/lib/morpheus/api/appliance_settings_interface.rb +15 -0
  9. data/lib/morpheus/api/archive_buckets_interface.rb +1 -1
  10. data/lib/morpheus/api/archive_files_interface.rb +3 -3
  11. data/lib/morpheus/api/clients_interface.rb +2 -2
  12. data/lib/morpheus/api/clusters_interface.rb +8 -1
  13. data/lib/morpheus/api/containers_interface.rb +29 -16
  14. data/lib/morpheus/api/custom_instance_types_interface.rb +0 -2
  15. data/lib/morpheus/api/cypher_interface.rb +1 -2
  16. data/lib/morpheus/api/doc_interface.rb +8 -6
  17. data/lib/morpheus/api/file_copy_request_interface.rb +1 -1
  18. data/lib/morpheus/api/guidance_settings_interface.rb +17 -0
  19. data/lib/morpheus/api/health_interface.rb +1 -1
  20. data/lib/morpheus/api/image_builder_interface.rb +3 -3
  21. data/lib/morpheus/api/instances_interface.rb +25 -0
  22. data/lib/morpheus/api/logs_interface.rb +2 -4
  23. data/lib/morpheus/api/monitoring_interface.rb +6 -6
  24. data/lib/morpheus/api/monitoring_settings_interface.rb +25 -0
  25. data/lib/morpheus/api/network_server_groups_interface.rb +7 -0
  26. data/lib/morpheus/api/packages_interface.rb +1 -1
  27. data/lib/morpheus/api/reports_interface.rb +1 -1
  28. data/lib/morpheus/api/servers_interface.rb +9 -1
  29. data/lib/morpheus/api/storage_providers_interface.rb +2 -2
  30. data/lib/morpheus/api/virtual_images_interface.rb +1 -1
  31. data/lib/morpheus/api.rb +2 -0
  32. data/lib/morpheus/benchmarking.rb +1 -1
  33. data/lib/morpheus/cli/cli_command.rb +79 -37
  34. data/lib/morpheus/cli/cli_registry.rb +19 -10
  35. data/lib/morpheus/cli/commands/access_token_command.rb +1 -1
  36. data/lib/morpheus/cli/commands/appliance_settings_command.rb +57 -2
  37. data/lib/morpheus/cli/commands/apps.rb +1 -1
  38. data/lib/morpheus/cli/commands/archives_command.rb +25 -33
  39. data/lib/morpheus/cli/commands/backup_settings_command.rb +1 -1
  40. data/lib/morpheus/cli/commands/blueprints_command.rb +10 -21
  41. data/lib/morpheus/cli/commands/boot_scripts_command.rb +2 -2
  42. data/lib/morpheus/cli/commands/cat_command.rb +1 -1
  43. data/lib/morpheus/cli/commands/catalog_item_types_command.rb +18 -13
  44. data/lib/morpheus/cli/commands/clouds.rb +3 -3
  45. data/lib/morpheus/cli/commands/clusters.rb +154 -3
  46. data/lib/morpheus/cli/commands/containers_command.rb +398 -253
  47. data/lib/morpheus/cli/commands/cypher_command.rb +3 -0
  48. data/lib/morpheus/cli/commands/deployments.rb +1 -1
  49. data/lib/morpheus/cli/commands/deploys.rb +9 -9
  50. data/lib/morpheus/cli/commands/doc.rb +15 -16
  51. data/lib/morpheus/cli/commands/execution_request_command.rb +2 -2
  52. data/lib/morpheus/cli/commands/file_copy_request_command.rb +5 -5
  53. data/lib/morpheus/cli/commands/groups.rb +2 -2
  54. data/lib/morpheus/cli/commands/guidance_command.rb +2 -2
  55. data/lib/morpheus/cli/commands/guidance_settings.rb +148 -0
  56. data/lib/morpheus/cli/commands/health_command.rb +4 -4
  57. data/lib/morpheus/cli/commands/hosts.rb +43 -5
  58. data/lib/morpheus/cli/commands/image_builder_command.rb +1 -1
  59. data/lib/morpheus/cli/commands/instances.rb +419 -148
  60. data/lib/morpheus/cli/commands/integrations_command.rb +22 -20
  61. data/lib/morpheus/cli/commands/key_pairs.rb +2 -2
  62. data/lib/morpheus/cli/commands/library_container_scripts_command.rb +2 -2
  63. data/lib/morpheus/cli/commands/library_container_templates_command.rb +2 -2
  64. data/lib/morpheus/cli/commands/library_instance_types_command.rb +3 -3
  65. data/lib/morpheus/cli/commands/library_spec_templates_command.rb +2 -2
  66. data/lib/morpheus/cli/commands/log_settings_command.rb +1 -1
  67. data/lib/morpheus/cli/commands/login.rb +1 -1
  68. data/lib/morpheus/cli/commands/man_command.rb +32 -18
  69. data/lib/morpheus/cli/commands/monitoring_settings.rb +228 -0
  70. data/lib/morpheus/cli/commands/network_server_groups_command.rb +222 -0
  71. data/lib/morpheus/cli/commands/packages_command.rb +11 -11
  72. data/lib/morpheus/cli/commands/plugins.rb +1 -1
  73. data/lib/morpheus/cli/commands/policies_command.rb +4 -4
  74. data/lib/morpheus/cli/commands/preseed_scripts_command.rb +2 -2
  75. data/lib/morpheus/cli/commands/provisioning_settings_command.rb +1 -1
  76. data/lib/morpheus/cli/commands/remote.rb +1 -1
  77. data/lib/morpheus/cli/commands/reports_command.rb +13 -3
  78. data/lib/morpheus/cli/commands/security_groups.rb +1 -1
  79. data/lib/morpheus/cli/commands/shell.rb +40 -62
  80. data/lib/morpheus/cli/commands/snapshots.rb +3 -5
  81. data/lib/morpheus/cli/commands/source_command.rb +8 -16
  82. data/lib/morpheus/cli/commands/storage_providers_command.rb +7 -7
  83. data/lib/morpheus/cli/commands/tasks.rb +2 -2
  84. data/lib/morpheus/cli/commands/vdi_pools_command.rb +6 -6
  85. data/lib/morpheus/cli/commands/view.rb +5 -1
  86. data/lib/morpheus/cli/commands/whitelabel_settings_command.rb +5 -5
  87. data/lib/morpheus/cli/commands/whoami.rb +2 -2
  88. data/lib/morpheus/cli/credentials.rb +30 -8
  89. data/lib/morpheus/cli/dot_file.rb +8 -15
  90. data/lib/morpheus/cli/error_handler.rb +16 -0
  91. data/lib/morpheus/cli/errors.rb +8 -1
  92. data/lib/morpheus/cli/mixins/print_helper.rb +17 -13
  93. data/lib/morpheus/cli/mixins/provisioning_helper.rb +14 -12
  94. data/lib/morpheus/cli/mixins/rest_command.rb +23 -19
  95. data/lib/morpheus/cli/mixins/secondary_rest_command.rb +47 -24
  96. data/lib/morpheus/cli/option_parser.rb +5 -1
  97. data/lib/morpheus/cli/option_types.rb +59 -12
  98. data/lib/morpheus/cli/version.rb +1 -1
  99. data/lib/morpheus/cli.rb +26 -16
  100. data/lib/morpheus/ext/rest_client.rb +3 -2
  101. data/lib/morpheus/ext/string.rb +6 -4
  102. data/lib/morpheus/formatters.rb +1 -1
  103. data/lib/morpheus/logging.rb +4 -4
  104. data/lib/morpheus/morpkg.rb +4 -4
  105. data/lib/morpheus/rest_client.rb +2 -2
  106. data/lib/morpheus/routes.rb +41 -9
  107. data/lib/morpheus/terminal.rb +65 -16
  108. data/lib/morpheus.rb +1 -1
  109. data/morpheus-cli.gemspec +1 -0
  110. data/test/api/containers_interface_test.rb +68 -0
  111. data/test/api/doc_interface_test.rb +35 -0
  112. data/test/api/instances_interface_test.rb +22 -0
  113. data/test/api/whoami_interface_test.rb +14 -0
  114. data/test/cli/access_token_test.rb +36 -0
  115. data/test/cli/auth_test.rb +82 -0
  116. data/test/cli/cli_test.rb +48 -0
  117. data/test/cli/containers_test.rb +92 -0
  118. data/test/cli/doc_test.rb +35 -0
  119. data/test/cli/help_test.rb +25 -0
  120. data/test/cli/instances_test.rb +36 -0
  121. data/test/cli/man_test.rb +14 -0
  122. data/test/cli/remote_test.rb +89 -0
  123. data/test/cli/roles_test.rb +34 -0
  124. data/test/cli/shell_test.rb +81 -0
  125. data/test/cli/version_test.rb +23 -0
  126. data/test/cli/view_test.rb +55 -0
  127. data/test/cli/whoami_test.rb +17 -0
  128. data/test/morpheus_test.rb +16 -0
  129. data/test/test_case.rb +338 -0
  130. data/test/test_config.rb +137 -0
  131. data/test/test_data_helper.rb +97 -0
  132. metadata +67 -3
@@ -383,7 +383,6 @@ class Morpheus::Cli::ArchivesCommand
383
383
  end
384
384
 
385
385
  def remove_bucket(args)
386
- full_command_string = "#{command_name} remove #{args.join(' ')}".strip
387
386
  options = {}
388
387
  query_params = {}
389
388
  optparse = Morpheus::Cli::OptionParser.new do |opts|
@@ -414,7 +413,7 @@ class Morpheus::Cli::ArchivesCommand
414
413
  end
415
414
  @archive_buckets_interface.setopts(options)
416
415
  if options[:dry_run]
417
- print_dry_run @archive_buckets_interface.dry.destroy(archive_bucket['id'], query_params), full_command_string
416
+ print_dry_run @archive_buckets_interface.dry.destroy(archive_bucket['id'], query_params)
418
417
  return 0
419
418
  end
420
419
  json_response = @archive_buckets_interface.destroy(archive_bucket['id'], query_params)
@@ -470,7 +469,7 @@ class Morpheus::Cli::ArchivesCommand
470
469
  puts_error "#{command_name} missing argument: [local-file]\n#{optparse}"
471
470
  return 1
472
471
  end
473
- if !File.exists?(local_file_path)
472
+ if !File.exist?(local_file_path)
474
473
  print_error Morpheus::Terminal.angry_prompt
475
474
  puts_error "#{command_name} bad argument: [local-file]\nFile '#{local_file_path}' was not found.\n#{optparse}"
476
475
  return 1
@@ -595,7 +594,7 @@ class Morpheus::Cli::ArchivesCommand
595
594
  else
596
595
 
597
596
  # upload file
598
- if !File.exists?(local_file_path) && !File.file?(local_file_path)
597
+ if !File.exist?(local_file_path) && !File.file?(local_file_path)
599
598
  print_error Morpheus::Terminal.angry_prompt
600
599
  puts_error "#{command_name} bad argument: [local-file]\nFile '#{local_file_path}' was not found.\n#{optparse}"
601
600
  return 1
@@ -886,7 +885,6 @@ class Morpheus::Cli::ArchivesCommand
886
885
  end
887
886
 
888
887
  def get_file(args)
889
- full_command_string = "#{command_name} get-file #{args.join(' ')}".strip
890
888
  options = {}
891
889
  max_links = 10
892
890
  max_history = 10
@@ -929,9 +927,9 @@ class Morpheus::Cli::ArchivesCommand
929
927
  @archive_files_interface.setopts(options)
930
928
  if options[:dry_run]
931
929
  if file_id
932
- print_dry_run @archive_files_interface.dry.get(file_id, params), full_command_string
930
+ print_dry_run @archive_files_interface.dry.get(file_id, params)
933
931
  else
934
- print_dry_run @archive_buckets_interface.dry.list_files(bucket_id, file_path, params), full_command_string
932
+ print_dry_run @archive_buckets_interface.dry.list_files(bucket_id, file_path, params)
935
933
  end
936
934
  return 0
937
935
  end
@@ -1211,7 +1209,6 @@ class Morpheus::Cli::ArchivesCommand
1211
1209
  end
1212
1210
 
1213
1211
  def download_file(args)
1214
- full_command_string = "#{command_name} download #{args.join(' ')}".strip
1215
1212
  options = {}
1216
1213
  outfile = nil
1217
1214
  do_overwrite = false
@@ -1256,15 +1253,15 @@ class Morpheus::Cli::ArchivesCommand
1256
1253
  # outfile = File.join(outfile, File.basename(full_file_path))
1257
1254
  # end
1258
1255
  outfile = File.expand_path(outfile)
1259
- if Dir.exists?(outfile)
1256
+ if Dir.exist?(outfile)
1260
1257
  outfile = File.join(outfile, File.basename(full_file_path))
1261
1258
  end
1262
- if Dir.exists?(outfile)
1259
+ if Dir.exist?(outfile)
1263
1260
  print_red_alert "[local-file] is invalid. It is the name of an existing directory: #{outfile}"
1264
1261
  return 1
1265
1262
  end
1266
1263
  destination_dir = File.dirname(outfile)
1267
- if !Dir.exists?(destination_dir)
1264
+ if !Dir.exist?(destination_dir)
1268
1265
  if do_mkdir
1269
1266
  print cyan,"Creating local directory #{destination_dir}",reset,"\n"
1270
1267
  FileUtils.mkdir_p(destination_dir)
@@ -1273,7 +1270,7 @@ class Morpheus::Cli::ArchivesCommand
1273
1270
  return 1
1274
1271
  end
1275
1272
  end
1276
- if File.exists?(outfile)
1273
+ if File.exist?(outfile)
1277
1274
  if do_overwrite
1278
1275
  # uhh need to be careful wih the passed filepath here..
1279
1276
  # don't delete, just overwrite.
@@ -1288,11 +1285,10 @@ class Morpheus::Cli::ArchivesCommand
1288
1285
  begin
1289
1286
  @archive_files_interface.setopts(options)
1290
1287
  if options[:dry_run]
1291
- # print_dry_run @archive_files_interface.dry.download_file_by_path(full_file_path), full_command_string
1292
1288
  if use_public_url
1293
- print_dry_run @archive_files_interface.dry.download_public_file_by_path_chunked(full_file_path, outfile), full_command_string
1289
+ print_dry_run @archive_files_interface.dry.download_public_file_by_path_chunked(full_file_path, outfile)
1294
1290
  else
1295
- print_dry_run @archive_files_interface.dry.download_file_by_path_chunked(full_file_path, outfile), full_command_string
1291
+ print_dry_run @archive_files_interface.dry.download_file_by_path_chunked(full_file_path, outfile)
1296
1292
  end
1297
1293
  return 0
1298
1294
  end
@@ -1322,7 +1318,7 @@ class Morpheus::Cli::ArchivesCommand
1322
1318
  print red + "ERROR" + reset + " HTTP #{http_response.code}" + "\n"
1323
1319
  end
1324
1320
  # F it, just remove a bad result
1325
- if File.exists?(outfile) && File.file?(outfile)
1321
+ if File.exist?(outfile) && File.file?(outfile)
1326
1322
  Morpheus::Logging::DarkPrinter.puts "Deleting bad file download: #{outfile}" if Morpheus::Logging.debug?
1327
1323
  File.delete(outfile)
1328
1324
  end
@@ -1348,7 +1344,6 @@ class Morpheus::Cli::ArchivesCommand
1348
1344
  end
1349
1345
 
1350
1346
  def read_file(args)
1351
- full_command_string = "archives read #{args.join(' ')}".strip
1352
1347
  options = {}
1353
1348
  outfile = nil
1354
1349
  do_overwrite = false
@@ -1374,7 +1369,7 @@ class Morpheus::Cli::ArchivesCommand
1374
1369
  full_file_path = "#{bucket_id}/#{file_path}".squeeze('/')
1375
1370
  @archive_files_interface.setopts(options)
1376
1371
  if options[:dry_run]
1377
- print_dry_run @archive_files_interface.dry.download_file_by_path(full_file_path), full_command_string
1372
+ print_dry_run @archive_files_interface.dry.download_file_by_path(full_file_path)
1378
1373
  return 1
1379
1374
  end
1380
1375
  if archive_file['rawSize'].to_i > 1024
@@ -1497,7 +1492,6 @@ class Morpheus::Cli::ArchivesCommand
1497
1492
  end
1498
1493
 
1499
1494
  def download_file_link(args)
1500
- full_command_string = "archives download-link #{args.join(' ')}".strip
1501
1495
  options = {}
1502
1496
  outfile = nil
1503
1497
  do_overwrite = false
@@ -1533,15 +1527,15 @@ class Morpheus::Cli::ArchivesCommand
1533
1527
  # full_file_path = args[0]
1534
1528
  outfile = File.expand_path(args[1])
1535
1529
  # [local-file] must include the full file name when downloading a link
1536
- # if Dir.exists?(outfile)
1530
+ # if Dir.exist?(outfile)
1537
1531
  # outfile = File.join(outfile, File.basename(archive_file['name']))
1538
1532
  # end
1539
- if Dir.exists?(outfile)
1533
+ if Dir.exist?(outfile)
1540
1534
  print_red_alert "[local-file] is invalid. It is the name of an existing directory: #{outfile}"
1541
1535
  return 1
1542
1536
  end
1543
1537
  destination_dir = File.dirname(outfile)
1544
- if !Dir.exists?(destination_dir)
1538
+ if !Dir.exist?(destination_dir)
1545
1539
  if do_mkdir
1546
1540
  print cyan,"Creating local directory #{destination_dir}",reset,"\n"
1547
1541
  FileUtils.mkdir_p(destination_dir)
@@ -1550,7 +1544,7 @@ class Morpheus::Cli::ArchivesCommand
1550
1544
  return 1
1551
1545
  end
1552
1546
  end
1553
- if File.exists?(outfile)
1547
+ if File.exist?(outfile)
1554
1548
  if do_overwrite
1555
1549
  # uhh need to be careful wih the passed filepath here..
1556
1550
  # don't delete, just overwrite.
@@ -1566,8 +1560,7 @@ class Morpheus::Cli::ArchivesCommand
1566
1560
  end
1567
1561
  @archive_files_interface.setopts(options)
1568
1562
  if options[:dry_run]
1569
- # print_dry_run @archive_files_interface.dry.download_file_by_path(full_file_path), full_command_string
1570
- print_dry_run @archive_files_interface.dry.download_file_by_link_chunked(link_key, outfile), full_command_string
1563
+ print_dry_run @archive_files_interface.dry.download_file_by_link_chunked(link_key, outfile)
1571
1564
  return 1
1572
1565
  end
1573
1566
  if !options[:quiet]
@@ -1591,7 +1584,7 @@ class Morpheus::Cli::ArchivesCommand
1591
1584
  print red + "ERROR" + reset + " HTTP #{http_response.code}" + "\n"
1592
1585
  end
1593
1586
  # F it, just remove a bad result
1594
- if File.exists?(outfile) && File.file?(outfile)
1587
+ if File.exist?(outfile) && File.file?(outfile)
1595
1588
  Morpheus::Logging::DarkPrinter.puts "Deleting bad file download: #{outfile}" if Morpheus::Logging.debug?
1596
1589
  File.delete(outfile)
1597
1590
  end
@@ -1608,7 +1601,6 @@ class Morpheus::Cli::ArchivesCommand
1608
1601
  end
1609
1602
 
1610
1603
  def download_bucket_zip(args)
1611
- full_command_string = "#{command_name} download-bucket #{args.join(' ')}".strip
1612
1604
  options = {}
1613
1605
  outfile = nil
1614
1606
  do_overwrite = false
@@ -1651,10 +1643,10 @@ class Morpheus::Cli::ArchivesCommand
1651
1643
  # outfile = File.join(outfile, archive_bucket['name'].to_s) + ".zip"
1652
1644
  # end
1653
1645
  outfile = File.expand_path(outfile)
1654
- if Dir.exists?(outfile)
1646
+ if Dir.exist?(outfile)
1655
1647
  outfile = File.join(outfile, archive_bucket['name'].to_s) + ".zip"
1656
1648
  end
1657
- if Dir.exists?(outfile)
1649
+ if Dir.exist?(outfile)
1658
1650
  print_red_alert "[local-file] is invalid. It is the name of an existing directory: #{outfile}"
1659
1651
  return 1
1660
1652
  end
@@ -1663,7 +1655,7 @@ class Morpheus::Cli::ArchivesCommand
1663
1655
  outfile << ".zip"
1664
1656
  end
1665
1657
  destination_dir = File.dirname(outfile)
1666
- if !Dir.exists?(destination_dir)
1658
+ if !Dir.exist?(destination_dir)
1667
1659
  if do_mkdir
1668
1660
  print cyan,"Creating local directory #{destination_dir}",reset,"\n"
1669
1661
  FileUtils.mkdir_p(destination_dir)
@@ -1672,7 +1664,7 @@ class Morpheus::Cli::ArchivesCommand
1672
1664
  return 1
1673
1665
  end
1674
1666
  end
1675
- if File.exists?(outfile)
1667
+ if File.exist?(outfile)
1676
1668
  if do_overwrite
1677
1669
  # uhh need to be careful wih the passed filepath here..
1678
1670
  # don't delete, just overwrite.
@@ -1686,7 +1678,7 @@ class Morpheus::Cli::ArchivesCommand
1686
1678
  end
1687
1679
  @archive_buckets_interface.setopts(options)
1688
1680
  if options[:dry_run]
1689
- print_dry_run @archive_buckets_interface.dry.download_bucket_zip_chunked(bucket_id, outfile), full_command_string
1681
+ print_dry_run @archive_buckets_interface.dry.download_bucket_zip_chunked(bucket_id, outfile)
1690
1682
  return 1
1691
1683
  end
1692
1684
  if !options[:quiet]
@@ -1707,7 +1699,7 @@ class Morpheus::Cli::ArchivesCommand
1707
1699
  print red + "ERROR" + reset + " HTTP #{http_response.code}" + "\n"
1708
1700
  end
1709
1701
  # F it, just remove a bad result
1710
- if File.exists?(outfile) && File.file?(outfile)
1702
+ if File.exist?(outfile) && File.file?(outfile)
1711
1703
  Morpheus::Logging::DarkPrinter.puts "Deleting bad file download: #{outfile}" if Morpheus::Logging.debug?
1712
1704
  File.delete(outfile)
1713
1705
  end
@@ -66,7 +66,7 @@ class Morpheus::Cli::BackupSettingsCommand
66
66
  "Backup Retention Count" => lambda {|it| it['retentionCount'] }
67
67
  }
68
68
  print_description_list(description_cols, backup_settings)
69
- print reset "\n"
69
+ print reset, "\n"
70
70
  return 0
71
71
  rescue RestClient::Exception => e
72
72
  print_rest_exception(e, options)
@@ -260,7 +260,7 @@ class Morpheus::Cli::BlueprintsCommand
260
260
  end
261
261
 
262
262
  def update(args)
263
- params, payload, options = {}, {}, {}
263
+ payload, options = {}, {}
264
264
  optparse = Morpheus::Cli::OptionParser.new do |opts|
265
265
  opts.banner = subcommand_usage("[blueprint] [options]")
266
266
  build_option_type_options(opts, options, update_blueprint_option_types(false))
@@ -283,7 +283,6 @@ class Morpheus::Cli::BlueprintsCommand
283
283
  blueprint = find_blueprint_by_name_or_id(args[0])
284
284
  return 1 if blueprint.nil?
285
285
  payload = {}
286
- passed_options = options[:options] ? options[:options].reject {|k,v| k.is_a?(Symbol) } : {}
287
286
  if options[:payload]
288
287
  payload = options[:payload]
289
288
  payload.deep_merge!(parse_passed_options(options))
@@ -341,7 +340,7 @@ class Morpheus::Cli::BlueprintsCommand
341
340
  end
342
341
 
343
342
  def update_permissions(args)
344
- params, payload, options = {}, {}, {}
343
+ payload, options = {}, {}
345
344
  group_access_all = nil
346
345
  group_access_list = nil
347
346
  group_defaults_list = nil
@@ -453,7 +452,6 @@ class Morpheus::Cli::BlueprintsCommand
453
452
 
454
453
 
455
454
  def upload_image(args)
456
- image_type_name = nil
457
455
  options = {}
458
456
  optparse = Morpheus::Cli::OptionParser.new do |opts|
459
457
  opts.banner = subcommand_usage("[blueprint] [file]")
@@ -889,7 +887,7 @@ class Morpheus::Cli::BlueprintsCommand
889
887
  end
890
888
 
891
889
  def remove_instance_config(args)
892
- instance_index = nil
890
+ #instance_index = nil
893
891
  options = {}
894
892
  optparse = Morpheus::Cli::OptionParser.new do |opts|
895
893
  opts.banner = subcommand_usage("[blueprint] [tier] [instance] -g GROUP -c CLOUD")
@@ -1081,7 +1079,7 @@ class Morpheus::Cli::BlueprintsCommand
1081
1079
  end
1082
1080
 
1083
1081
  def remove_instance(args)
1084
- instance_index = nil
1082
+ #instance_index = nil
1085
1083
  options = {}
1086
1084
  optparse = Morpheus::Cli::OptionParser.new do |opts|
1087
1085
  opts.banner = subcommand_usage("[blueprint] [tier] [instance]")
@@ -1402,7 +1400,6 @@ class Morpheus::Cli::BlueprintsCommand
1402
1400
  new_tier_name = v_prompt['name']
1403
1401
  end
1404
1402
  if new_tier_name && new_tier_name != tier_name
1405
- old_tier_name = tier_name
1406
1403
  if tiers[new_tier_name]
1407
1404
  print_red_alert "A tier named #{tier_name} already exists."
1408
1405
  return 1
@@ -1415,7 +1412,6 @@ class Morpheus::Cli::BlueprintsCommand
1415
1412
  v['linkedTiers'] = v['linkedTiers'].map {|it| it == tier_name ? new_tier_name : it }
1416
1413
  end
1417
1414
  end
1418
- # old_tier_name = tier_name
1419
1415
  tier_name = new_tier_name
1420
1416
  end
1421
1417
 
@@ -1577,15 +1573,9 @@ class Morpheus::Cli::BlueprintsCommand
1577
1573
  tiers = blueprint["config"]["tiers"]
1578
1574
 
1579
1575
  if !tiers || tiers.keys.size == 0
1580
- error_msg = "Blueprint #{blueprint['name']} has no tiers."
1581
- # print_red_alert "Blueprint #{blueprint['name']} has no tiers."
1582
- # raise_command_error "Blueprint #{blueprint['name']} has no tiers."
1583
- print_error Morpheus::Terminal.angry_prompt
1584
- puts_error "Blueprint #{blueprint['name']} has no tiers."
1585
- return 1
1576
+ raise_command_error "Blueprint #{blueprint['name']} has no tiers."
1586
1577
  end
1587
1578
 
1588
- connect_tiers = []
1589
1579
  tier1 = tiers[tier1_name]
1590
1580
  tier2 = tiers[tier2_name]
1591
1581
  # uhh support N args
@@ -1682,7 +1672,6 @@ class Morpheus::Cli::BlueprintsCommand
1682
1672
  return 1
1683
1673
  end
1684
1674
 
1685
- connect_tiers = []
1686
1675
  tier1 = tiers[tier1_name]
1687
1676
  tier2 = tiers[tier2_name]
1688
1677
  # uhh support N args
@@ -1859,7 +1848,7 @@ class Morpheus::Cli::BlueprintsCommand
1859
1848
  @available_blueprint_types = results['types'].collect {|it|
1860
1849
  {"name" => (it["name"] || it["code"]), "value" => (it["code"] || it["value"])}
1861
1850
  }
1862
- rescue RestClient::Exception => e
1851
+ rescue RestClient::Exception
1863
1852
  # older version
1864
1853
  @available_blueprint_types = [{"name" => "Morpheus", "value" => "morpheus"}, {"name" => "Terraform", "value" => "terraform"}, {"name" => "CloudFormation", "value" => "cloudFormation"}, {"name" => "ARM template", "value" => "arm"}]
1865
1854
  end
@@ -1935,7 +1924,7 @@ class Morpheus::Cli::BlueprintsCommand
1935
1924
  table_color = opts[:color] || cyan
1936
1925
  rows = blueprints.collect do |blueprint|
1937
1926
  #instance_type_names = (blueprint['instanceTypes'] || []).collect {|it| it['name'] }.join(', ')
1938
- instance_type_names = []
1927
+ #instance_type_names = []
1939
1928
  # if blueprint['config'] && blueprint['config']["tiers"]
1940
1929
  # blueprint['config']["tiers"]
1941
1930
  # end
@@ -2086,7 +2075,7 @@ class Morpheus::Cli::BlueprintsCommand
2086
2075
  end
2087
2076
  sorted_tiers = tiers.collect {|k,v| [k,v] }.sort {|a,b| a[1]['tierIndex'] <=> b[1]['tierIndex'] }
2088
2077
  sorted_tiers.each do |tier_obj|
2089
- tier_name = tier_obj[0]
2078
+ #tier_name = tier_obj[0]
2090
2079
  tier_config = tier_obj[1]
2091
2080
  if tier_config && tier_config['instances']
2092
2081
  tier_config['instances'].each_with_index do |instance_config, instance_index|
@@ -2145,7 +2134,7 @@ class Morpheus::Cli::BlueprintsCommand
2145
2134
  config_list.each do |config_obj|
2146
2135
  # puts " = #{config_obj[:scope].inspect}"
2147
2136
  config_scope = config_obj[:scope]
2148
- scoped_instance_config = config_obj[:config]
2137
+ #scoped_instance_config = config_obj[:config]
2149
2138
  config_description = ""
2150
2139
  config_items = []
2151
2140
  if config_scope[:environment]
@@ -2167,7 +2156,7 @@ class Morpheus::Cli::BlueprintsCommand
2167
2156
  print white," Instance has no configs, use `blueprints add-instance-config \"#{blueprint['name']}\" \"#{tier_name}\" \"#{instance_name.to_s.empty? ? instance_type_code : instance_name}\"`",reset,"\n"
2168
2157
  end
2169
2158
  rescue => err
2170
- #puts_error "Failed to parse instance scoped instance configs for blueprint #{blueprint['id']} #{blueprint['name']} Exception: #{err.class} #{err.message}"
2159
+ Morpheus::Logging::DarkPrinter.puts "Failed to parse instance config at index #{instance_index}. Exception: #{err.class} #{err.message}" if Morpheus::Logging.debug?
2171
2160
  end
2172
2161
  print "\n"
2173
2162
  #puts as_yaml(instance_config)
@@ -173,7 +173,7 @@ class Morpheus::Cli::BootScriptsCommand
173
173
  params = Morpheus::Cli::OptionTypes.prompt(my_options, options[:options], @api_client, options[:params])
174
174
  script_file = params.delete('file')
175
175
  if script_file
176
- if !File.exists?(script_file)
176
+ if !File.exist?(script_file)
177
177
  print_red_alert "File not found: #{script_file}"
178
178
  return 1
179
179
  end
@@ -244,7 +244,7 @@ class Morpheus::Cli::BootScriptsCommand
244
244
  # params = Morpheus::Cli::OptionTypes.prompt(my_options, options[:options], @api_client, options[:params])
245
245
  script_file = params.delete('file')
246
246
  if script_file
247
- if !File.exists?(script_file)
247
+ if !File.exist?(script_file)
248
248
  print_red_alert "File not found: #{script_file}"
249
249
  return 1
250
250
  end
@@ -25,7 +25,7 @@ class Morpheus::Cli::CatCommand
25
25
  arg_files = args
26
26
  arg_files.each do |arg_file|
27
27
  arg_file = File.expand_path(arg_file)
28
- if !File.exists?(arg_file)
28
+ if !File.exist?(arg_file)
29
29
  print_error Morpheus::Terminal.angry_prompt
30
30
  puts_error "#{command_name}: file not found: '#{arg_file}'"
31
31
  #print_red_alert "morpheus cat: file not found: '#{arg_file}'"
@@ -248,7 +248,7 @@ EOT
248
248
  logo_file = 'null' # clear it
249
249
  else
250
250
  filename = File.expand_path(filename)
251
- if !File.exists?(filename)
251
+ if !File.exist?(filename)
252
252
  raise_command_error "File not found: #{filename}"
253
253
  end
254
254
  logo_file = File.new(filename, 'rb')
@@ -261,7 +261,7 @@ EOT
261
261
  dark_logo_file = 'null' # clear it
262
262
  else
263
263
  filename = File.expand_path(filename)
264
- if !File.exists?(filename)
264
+ if !File.exist?(filename)
265
265
  raise_command_error "File not found: #{filename}"
266
266
  end
267
267
  dark_logo_file = File.new(filename, 'rb')
@@ -271,7 +271,7 @@ EOT
271
271
  options[:config_file] = val.to_s
272
272
  file_content = nil
273
273
  full_filename = File.expand_path(options[:config_file])
274
- if File.exists?(full_filename)
274
+ if File.exist?(full_filename)
275
275
  file_content = File.read(full_filename)
276
276
  else
277
277
  print_red_alert "File not found: #{full_filename}"
@@ -281,7 +281,7 @@ EOT
281
281
  config_map = parse_result[:data]
282
282
  if config_map.nil?
283
283
  # todo: bubble up JSON.parse error message
284
- raise_command_error "Failed to parse config as YAML or JSON. Error: #{parse_result[:err]}"
284
+ raise_command_error "Failed to parse config as YAML or JSON. Error: #{parse_result[:error]}"
285
285
  #raise_command_error "Failed to parse config as valid YAML or JSON."
286
286
  else
287
287
  params['config'] = config_map
@@ -345,7 +345,7 @@ EOT
345
345
  config_map = parse_result[:data]
346
346
  if config_map.nil?
347
347
  # todo: bubble up JSON.parse error message
348
- raise_command_error "Failed to parse config as YAML or JSON. Error: #{parse_result[:err]}"
348
+ raise_command_error "Failed to parse config as YAML or JSON. Error: #{parse_result[:error]}"
349
349
  #raise_command_error "Failed to parse config as valid YAML or JSON."
350
350
  else
351
351
  params['config'] = config_map
@@ -405,7 +405,7 @@ EOT
405
405
  logo_file = 'null' # clear it
406
406
  else
407
407
  filename = File.expand_path(filename)
408
- if !File.exists?(filename)
408
+ if !File.exist?(filename)
409
409
  raise_command_error "File not found: #{filename}"
410
410
  end
411
411
  logo_file = File.new(filename, 'rb')
@@ -418,7 +418,7 @@ EOT
418
418
  dark_logo_file = 'null' # clear it
419
419
  else
420
420
  filename = File.expand_path(filename)
421
- if !File.exists?(filename)
421
+ if !File.exist?(filename)
422
422
  raise_command_error "File not found: #{filename}"
423
423
  end
424
424
  dark_logo_file = File.new(filename, 'rb')
@@ -428,7 +428,7 @@ EOT
428
428
  options[:config_file] = val.to_s
429
429
  file_content = nil
430
430
  full_filename = File.expand_path(options[:config_file])
431
- if File.exists?(full_filename)
431
+ if File.exist?(full_filename)
432
432
  file_content = File.read(full_filename)
433
433
  else
434
434
  print_red_alert "File not found: #{full_filename}"
@@ -438,7 +438,7 @@ EOT
438
438
  config_map = parse_result[:data]
439
439
  if config_map.nil?
440
440
  # todo: bubble up JSON.parse error message
441
- raise_command_error "Failed to parse config as YAML or JSON. Error: #{parse_result[:err]}"
441
+ raise_command_error "Failed to parse config as YAML or JSON. Error: #{parse_result[:error]}"
442
442
  #raise_command_error "Failed to parse config as valid YAML or JSON."
443
443
  else
444
444
  params['config'] = config_map
@@ -495,7 +495,7 @@ EOT
495
495
  config_map = parse_result[:data]
496
496
  if config_map.nil?
497
497
  # todo: bubble up JSON.parse error message
498
- raise_command_error "Failed to parse config as YAML or JSON. Error: #{parse_result[:err]}"
498
+ raise_command_error "Failed to parse config as YAML or JSON. Error: #{parse_result[:error]}"
499
499
  #raise_command_error "Failed to parse config as valid YAML or JSON."
500
500
  else
501
501
  params['config'] = config_map
@@ -564,7 +564,7 @@ EOT
564
564
  logo_file = 'null' # clear it
565
565
  else
566
566
  filename = File.expand_path(filename)
567
- if !File.exists?(filename)
567
+ if !File.exist?(filename)
568
568
  raise_command_error "File not found: #{filename}"
569
569
  end
570
570
  logo_file = File.new(filename, 'rb')
@@ -603,7 +603,7 @@ EOT
603
603
  dark_logo_file = 'null' # clear it
604
604
  else
605
605
  filename = File.expand_path(filename)
606
- if !File.exists?(filename)
606
+ if !File.exist?(filename)
607
607
  raise_command_error "File not found: #{filename}"
608
608
  end
609
609
  dark_logo_file = File.new(filename, 'rb')
@@ -660,6 +660,8 @@ EOT
660
660
  "Labels" => lambda {|it| format_list(it['labels'], '', 3) },
661
661
  "Description" => 'description',
662
662
  "Type" => lambda {|it| format_catalog_type(it) },
663
+ "Visibility" => 'visibility',
664
+ "Layout Code" => 'layoutCode',
663
665
  "Blueprint" => lambda {|it| it['blueprint'] ? it['blueprint']['name'] : nil },
664
666
  "Workflow" => lambda {|it| it['workflow'] ? it['workflow']['name'] : nil },
665
667
  "Context" => lambda {|it| it['context'] },
@@ -679,6 +681,8 @@ EOT
679
681
  "Labels" => lambda {|it| format_list(it['labels']) },
680
682
  "Description" => 'description',
681
683
  "Type" => lambda {|it| format_catalog_type(it) },
684
+ "Visibility" => 'visibility',
685
+ "Layout Code" => 'layoutCode',
682
686
  "Blueprint" => lambda {|it| it['blueprint'] ? it['blueprint']['name'] : nil },
683
687
  "Workflow" => lambda {|it| it['workflow'] ? it['workflow']['name'] : nil },
684
688
  "Context" => lambda {|it| it['context'] },
@@ -725,7 +729,8 @@ EOT
725
729
  {'fieldName' => 'enabled', 'fieldLabel' => 'Enabled', 'type' => 'checkbox', 'defaultValue' => true, 'displayOrder' => 4},
726
730
  {'fieldName' => 'featured', 'fieldLabel' => 'Featured', 'type' => 'checkbox', 'defaultValue' => false, 'displayOrder' => 5},
727
731
  {'fieldName' => 'visibility', 'fieldLabel' => 'Visibility', 'type' => 'select', 'selectOptions' => [{'name' => 'Private', 'value' => 'private'}, {'name' => 'Public', 'value' => 'public'}], 'defaultValue' => 'private', 'required' => true, 'displayOrder' => 6},
728
- {'fieldName' => 'iconPath', 'fieldLabel' => 'Logo', 'type' => 'select', 'optionSource' => 'iconList', 'displayOrder' => 7},
732
+ {'fieldName' => 'layoutCode', 'fieldLabel' => 'Layout Code', 'type' => 'text', 'required' => false, 'displayOrder' => 7},
733
+ {'fieldName' => 'iconPath', 'fieldLabel' => 'Logo', 'type' => 'select', 'optionSource' => 'iconList', 'displayOrder' => 8},
729
734
  #{'fieldName' => 'optionTypes', 'fieldLabel' => 'Option Types', 'type' => 'text', 'description' => 'Option Types to include, comma separated list of names or IDs.', 'displayOrder' => 8},
730
735
  {'dependsOnCode' => 'catalogItemType.type:instance', 'fieldName' => 'config', 'fieldLabel' => 'Config', 'type' => 'code-editor', 'description' => 'JSON or YAML', 'required' => true, 'displayOrder' => 9},
731
736
  {'dependsOnCode' => 'catalogItemType.type:blueprint', 'fieldName' => 'blueprint', 'fieldLabel' => 'Blueprint', 'type' => 'select', 'optionSource' => 'blueprints', 'description' => 'Choose a blueprint to apply to the catalog item.', 'required' => true, 'noParams' => true, 'displayOrder' => 10},
@@ -891,7 +891,7 @@ class Morpheus::Cli::Clouds
891
891
  build_option_type_options(opts, options, update_wiki_page_option_types)
892
892
  opts.on('--file FILE', "File containing the wiki content. This can be used instead of --content") do |filename|
893
893
  full_filename = File.expand_path(filename)
894
- if File.exists?(full_filename)
894
+ if File.exist?(full_filename)
895
895
  params['content'] = File.read(full_filename)
896
896
  else
897
897
  print_red_alert "File not found: #{full_filename}"
@@ -987,7 +987,7 @@ EOT
987
987
  logo_file = 'null' # clear it
988
988
  else
989
989
  filename = File.expand_path(filename)
990
- if !File.exists?(filename)
990
+ if !File.exist?(filename)
991
991
  print_red_alert "File not found: #{filename}"
992
992
  exit 1
993
993
  end
@@ -1037,7 +1037,7 @@ EOT
1037
1037
  dark_logo_file = 'null' # clear it
1038
1038
  else
1039
1039
  filename = File.expand_path(filename)
1040
- if !File.exists?(filename)
1040
+ if !File.exist?(filename)
1041
1041
  print_red_alert "File not found: #{filename}"
1042
1042
  exit 1
1043
1043
  end