morpheus-cli 5.5.3.1 → 5.5.3.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1a66b8b7fa9512d6f649a5c369b2a5da24efe9e551b48cce4fe551bc68f9f842
4
- data.tar.gz: 285fb4339cbf1c2ea71539d1bff2e8bed75ec6be097cffdaeda751ed49b59b6b
3
+ metadata.gz: 4f25e2109b97f86a74285c68d93483095a810007259c98248f3764f047763826
4
+ data.tar.gz: 703c64d291cebb65e2457c38f43c2fb304881db0cf334c6b86cc3317afd2c543
5
5
  SHA512:
6
- metadata.gz: 7fc26b54a4a2d2dfb83429e769acbc730a1f61ff1023468e49b17e056fdfc510d7f5cbb642d07cc76d26e46b1aa8cc7b631e8f658fe7f133c5c7c67301d026e6
7
- data.tar.gz: c52f8eb39797f15a3ab811ff9f42557f879d9ef13269c633cee2f99cfce9ec2b51ab9f67ce8998ad68416b3cd94d5b5c44a642ea71167aeb93640e2baed65d82
6
+ metadata.gz: 5e1ca2c4b984cf3b4f27cd3f8348b8ce7155fac65be974962a4a3d543bc6ab35efca1e6e938f6c39617e71dab1d510d87a785a4952eb6c113bbc03a9d6d77173
7
+ data.tar.gz: 7e00d09edce06f1d099228770835254fde5110f38e4f033529acda0c060f433e55babc72eda319bc79035e5080110ae24b6c4f4eb6600049a99c64aa3699d988
data/Dockerfile CHANGED
@@ -1,5 +1,5 @@
1
1
  FROM ruby:2.7.5
2
2
 
3
- RUN gem install morpheus-cli -v 5.5.3.1
3
+ RUN gem install morpheus-cli -v 5.5.3.2
4
4
 
5
5
  ENTRYPOINT ["morpheus"]
@@ -661,7 +661,8 @@ EOT
661
661
  it
662
662
  }
663
663
  if catalog_option_types && !catalog_option_types.empty?
664
- config_prompt = Morpheus::Cli::OptionTypes.prompt(catalog_option_types, options[:options], @api_client, {})['config']
664
+ api_params = construct_catalog_api_params(catalog_item_type)
665
+ config_prompt = Morpheus::Cli::OptionTypes.prompt(catalog_option_types, options[:options], @api_client, api_params, options[:no_prompt], false, false, true)['config']
665
666
  payload[add_item_object_key].deep_merge!({'config' => config_prompt})
666
667
  end
667
668
  if workflow_context
@@ -999,11 +1000,13 @@ EOT
999
1000
  catalog_option_types = catalog_item_type['optionTypes']
1000
1001
  # instead of config.customOptions just use config...
1001
1002
  catalog_option_types = catalog_option_types.collect {|it|
1003
+ it['fieldContext'] = nil
1002
1004
  it['fieldContext'] = 'config'
1003
1005
  it
1004
1006
  }
1005
1007
  if catalog_option_types && !catalog_option_types.empty?
1006
- config_prompt = Morpheus::Cli::OptionTypes.prompt(catalog_option_types, options[:options], @api_client, {})['config']
1008
+ api_params = construct_catalog_api_params(catalog_item_type)
1009
+ config_prompt = Morpheus::Cli::OptionTypes.prompt(catalog_option_types, options[:options], @api_client, api_params, options[:no_prompt], false, false, true)['config']
1007
1010
  item_payload.deep_merge!({'config' => config_prompt})
1008
1011
  end
1009
1012
 
@@ -1471,4 +1474,35 @@ EOT
1471
1474
  out + return_color
1472
1475
  end
1473
1476
 
1477
+
1478
+ def construct_catalog_api_params(record)
1479
+ catalog_item_type_id = record['id'].to_i
1480
+ api_params = {}
1481
+ api_params['catalogItemType'] ||= {}
1482
+ api_params['catalogItemType']['id'] = catalog_item_type_id
1483
+ # Determine instance.type value
1484
+ # the UI is injecting this parameter into the option source requests
1485
+ # it is needed to populate api option lists eg. optionTypeClouds
1486
+ # this should be fixed on the api side, so it automatically extracts this input from the config
1487
+ begin
1488
+ instance_type_code = nil
1489
+ catalog_item_type = find_by_id(:catalog_item_type, catalog_item_type_id.to_i)
1490
+ if catalog_item_type
1491
+ if catalog_item_type['type'] == 'instance'
1492
+ if catalog_item_type['config'] && catalog_item_type['config']['type']
1493
+ instance_type_code = catalog_item_type['config']['type']
1494
+ end
1495
+ end
1496
+ end
1497
+ if instance_type_code
1498
+ api_params['instance'] ||= {}
1499
+ api_params['instance']['type'] = instance_type_code
1500
+ end
1501
+ rescue ::RestClient::Exception => e
1502
+ # users may not have permission to this endpoint
1503
+ # puts "Failed to load catalog item type"
1504
+ end
1505
+ return api_params
1506
+ end
1507
+
1474
1508
  end
