puppet-debugger 0.15.2 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/.gitlab-ci.yml +21 -45
  3. data/.rubocop.yml +64 -233
  4. data/.rubocop_todo.yml +89 -147
  5. data/.ruby-version +1 -1
  6. data/.vscode/launch.json +15 -0
  7. data/CHANGELOG.md +34 -2
  8. data/Gemfile +7 -5
  9. data/README.md +29 -261
  10. data/Rakefile +11 -12
  11. data/bin/pdb +1 -1
  12. data/lib/awesome_print/ext/awesome_puppet.rb +22 -8
  13. data/lib/plugins/puppet-debugger/input_responders/benchmark.rb +5 -4
  14. data/lib/plugins/puppet-debugger/input_responders/classes.rb +14 -2
  15. data/lib/plugins/puppet-debugger/input_responders/classification.rb +4 -2
  16. data/lib/plugins/puppet-debugger/input_responders/commands.rb +18 -18
  17. data/lib/plugins/puppet-debugger/input_responders/datatypes.rb +22 -6
  18. data/lib/plugins/puppet-debugger/input_responders/environment.rb +4 -2
  19. data/lib/plugins/puppet-debugger/input_responders/exit.rb +4 -2
  20. data/lib/plugins/puppet-debugger/input_responders/facterdb_filter.rb +4 -2
  21. data/lib/plugins/puppet-debugger/input_responders/facts.rb +4 -2
  22. data/lib/plugins/puppet-debugger/input_responders/functions.rb +34 -32
  23. data/lib/plugins/puppet-debugger/input_responders/help.rb +4 -2
  24. data/lib/plugins/puppet-debugger/input_responders/krt.rb +4 -2
  25. data/lib/plugins/puppet-debugger/input_responders/play.rb +22 -24
  26. data/lib/plugins/puppet-debugger/input_responders/reset.rb +5 -3
  27. data/lib/plugins/puppet-debugger/input_responders/resources.rb +16 -7
  28. data/lib/plugins/puppet-debugger/input_responders/set.rb +34 -32
  29. data/lib/plugins/puppet-debugger/input_responders/stacktrace.rb +23 -0
  30. data/lib/plugins/puppet-debugger/input_responders/types.rb +6 -2
  31. data/lib/plugins/puppet-debugger/input_responders/vars.rb +8 -7
  32. data/lib/plugins/puppet-debugger/input_responders/whereami.rb +5 -3
  33. data/lib/puppet-debugger.rb +1 -45
  34. data/lib/puppet-debugger/cli.rb +120 -92
  35. data/lib/puppet-debugger/code/code_file.rb +13 -14
  36. data/lib/puppet-debugger/code/code_range.rb +5 -3
  37. data/lib/puppet-debugger/code/loc.rb +1 -1
  38. data/lib/puppet-debugger/debugger_code.rb +2 -0
  39. data/lib/puppet-debugger/hooks.rb +15 -16
  40. data/lib/puppet-debugger/input_responder_plugin.rb +54 -52
  41. data/lib/puppet-debugger/monkey_patches.rb +57 -0
  42. data/lib/puppet-debugger/plugin_test_helper.rb +9 -8
  43. data/lib/puppet-debugger/support.rb +27 -17
  44. data/lib/puppet-debugger/support/environment.rb +10 -3
  45. data/lib/puppet-debugger/support/errors.rb +25 -27
  46. data/lib/puppet-debugger/support/facts.rb +5 -5
  47. data/lib/puppet-debugger/support/node.rb +4 -7
  48. data/lib/puppet-debugger/support/scope.rb +29 -0
  49. data/lib/puppet-debugger/trollop.rb +38 -31
  50. data/lib/puppet-debugger/version.rb +1 -1
  51. data/lib/puppet/application/debugger.rb +151 -126
  52. data/output.json +1 -0
  53. data/puppet-debugger.gemspec +17 -15
  54. data/spec/awesome_print/ext/awesome_puppet_spec.rb +30 -30
  55. data/spec/fixtures/pe-xl-core-0.puppet.vm.json +1 -0
  56. data/spec/fixtures/sample_start_debugger.pp +3 -2
  57. data/spec/hooks_spec.rb +33 -35
  58. data/spec/input_responder_plugin_spec.rb +7 -6
  59. data/spec/input_responders/benchmark_spec.rb +3 -1
  60. data/spec/input_responders/classes_spec.rb +12 -13
  61. data/spec/input_responders/classification_spec.rb +4 -2
  62. data/spec/input_responders/commands_spec.rb +2 -0
  63. data/spec/input_responders/datatypes_spec.rb +8 -2
  64. data/spec/input_responders/environment_spec.rb +2 -0
  65. data/spec/input_responders/exit_spec.rb +9 -11
  66. data/spec/input_responders/facterdb_filter_spec.rb +2 -0
  67. data/spec/input_responders/facts_spec.rb +2 -0
  68. data/spec/input_responders/functions_spec.rb +30 -28
  69. data/spec/input_responders/help_spec.rb +5 -3
  70. data/spec/input_responders/krt_spec.rb +3 -1
  71. data/spec/input_responders/play_spec.rb +10 -20
  72. data/spec/input_responders/reset_spec.rb +2 -0
  73. data/spec/input_responders/resources_spec.rb +7 -1
  74. data/spec/input_responders/set_spec.rb +3 -1
  75. data/spec/input_responders/stacktrace_spec.rb +15 -0
  76. data/spec/input_responders/types_spec.rb +2 -0
  77. data/spec/input_responders/vars_spec.rb +4 -4
  78. data/spec/input_responders/whereami_spec.rb +2 -0
  79. data/spec/pdb_spec.rb +0 -9
  80. data/spec/puppet/application/debugger_spec.rb +35 -17
  81. data/spec/puppet_debugger_spec.rb +81 -83
  82. data/spec/remote_node_spec.rb +1 -5
  83. data/spec/spec_helper.rb +22 -18
  84. data/spec/support_spec.rb +3 -5
  85. data/test_matrix.rb +1 -1
  86. metadata +53 -19
