morpheus-cli 5.5.2.2 → 5.5.3.1

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.
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