@@ -123,7 +123,8 @@ module Morpheus
123
123
  end
124
124
  if password.empty?
125
125
  # readline is still echoing secret with 'NUL:'' so just use $stdin on windows for now
126
- if Morpheus::Cli.windows?
126
+ # and some other environments? just use noecho unless running unit tests
127
+ if Morpheus::Cli.windows? || !Morpheus::Cli.testing?
127
128
  print "Password: #{required_blue_prompt} "
128
129
  # this should be my_terminal.stdin instead of STDIN and $stdin
129
130
  password = $stdin.noecho(&:gets).chomp!
@@ -55,7 +55,7 @@ module Morpheus
55
55
  end
56
56
  end
57
57
 
58
- def self.prompt(option_types, options={}, api_client=nil, api_params={}, no_prompt=false, paging_enabled=false, ignore_empty=false)
58
+ def self.prompt(option_types, options={}, api_client=nil, api_params={}, no_prompt=false, paging_enabled=false, ignore_empty=false, skip_sort = false)
59
59
  paging_enabled = false if Morpheus::Cli.windows?
60
60
  no_prompt = no_prompt || options[:no_prompt]
61
61
  results = {}
@@ -89,12 +89,18 @@ module Morpheus
89
89
  # puts "Options Prompt #{options}"
90
90
  # Sort options by default, group, advanced
91
91
  # add displayOrder if it's missing, so it doesn't end up using a random order
92
- if !option_types.find {|it| it['displayOrder'] }
93
- option_types.each_with_index {|it, i| it['displayOrder'] = i+1 }
94
- end
92
+ # if !option_types.find {|it| it['displayOrder'] && it['displayOrder'] != 0 }
93
+ # option_types.each_with_index {|it, i| it['displayOrder'] = i+1 }
94
+ # end
95
95
  cur_field_group = 'default'
96
96
  prompt_local_credentials = true
97
- self.sort_option_types(option_types.reject {|it| it[:for_help_only]}).each do |option_type|
97
+ # reject help only options..
98
+ option_types.reject! {|it| it[:for_help_only]}
99
+ # sort options
100
+ if !skip_sort
101
+ option_types = self.sort_option_types(option_types)
102
+ end
103
+ option_types.each do |option_type|
98
104
  next if option_type['localCredential'] && !prompt_local_credentials
99
105
  context_map = results
100
106
  value = nil
@@ -998,8 +1004,9 @@ module Morpheus
998
1004
  def self.password_prompt(option_type)
999
1005
  value_found = false
1000
1006
  while !value_found do
1001
- # readline is still echoing secret with 'NUL:'' so just use $stdin on windows for now
1002
- if Morpheus::Cli.windows?
1007
+ # readline is still echoing secret with 'NUL:'' so just use $stdin on windows
1008
+ # and some other environments? just use noecho unless running unit tests
1009
+ if Morpheus::Cli.windows? || !Morpheus::Cli.testing?
1003
1010
  print "#{option_type['fieldLabel']}#{option_type['fieldAddOn'] ? (' (' + option_type['fieldAddOn'] + ') ') : '' }#{optional_label(option_type)}#{option_type['defaultValue'] ? ' ['+'************'+']' : ''}: "
1004
1011
  input = $stdin.noecho(&:gets).chomp!
1005
1012
  else
@@ -1,6 +1,6 @@
1
1
 
2
2
  module Morpheus
3
3
  module Cli
4
- VERSION = "5.5.3.1"
4
+ VERSION = "5.5.3.2"
5
5
  end
6
6
  end
data/lib/morpheus/cli.rb CHANGED
@@ -77,6 +77,19 @@ module Morpheus
77
77
  Dir[File.dirname(__FILE__) + "/cli/commands/**/*.rb"].each {|file| load file }
78
78
  end
79
79
 
80
+ # hack needed for unit tests right now
81
+ @@testing = false unless defined?(@@testing)
82
+
83
+ # hack needed for unit tests right now
84
+ def self.enable_test_mode
85
+ @@testing = true
86
+ end
87
+
88
+ # hack needed for unit tests right now
89
+ def self.testing?
90
+ defined?(@@testing) && @@testing == true
91
+ end
92
+
80
93
  # require all CLI modules now (on require)
81
94
  load!
82
95
 
data/test/test_case.rb CHANGED
@@ -5,6 +5,9 @@ require 'morpheus'
5
5
  require 'test_config'
6
6
  #require 'securerandom'
7
7
 
8
+ # hack needed for unit tests right now
9
+ Morpheus::Cli.enable_test_mode()
10
+
8
11
  module MorpheusTest
9
12
 
10
13
  # TestCase is the base class for all unit tests to provide standard behavior
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: morpheus-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.5.3.1
4
+ version: 5.5.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Estes
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2023-01-19 00:00:00.000000000 Z
14
+ date: 2023-02-21 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: bundler