@@ -1,68 +1,70 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'singleton'
2
4
  require 'puppet-debugger/support/errors'
3
5
  require 'forwardable'
4
6
 
5
7
  module PuppetDebugger
6
- class InputResponderPlugin
7
- include Singleton
8
- extend Forwardable
9
- attr_accessor :debugger
10
- def_delegators :debugger, :scope, :node, :environment, :loaders, :puppet_environment,
11
- :add_hook, :handle_input, :delete_hook, :puppet_lib_dir
12
- def_delegators :scope, :compiler, :catalog
13
- def_delegators :node, :facts
8
+ class InputResponderPlugin
9
+ include Singleton
10
+ extend Forwardable
11
+ attr_accessor :debugger
12
+ def_delegators :debugger, :scope, :node, :environment, :loaders, :puppet_environment,
13
+ :add_hook, :handle_input, :delete_hook, :puppet_lib_dir
14
+ def_delegators :scope, :compiler, :catalog
15
+ def_delegators :node, :facts
14
16
 
15
- # @return [Array[String]] an array of words the user can call the command with
16
- def self.command_words
17
- self::COMMAND_WORDS
18
- end
17
+ # @return [Array[String]] an array of words the user can call the command with
18
+ def self.command_words
19
+ self::COMMAND_WORDS
20
+ end
19
21
 
20
- def modules_paths
21
- debugger.puppet_environment.full_modulepath
22
- end
22
+ def modules_paths
23
+ debugger.puppet_environment.full_modulepath
24
+ end
23
25
 
24
- # @return [String] a summary of the plugin
25
- def self.summary
26
- self::SUMMARY
27
- end
26
+ # @return [String] a summary of the plugin
27
+ def self.summary
28
+ self::SUMMARY
29
+ end
28
30
 
29
- # @return [String] the name of the command group the plugin is in
30
- def self.command_group
31
- self::COMMAND_GROUP
32
- end
31
+ # @return [String] the name of the command group the plugin is in
32
+ def self.command_group
33
+ self::COMMAND_GROUP
34
+ end
33
35
 
34
- # @return [Hash] a has of all the details of the plugin
35
- def self.details
36
- { words: command_words, summary: summary, group: command_group }
37
- end
36
+ # @return [Hash] a has of all the details of the plugin
37
+ def self.details
38
+ { words: command_words, summary: summary, group: command_group }
39
+ end
38
40
 
39
- # @param buffer_words [Array[String]] a array of words the user has typed in
40
- # @return Array[String] - an array of words that will help the user with word completion
41
- # By default this returns an empty array, your plugin can chose to override this method in order to
42
- # provide the user with a list of key words based on the user's input
43
- def self.command_completion(buffer_words)
44
- []
45
- end
41
+ # @param buffer_words [Array[String]] a array of words the user has typed in
42
+ # @return Array[String] - an array of words that will help the user with word completion
43
+ # By default this returns an empty array, your plugin can chose to override this method in order to
44
+ # provide the user with a list of key words based on the user's input
45
+ def self.command_completion(_buffer_words)
46
+ []
47
+ end
46
48
 
47
- # @param args [Array[String]] - an array of arguments to pass to the plugin command
48
- # @param debugger PuppetDebugger::Cli - an instance of the PuppetDebugger::Cli object
49
- # @return the output of the plugin command
50
- def self.execute(args = [], debugger)
51
- instance.debugger = debugger
52
- instance.run(args)
53
- end
49
+ # @param args [Array[String]] - an array of arguments to pass to the plugin command
50
+ # @param debugger PuppetDebugger::Cli - an instance of the PuppetDebugger::Cli object
51
+ # @return the output of the plugin command
52
+ def self.execute(args = [], debugger)
53
+ instance.debugger = debugger
54
+ instance.run(args)
55
+ end
54
56
 
55
- # @param args [Array[String]] - an array of arguments to pass to the plugin command
56
- # @return the output of the plugin command
57
- def run(args = [])
58
- raise NotImplementedError
59
- end
57
+ # @param args [Array[String]] - an array of arguments to pass to the plugin command
58
+ # @return the output of the plugin command
59
+ def run(args = [])
60
+ raise NotImplementedError
61
+ end
60
62
 
61
- # this is the lib directory of this gem
62
- # in order to load any puppet functions from this gem we need to add the lib path
63
- # of this gem
64
- def puppet_debugger_lib_dir
65
- File.expand_path(File.join(File.dirname(File.dirname(File.dirname(__FILE__))), 'lib'))
66
- end
63
+ # this is the lib directory of this gem
64
+ # in order to load any puppet functions from this gem we need to add the lib path
65
+ # of this gem
66
+ def puppet_debugger_lib_dir
67
+ File.expand_path(File.join(File.dirname(File.dirname(File.dirname(__FILE__))), 'lib'))
67
68
  end
69
+ end
68
70
  end
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ # monkey patch in some color effects string methods
4
+ class String
5
+ def red
6
+ "\033[31m#{self}\033[0m"
7
+ end
8
+
9
+ def bold
10
+ "\033[1m#{self}\033[22m"
11
+ end
12
+
13
+ def black
14
+ "\033[30m#{self}\033[0m"
15
+ end
16
+
17
+ def green
18
+ "\033[32m#{self}\033[0m"
19
+ end
20
+
21
+ def cyan
22
+ "\033[36m#{self}\033[0m"
23
+ end
24
+
25
+ def yellow
26
+ "\033[33m#{self}\033[0m"
27
+ end
28
+
29
+ def warning
30
+ yellow
31
+ end
32
+
33
+ def fatal
34
+ red
35
+ end
36
+
37
+ def info
38
+ green
39
+ end
40
+
41
+ def camel_case
42
+ return self if self !~ /_/ && self =~ /[A-Z]+.*/
43
+
44
+ split('_').map(&:capitalize).join
45
+ end
46
+ end
47
+
48
+ # Bolt plans utilize the PAL Script Compiler to compile the code and thus
49
+ # don't store a catalog with the scope. This is due to not needing the catalog
50
+ # in the scope. The debugger relies on the catalog being present in the scope
51
+ # and thus uses all the methods to discover various data in the catalog
52
+ # We monkey patch in a catalog here instead of changing our API for simplicity.
53
+ class Puppet::Parser::ScriptCompiler
54
+ def catalog
55
+ @catalog ||= Puppet::Resource::Catalog.new(@node_name, @environment, 'bolt')
56
+ end
57
+ end
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # https://relishapp.com/rspec/rspec-core/v/3-6/docs/example-groups/shared-examples
2
- RSpec.shared_examples "plugin_tests" do |parameter|
4
+ RSpec.shared_examples 'plugin_tests' do |_parameter|
3
5
  let(:plugin) do
4
6
  instance = PuppetDebugger::InputResponders::Commands.plugin_from_command(subject.to_s).instance
5
7
  instance.debugger = debugger
@@ -18,20 +20,20 @@ RSpec.shared_examples "plugin_tests" do |parameter|
18
20
  {}
19
21
  end
20
22
 
21
- it "commands contant is an array" do
23
+ it 'commands contant is an array' do
22
24
  expect(plugin.class::COMMAND_WORDS).to be_a(Array)
23
25
  end
24
26
 
25
- it "commands must contain at least one word" do
26
- expect(plugin.class::COMMAND_WORDS.count).to be > 0
27
+ it 'commands must contain at least one word' do
28
+ expect(plugin.class::COMMAND_WORDS.count).to be > 0
27
29
  end
28
30
 
29
- it "summary must be a string" do
31
+ it 'summary must be a string' do
30
32
  expect(plugin.class::SUMMARY).to be_a(String)
31
33
  end
32
34
 
33
35
  it 'implements run' do
34
- expect{plugin.run([])}.not_to raise_error(NotImplementedError)
36
+ expect { plugin.run([]) }.not_to raise_error
35
37
  end
36
38
 
37
39
  it 'be looked up via any command words' do
@@ -40,5 +42,4 @@ RSpec.shared_examples "plugin_tests" do |parameter|
40
42
  expect(actual).to eq(plugin.class)
41
43
  end
42
44
  end
43
-
44
- end
45
+ end
@@ -83,14 +83,14 @@ module PuppetDebugger
83
83
  nodes: scope.environment.known_resource_types.nodes.keys
84
84
  }
85
85
  if sites = scope.environment.known_resource_types.instance_variable_get(:@sites)
86
- res[:sites] = scope.environment.known_resource_types.instance_variable_get(:@sites).first
86
+ res[:sites] = sites
87
87
  end
88
- if scope.environment.known_resource_types.respond_to?(:applications)
89
- res[:applications] = scope.environment.known_resource_types.applications.keys
88
+ if apps = scope.environment.known_resource_types.respond_to?(:applications)
89
+ res[:applications] = apps
90
90
  end
91
91
  # some versions of puppet do not support capabilities
92
- if scope.environment.known_resource_types.respond_to?(:capability_mappings)
93
- res[:capability_mappings] = scope.environment.known_resource_types.capability_mappings.keys
92
+ if maps = scope.environment.known_resource_types.respond_to?(:capability_mappings)
93
+ res[:capability_mappings] = maps
94
94
  end
95
95
  res
96
96
  end
@@ -100,8 +100,8 @@ module PuppetDebugger
100
100
  Puppet.initialize_settings
101
101
  Puppet[:parser] = 'future' # this is required in order to work with puppet 3.8
102
102
  Puppet[:trusted_node_data] = true
103
- rescue ArgumentError => e
104
- rescue Puppet::DevError => e
103
+ rescue ArgumentError
104
+ rescue Puppet::DevError
105
105
  # do nothing otherwise calling init twice raises an error
106
106
  end
107
107
 
@@ -131,31 +131,41 @@ module PuppetDebugger
131
131
  ::Puppet::Parser::AST::Hostclass.new('', code: ast_code)
132
132
  end
133
133
 
134
+ # @return [String] the path to the manifest file
135
+ # @param input [String] the manfiest content
136
+ # @summary creates a manifest file unless one already exist
137
+ def manifest_file(input)
138
+ file = Tempfile.new(['puppet_debugger_input', '.pp'])
139
+ File.open(file, 'w') do |f|
140
+ f.write(input)
141
+ end
142
+ file
143
+ end
144
+
134
145
  # @param String - any valid puppet language code
135
146
  # @return Object - returns either a string of the result or object from puppet evaulation
136
- def puppet_eval(input)
147
+ def puppet_eval(input, file: nil)
137
148
  # in order to add functions to the scope the loaders must be created
138
149
  # in order to call native functions we need to set the global_scope
139
- ast = generate_ast(input)
140
150
  # record the input for puppet to retrieve and reference later
141
- file = Tempfile.new(['puppet_debugger_input', '.pp'])
142
- File.open(file, 'w') do |f|
143
- f.write(input)
144
- end
145
- Puppet.override({ current_environment: puppet_environment, code: input,
151
+ manifest_file = file || manifest_file(input)
152
+ manfifest_content = input || File.read(manifest_file)
153
+ ast = generate_ast(manfifest_content)
154
+
155
+ Puppet.override({ current_environment: puppet_environment, manifest: manifest_file,
146
156
  global_scope: scope, loaders: scope.compiler.loaders }, 'For puppet-debugger') do
147
- # because the repl is not a module we leave the modname blank
157
+ # because the debugger is not a module we leave the modname blank
148
158
  scope.environment.known_resource_types.import_ast(ast, '')
149
159
 
150
160
  exec_hook :before_eval, '', self, self
151
161
  if bench
152
162
  result = nil
153
163
  time = Benchmark.realtime do
154
- result = parser.evaluate_string(scope, input, File.expand_path(file))
164
+ result = parser.evaluate_string(scope, manfifest_content, File.expand_path(manifest_file))
155
165
  end
156
166
  out = [result, "Time elapsed #{(time * 1000).round(2)} ms"]
157
167
  else
158
- out = parser.evaluate_string(scope, input, File.expand_path(file))
168
+ out = parser.evaluate_string(scope, manfifest_content, File.expand_path(manifest_file))
159
169
  end
160
170
  exec_hook :after_eval, out, self, self
161
171
  out
@@ -8,7 +8,7 @@ module PuppetDebugger
8
8
  def puppet_environment
9
9
  @puppet_environment ||= create_environment
10
10
  end
11
- alias :environment :puppet_environment
11
+ alias environment puppet_environment
12
12
 
13
13
  # returns an array of module directories, generally this is the only place
14
14
  # to look for puppet code by default. This is read from the puppet configuration
@@ -17,7 +17,14 @@ module PuppetDebugger
17
17
  # add the puppet-debugger directory so we can load any defined functions
18
18
  dirs << File.join(Puppet[:environmentpath], default_puppet_env_name, 'modules') unless Puppet[:environmentpath].empty?
19
19
  dirs << Puppet.settings[:basemodulepath].split(File::PATH_SEPARATOR)
20
- dirs.flatten
20
+ dirs << Puppet.settings[:vendormoduledir].split(File::PATH_SEPARATOR) if Puppet.settings[:vendormoduledir]
21
+ dirs << bolt_modules
22
+ dirs.flatten.compact.uniq
23
+ end
24
+
25
+ def bolt_modules
26
+ spec = Gem::Specification.latest_specs.find { |s| s.name.eql?('bolt') }
27
+ File.join(spec.full_gem_path, 'bolt-modules') if spec
21
28
  end
22
29
 
23
30
  # returns all the modules paths defined in the environment
@@ -60,7 +67,7 @@ module PuppetDebugger
60
67
 
61
68
  # currently this is not being used
62
69
  def environment_loaders
63
- name = compiler.loaders.public_environment_loader.loader_name
70
+ compiler.loaders.public_environment_loader.loader_name
64
71
  end
65
72
  end
66
73
  end
@@ -9,8 +9,6 @@ module PuppetDebugger
9
9
  end
10
10
  end
11
11
 
12
-
13
-
14
12
  class FatalError < Error
15
13
  end
16
14
 
@@ -22,9 +20,9 @@ module PuppetDebugger
22
20
 
23
21
  class ConnectError < Error
24
22
  def message
25
- out = <<-EOF
26
- #{data[:message]}
27
- EOF
23
+ <<~OUT
24
+ #{data[:message]}
25
+ OUT
28
26
  end
29
27
  end
30
28
 
@@ -36,9 +34,9 @@ EOF
36
34
 
37
35
  class UndefinedNode < FatalError
38
36
  def message
39
- out = <<-EOF
40
- Cannot find node with name: #{data[:name]} on remote server
41
- EOF
37
+ <<~OUT
38
+ Cannot find node with name: #{data[:name]} on remote server
39
+ OUT
42
40
  end
43
41
  end
44
42
 
@@ -48,36 +46,36 @@ Cannot find node with name: #{data[:name]} on remote server
48
46
 
49
47
  class NoClassError < FatalError
50
48
  def message
51
- out = <<-EOF
52
- #{data[:message]}
53
- You are missing puppet classes that are required for compilation.
54
- Please ensure these classes are installed on this machine in any of the following paths:
55
- #{data[:default_modules_paths]}
56
- EOF
49
+ <<~OUT
50
+ #{data[:message]}
51
+ You are missing puppet classes that are required for compilation.
52
+ Please ensure these classes are installed on this machine in any of the following paths:
53
+ #{data[:default_modules_paths]}
54
+ OUT
57
55
  end
58
56
  end
59
57
 
60
58
  class NodeDefinitionError < FatalError
61
59
  def message
62
- out = <<-EOF
63
- You are missing a default node definition in your site.pp that is required for compilation.
64
- Please ensure you have at least the following default node definition
65
- node default {
66
- # include classes here
67
- }
68
- in your #{data[:default_site_manifest]} file.
69
- EOF
60
+ out = <<~OUT
61
+ You are missing a default node definition in your site.pp that is required for compilation.
62
+ Please ensure you have at least the following default node definition
63
+ node default {
64
+ # include classes here
65
+ }
66
+ in your #{data[:default_site_manifest]} file.
67
+ OUT
70
68
  out.fatal
71
69
  end
72
70
  end
73
71
 
74
72
  class AuthError < FatalError
75
73
  def message
76
- out = <<-EOF
77
- #{data[:message]}
78
- You will need to edit your auth.conf or conf.d/auth.conf (puppetserver) to allow node calls.
79
- EOF
80
- end
74
+ <<~OUT
75
+ #{data[:message]}
76
+ You will need to edit your auth.conf or conf.d/auth.conf (puppetserver) to allow node calls.
77
+ OUT
78
+ end
81
79
  end
82
80
  end
83
81
  end
@@ -46,11 +46,11 @@ module PuppetDebugger
46
46
  def node_facts
47
47
  node_facts = FacterDB.get_facts(dynamic_facterdb_filter).first
48
48
  if node_facts.nil?
49
- message = <<-EOS
50
- Using filter: #{dynamic_facterdb_filter}
51
- Bad FacterDB filter, please change the filter so it returns a result set.
52
- See https://github.com/camptocamp/facterdb/#with-a-string-filter
53
- EOS
49
+ message = <<~OUT
50
+ Using filter: #{dynamic_facterdb_filter}
51
+ Bad FacterDB filter, please change the filter so it returns a result set.
52
+ See https://github.com/camptocamp/facterdb/#with-a-string-filter
53
+ OUT
54
54
  raise PuppetDebugger::Exception::BadFilter, message: message
55
55
  end
56
56
  # fix for when --show-legacy facts are not part of the facter 3 fact set
@@ -8,8 +8,6 @@ module PuppetDebugger
8
8
  # creates a node object using defaults or gets the remote node
9
9
  # object if the remote_node_name is defined
10
10
  def create_node
11
- Puppet[:trusted_server_facts] = true if Puppet.version.to_f >= 4.1 && Puppet.version.to_f < 6.0
12
-
13
11
  if remote_node_name
14
12
  # refetch
15
13
  node_obj = set_node_from_name(remote_node_name)
@@ -34,6 +32,7 @@ module PuppetDebugger
34
32
  # Collect our facts.
35
33
  facts = Puppet::Node::Facts.indirection.find(Puppet[:node_name_value])
36
34
  raise "Could not find facts for #{Puppet[:node_name_value]}" unless facts
35
+
37
36
  Puppet[:node_name_value] = facts.values[Puppet[:node_name_fact]]
38
37
  facts.name = Puppet[:node_name_value]
39
38
  end
@@ -41,6 +40,7 @@ module PuppetDebugger
41
40
  # Find our Node
42
41
  node = Puppet::Node.indirection.find(Puppet[:node_name_value])
43
42
  raise "Could not find node #{Puppet[:node_name_value]}" unless node
43
+
44
44
  # Merge in the facts.
45
45
  node.merge(facts.values) if facts
46
46
  end
@@ -93,11 +93,8 @@ module PuppetDebugger
93
93
  def set_node_from_name(name)
94
94
  out_buffer.puts "Fetching node #{name}"
95
95
  remote_node = get_remote_node(name)
96
- if remote_node && remote_node.parameters.empty?
97
- remote_node_name = nil # clear out the remote name
98
- raise PuppetDebugger::Exception::UndefinedNode, name: remote_node.name
99
- end
100
- remote_node_name = remote_node.name
96
+ raise PuppetDebugger::Exception::UndefinedNode, name: remote_node.name if remote_node&.parameters&.empty?
97
+
101
98
  node_object = convert_remote_node(remote_node)
102
99
  set_node(node_object)
103
100
  end