puppet-debugger 0.4.1 → 0.4.2
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.
- checksums.yaml +4 -4
- data/.gitlab-ci.yml +25 -2
- data/.release_me.yaml +11 -0
- data/.rubocop.yml +239 -0
- data/.rubocop_todo.yml +196 -0
- data/.ruby-version +1 -0
- data/Gemfile +5 -0
- data/Gemfile.lock +17 -1
- data/bin/pdb +1 -0
- data/lib/awesome_print/ext/awesome_puppet.rb +6 -5
- data/lib/puppet/application/debugger.rb +24 -24
- data/lib/puppet-debugger/cli.rb +76 -81
- data/lib/puppet-debugger/code/code_file.rb +82 -82
- data/lib/puppet-debugger/code/code_range.rb +56 -57
- data/lib/puppet-debugger/code/loc.rb +68 -70
- data/lib/puppet-debugger/debugger_code.rb +279 -280
- data/lib/puppet-debugger/support/compiler.rb +1 -1
- data/lib/puppet-debugger/support/environment.rb +2 -2
- data/lib/puppet-debugger/support/errors.rb +3 -4
- data/lib/puppet-debugger/support/facts.rb +7 -7
- data/lib/puppet-debugger/support/functions.rb +4 -5
- data/lib/puppet-debugger/support/input_responders.rb +26 -28
- data/lib/puppet-debugger/support/node.rb +7 -6
- data/lib/puppet-debugger/support/play.rb +16 -24
- data/lib/puppet-debugger/support/scope.rb +3 -4
- data/lib/puppet-debugger/support.rb +38 -40
- data/lib/puppet-debugger.rb +38 -17
- data/lib/version.rb +2 -1
- data/spec/facts_spec.rb +7 -6
- data/spec/pdb_spec.rb +1 -0
- data/spec/puppet/application/debugger_spec.rb +2 -3
- data/spec/{puppet-debugger_spec.rb → puppet_debugger_spec.rb} +27 -33
- data/spec/remote_node_spec.rb +13 -14
- data/spec/spec_helper.rb +8 -7
- data/spec/support_spec.rb +19 -24
- data/test_matrix.rb +4 -3
- metadata +6 -2
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module PuppetDebugger
|
2
3
|
module Support
|
3
4
|
module Environment
|
@@ -25,14 +26,13 @@ module PuppetDebugger
|
|
25
26
|
|
26
27
|
# the cached name of the environment
|
27
28
|
def default_puppet_env_name
|
28
|
-
|
29
|
+
ENV['PUPPET_ENV'] || Puppet[:environment]
|
29
30
|
end
|
30
31
|
|
31
32
|
# currently this is not being used
|
32
33
|
def environment_loaders
|
33
34
|
name = compiler.loaders.public_environment_loader.loader_name
|
34
35
|
end
|
35
|
-
|
36
36
|
end
|
37
37
|
end
|
38
38
|
end
|
@@ -1,11 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module PuppetDebugger
|
2
3
|
module Exception
|
3
4
|
class Error < StandardError
|
4
5
|
attr_accessor :data
|
5
|
-
def initialize(data={})
|
6
|
+
def initialize(data = {})
|
6
7
|
@data = data
|
7
8
|
end
|
8
|
-
|
9
9
|
end
|
10
10
|
|
11
11
|
class FatalError < Error
|
@@ -34,7 +34,7 @@ Cannot find node with name: #{data[:name]} on remote server
|
|
34
34
|
end
|
35
35
|
|
36
36
|
class TimeOutError < Error
|
37
|
-
#Errno::ETIMEDOUT
|
37
|
+
# Errno::ETIMEDOUT
|
38
38
|
end
|
39
39
|
|
40
40
|
class NoClassError < FatalError
|
@@ -70,6 +70,5 @@ You will need to edit your auth.conf or conf.d/auth.conf (puppetserver) to allow
|
|
70
70
|
EOF
|
71
71
|
end
|
72
72
|
end
|
73
|
-
|
74
73
|
end
|
75
74
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module PuppetDebugger
|
2
3
|
module Support
|
3
4
|
module Facts
|
@@ -49,16 +50,16 @@ Using filter: #{facterdb_filter}
|
|
49
50
|
Bad FacterDB filter, please change the filter so it returns a result set.
|
50
51
|
See https://github.com/camptocamp/facterdb/#with-a-string-filter
|
51
52
|
EOS
|
52
|
-
raise PuppetDebugger::Exception::BadFilter
|
53
|
+
raise PuppetDebugger::Exception::BadFilter, message: message
|
53
54
|
end
|
54
55
|
# fix for when --show-legacy facts are not part of the facter 3 fact set
|
55
|
-
node_facts[:fqdn] = node_facts[:networking].fetch('fqdn',nil) unless node_facts[:fqdn]
|
56
|
+
node_facts[:fqdn] = node_facts[:networking].fetch('fqdn', nil) unless node_facts[:fqdn]
|
56
57
|
node_facts
|
57
58
|
end
|
58
59
|
|
59
60
|
def default_facts
|
60
61
|
unless @facts
|
61
|
-
values = Hash[
|
62
|
+
values = Hash[node_facts.map { |k, v| [k.to_s, v] }]
|
62
63
|
name = values['fqdn']
|
63
64
|
@facts ||= Puppet::Node::Facts.new(name, values)
|
64
65
|
end
|
@@ -67,12 +68,11 @@ See https://github.com/camptocamp/facterdb/#with-a-string-filter
|
|
67
68
|
|
68
69
|
def server_facts
|
69
70
|
data = {}
|
70
|
-
data[
|
71
|
-
data['serverip'] = Facter.value(
|
72
|
-
data[
|
71
|
+
data['servername'] = Facter.value('fqdn') || Facter.value('networking')['fqdn']
|
72
|
+
data['serverip'] = Facter.value('ipaddress')
|
73
|
+
data['serverversion'] = Puppet.version.to_s
|
73
74
|
data
|
74
75
|
end
|
75
|
-
|
76
76
|
end
|
77
77
|
end
|
78
78
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module PuppetDebugger
|
2
3
|
module Support
|
3
4
|
module Functions
|
@@ -7,14 +8,12 @@ module PuppetDebugger
|
|
7
8
|
def function_files
|
8
9
|
search_dirs = lib_dirs.map do |lib_dir|
|
9
10
|
[File.join(lib_dir, 'puppet', 'functions', '**', '*.rb'),
|
10
|
-
|
11
|
-
File.join(lib_dir, 'puppet', 'parser', 'functions', '*.rb')
|
12
|
-
]
|
11
|
+
File.join(lib_dir, 'functions', '**', '*.rb'),
|
12
|
+
File.join(lib_dir, 'puppet', 'parser', 'functions', '*.rb')]
|
13
13
|
end
|
14
14
|
# add puppet lib directories
|
15
15
|
search_dirs << [File.join(puppet_lib_dir, 'puppet', 'functions', '**', '*.rb'),
|
16
|
-
|
17
|
-
]
|
16
|
+
File.join(puppet_lib_dir, 'puppet', 'parser', 'functions', '*.rb')]
|
18
17
|
Dir.glob(search_dirs.flatten)
|
19
18
|
end
|
20
19
|
|
@@ -1,20 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module PuppetDebugger
|
2
3
|
module Support
|
3
4
|
module InputResponders
|
4
|
-
|
5
5
|
def static_responder_list
|
6
|
-
|
7
|
-
|
8
|
-
]
|
6
|
+
%w(exit functions classification vars facterdb_filter krt facts
|
7
|
+
resources classes whereami play reset help)
|
9
8
|
end
|
10
9
|
|
11
10
|
# @source_file and @source_line_num instance variables must be set for this
|
12
11
|
# method to show the surrounding code
|
13
12
|
# @return [String] - string output of the code surrounded by the breakpoint or nil if file or line_num do not exist
|
14
|
-
def whereami(
|
15
|
-
file
|
16
|
-
line_num
|
17
|
-
if file
|
13
|
+
def whereami(_command = nil, _args = nil)
|
14
|
+
file = @source_file
|
15
|
+
line_num = @source_line_num
|
16
|
+
if file && line_num
|
18
17
|
if file == :code
|
19
18
|
source_code = Puppet[:code]
|
20
19
|
code = DebuggerCode.from_string(source_code, :puppet)
|
@@ -27,11 +26,11 @@ module PuppetDebugger
|
|
27
26
|
|
28
27
|
# displays the facterdb filter
|
29
28
|
# @param [Array] - args is not used
|
30
|
-
def facterdb_filter(
|
29
|
+
def facterdb_filter(_args = [])
|
31
30
|
dynamic_facterdb_filter.ai
|
32
31
|
end
|
33
32
|
|
34
|
-
def help(
|
33
|
+
def help(_args = [])
|
35
34
|
PuppetDebugger::Cli.print_repl_desc
|
36
35
|
end
|
37
36
|
|
@@ -46,7 +45,7 @@ module PuppetDebugger
|
|
46
45
|
reset
|
47
46
|
set_remote_node_name(name)
|
48
47
|
else
|
49
|
-
out_buffer.puts
|
48
|
+
out_buffer.puts 'Must supply a valid node name'
|
50
49
|
end
|
51
50
|
when /loglevel/
|
52
51
|
if level = args.shift
|
@@ -58,29 +57,29 @@ module PuppetDebugger
|
|
58
57
|
output
|
59
58
|
end
|
60
59
|
|
61
|
-
def facts(
|
60
|
+
def facts(_args = [])
|
62
61
|
variables = node.facts.values
|
63
|
-
variables.ai(
|
62
|
+
variables.ai(sort_keys: true, indent: -1)
|
64
63
|
end
|
65
64
|
|
66
|
-
def functions(args=[])
|
65
|
+
def functions(args = [])
|
67
66
|
filter = args.first || ''
|
68
67
|
function_map.keys.sort.grep(/^#{Regexp.escape(filter)}/)
|
69
68
|
end
|
70
69
|
|
71
|
-
def vars(
|
70
|
+
def vars(_args = [])
|
72
71
|
# remove duplicate variables that are also in the facts hash
|
73
|
-
variables = scope.to_hash.delete_if {|
|
72
|
+
variables = scope.to_hash.delete_if { |key, _value| node.facts.values.key?(key) }
|
74
73
|
variables['facts'] = 'removed by the puppet-debugger' if variables.key?('facts')
|
75
|
-
output =
|
76
|
-
output += variables.ai(
|
74
|
+
output = 'Facts were removed for easier viewing'.ai + "\n"
|
75
|
+
output += variables.ai(sort_keys: true, indent: -1)
|
77
76
|
end
|
78
77
|
|
79
|
-
def environment(
|
78
|
+
def environment(_args = [])
|
80
79
|
"Puppet Environment: #{puppet_env_name}"
|
81
80
|
end
|
82
81
|
|
83
|
-
def reset(
|
82
|
+
def reset(_args = [])
|
84
83
|
set_scope(nil)
|
85
84
|
set_remote_node_name(nil)
|
86
85
|
set_node(nil)
|
@@ -100,22 +99,22 @@ module PuppetDebugger
|
|
100
99
|
nil
|
101
100
|
end
|
102
101
|
|
103
|
-
def krt(
|
104
|
-
known_resource_types.ai(
|
102
|
+
def krt(_args = [])
|
103
|
+
known_resource_types.ai(sort_keys: true, indent: -1)
|
105
104
|
end
|
106
105
|
|
107
|
-
def play(args=[])
|
106
|
+
def play(args = [])
|
108
107
|
config = {}
|
109
108
|
config[:play] = args.first
|
110
109
|
play_back(config)
|
111
|
-
|
110
|
+
nil # we don't want to return anything
|
112
111
|
end
|
113
112
|
|
114
|
-
def classification(
|
113
|
+
def classification(_args = [])
|
115
114
|
node.classes.ai
|
116
115
|
end
|
117
116
|
|
118
|
-
def resources(args=[])
|
117
|
+
def resources(args = [])
|
119
118
|
res = scope.compiler.catalog.resources.map do |res|
|
120
119
|
res.to_s.gsub(/\[/, "['").gsub(/\]/, "']") # ensure the title has quotes
|
121
120
|
end
|
@@ -127,10 +126,9 @@ module PuppetDebugger
|
|
127
126
|
end
|
128
127
|
end
|
129
128
|
|
130
|
-
def classes(
|
129
|
+
def classes(_args = [])
|
131
130
|
scope.compiler.catalog.classes.ai
|
132
131
|
end
|
133
|
-
|
134
132
|
end
|
135
133
|
end
|
136
134
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'puppet/indirector/node/rest'
|
2
3
|
|
3
4
|
module PuppetDebugger
|
@@ -46,7 +47,7 @@ module PuppetDebugger
|
|
46
47
|
def get_remote_node(name)
|
47
48
|
indirection = Puppet::Indirector::Indirection.instance(:node)
|
48
49
|
indirection.terminus_class = 'rest'
|
49
|
-
remote_node = indirection.find(name, :
|
50
|
+
remote_node = indirection.find(name, environment: puppet_environment)
|
50
51
|
remote_node
|
51
52
|
end
|
52
53
|
|
@@ -59,7 +60,7 @@ module PuppetDebugger
|
|
59
60
|
parameters = remote_node.parameters.dup
|
60
61
|
trusted_data = parameters.delete('trusted')
|
61
62
|
options[:parameters] = parameters || {}
|
62
|
-
options[:facts] = Puppet::Node::Facts.new(remote_node.name,remote_node.parameters)
|
63
|
+
options[:facts] = Puppet::Node::Facts.new(remote_node.name, remote_node.parameters)
|
63
64
|
options[:classes] = remote_node.classes
|
64
65
|
options[:environment] = puppet_environment
|
65
66
|
node_object = Puppet::Node.new(remote_node.name, options)
|
@@ -71,11 +72,11 @@ module PuppetDebugger
|
|
71
72
|
# query the remote puppet server and retrieve the node object
|
72
73
|
#
|
73
74
|
def set_node_from_name(name)
|
74
|
-
out_buffer.puts
|
75
|
+
out_buffer.puts "Fetching node #{name}"
|
75
76
|
remote_node = get_remote_node(name)
|
76
|
-
if remote_node
|
77
|
-
remote_node_name = nil
|
78
|
-
raise PuppetDebugger::Exception::UndefinedNode
|
77
|
+
if remote_node && remote_node.parameters.empty?
|
78
|
+
remote_node_name = nil # clear out the remote name
|
79
|
+
raise PuppetDebugger::Exception::UndefinedNode, name: remote_node.name
|
79
80
|
end
|
80
81
|
remote_node_name = remote_node.name
|
81
82
|
node_object = convert_remote_node(remote_node)
|
@@ -1,15 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module PuppetDebugger
|
2
3
|
module Support
|
3
4
|
module Play
|
4
|
-
|
5
|
-
def play_back(config={})
|
5
|
+
def play_back(config = {})
|
6
6
|
if config[:play]
|
7
7
|
if config[:play] =~ /^http/
|
8
8
|
play_back_url(config[:play])
|
9
|
-
elsif File.
|
9
|
+
elsif File.exist? config[:play]
|
10
10
|
play_back_string(File.read(config[:play]))
|
11
11
|
else config[:play]
|
12
|
-
|
12
|
+
out_buffer.puts "puppet-debugger can't play #{config[:play]}'"
|
13
13
|
end
|
14
14
|
end
|
15
15
|
end
|
@@ -19,18 +19,12 @@ module PuppetDebugger
|
|
19
19
|
url_data = URI(url)
|
20
20
|
case url_data.host
|
21
21
|
when /^gist\.github*/
|
22
|
-
unless url_data.path =~ /raw/
|
23
|
-
url = url += '.txt'
|
24
|
-
end
|
22
|
+
url = url += '.txt' unless url_data.path =~ /raw/
|
25
23
|
url
|
26
24
|
when /^github.com/
|
27
|
-
if url_data.path =~ /blob/
|
28
|
-
url.gsub('blob', 'raw')
|
29
|
-
end
|
25
|
+
url.gsub('blob', 'raw') if url_data.path =~ /blob/
|
30
26
|
when /^gist.github.com/
|
31
|
-
unless url_data.path =~ /raw/
|
32
|
-
url = url += '.txt'
|
33
|
-
end
|
27
|
+
url = url += '.txt' unless url_data.path =~ /raw/
|
34
28
|
url
|
35
29
|
when /^gitlab.com/
|
36
30
|
if url_data.path =~ /snippets/
|
@@ -50,15 +44,13 @@ module PuppetDebugger
|
|
50
44
|
end
|
51
45
|
|
52
46
|
def play_back_url(url)
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
abort "puppet-debugger can't play `#{converted_url}'"
|
61
|
-
end
|
47
|
+
require 'open-uri'
|
48
|
+
require 'net/http'
|
49
|
+
converted_url = convert_to_text(url)
|
50
|
+
str = fetch_url_data(converted_url)
|
51
|
+
play_back_string(str)
|
52
|
+
rescue SocketError
|
53
|
+
abort "puppet-debugger can't play `#{converted_url}'"
|
62
54
|
end
|
63
55
|
|
64
56
|
# plays back the string to the output stream
|
@@ -70,10 +62,10 @@ module PuppetDebugger
|
|
70
62
|
full_buffer += buf
|
71
63
|
# unless this is puppet code, otherwise skip repl keywords
|
72
64
|
if keyword_expression.match(buf)
|
73
|
-
out_buffer.write(
|
65
|
+
out_buffer.write('>> ')
|
74
66
|
else
|
75
67
|
parser.parse_string(full_buffer)
|
76
|
-
out_buffer.write(
|
68
|
+
out_buffer.write('>> ')
|
77
69
|
end
|
78
70
|
rescue Puppet::ParseErrorWithIssue => e
|
79
71
|
if multiline_input?(e)
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module PuppetDebugger
|
2
3
|
module Support
|
3
4
|
module Scope
|
@@ -7,9 +8,7 @@ module PuppetDebugger
|
|
7
8
|
|
8
9
|
# @return [Scope] puppet scope object
|
9
10
|
def scope
|
10
|
-
unless @scope
|
11
|
-
@scope ||= create_scope
|
12
|
-
end
|
11
|
+
@scope ||= create_scope unless @scope
|
13
12
|
@scope
|
14
13
|
end
|
15
14
|
|
@@ -34,7 +33,7 @@ module PuppetDebugger
|
|
34
33
|
|
35
34
|
# returns a hash of varaibles that are currently in scope
|
36
35
|
def scope_vars
|
37
|
-
vars = scope.to_hash.delete_if {|
|
36
|
+
vars = scope.to_hash.delete_if { |key, _value| node.facts.values.key?(key.to_sym) }
|
38
37
|
vars['facts'] = 'removed by the puppet-debugger'
|
39
38
|
end
|
40
39
|
end
|
@@ -1,9 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'puppet/pops'
|
2
3
|
require 'facterdb'
|
3
4
|
require 'tempfile'
|
4
5
|
|
5
6
|
# load all the generators found in the generators directory
|
6
|
-
Dir.glob(File.join(File.dirname(__FILE__),'support', '*.rb')).each do |file|
|
7
|
+
Dir.glob(File.join(File.dirname(__FILE__), 'support', '*.rb')).each do |file|
|
7
8
|
require_relative File.join('support', File.basename(file, '.rb'))
|
8
9
|
end
|
9
10
|
|
@@ -23,18 +24,18 @@ module PuppetDebugger
|
|
23
24
|
def parse_error(error)
|
24
25
|
case error
|
25
26
|
when SocketError
|
26
|
-
PuppetDebugger::Exception::ConnectError.new(:
|
27
|
+
PuppetDebugger::Exception::ConnectError.new(message: "Unknown host: #{Puppet[:server]}")
|
27
28
|
when Net::HTTPError
|
28
|
-
PuppetDebugger::Exception::AuthError.new(:
|
29
|
+
PuppetDebugger::Exception::AuthError.new(message: error.message)
|
29
30
|
when Errno::ECONNREFUSED
|
30
|
-
PuppetDebugger::Exception::ConnectError.new(:
|
31
|
+
PuppetDebugger::Exception::ConnectError.new(message: error.message)
|
31
32
|
when Puppet::Error
|
32
33
|
if error.message =~ /could\ not\ find\ class/i
|
33
|
-
PuppetDebugger::Exception::NoClassError.new(:
|
34
|
-
|
34
|
+
PuppetDebugger::Exception::NoClassError.new(default_modules_paths: default_modules_paths,
|
35
|
+
message: error.message)
|
35
36
|
elsif error.message =~ /default\ node/i
|
36
|
-
PuppetDebugger::Exception::NodeDefinitionError.new(:
|
37
|
-
|
37
|
+
PuppetDebugger::Exception::NodeDefinitionError.new(default_site_manifest: default_site_manifest,
|
38
|
+
message: error.message)
|
38
39
|
else
|
39
40
|
error
|
40
41
|
end
|
@@ -49,7 +50,7 @@ module PuppetDebugger
|
|
49
50
|
dirs = []
|
50
51
|
do_initialize if Puppet[:codedir].nil?
|
51
52
|
# add the puppet-debugger directory so we can load any defined functions
|
52
|
-
dirs << File.join(Puppet[:environmentpath],default_puppet_env_name,'modules') unless Puppet[:environmentpath].empty?
|
53
|
+
dirs << File.join(Puppet[:environmentpath], default_puppet_env_name, 'modules') unless Puppet[:environmentpath].empty?
|
53
54
|
dirs << Puppet.settings[:basemodulepath].split(':')
|
54
55
|
dirs.flatten
|
55
56
|
end
|
@@ -75,40 +76,38 @@ module PuppetDebugger
|
|
75
76
|
end
|
76
77
|
end
|
77
78
|
|
78
|
-
|
79
|
-
|
80
|
-
|
79
|
+
def keyword_expression
|
80
|
+
@keyword_expression ||= Regexp.new(/^exit|^:set|^play|^classification|^facts|^vars|^functions|^whereami|^classes|^resources|^krt|^environment|^reset|^help/)
|
81
|
+
end
|
81
82
|
|
82
83
|
def known_resource_types
|
83
84
|
res = {
|
84
|
-
:
|
85
|
-
:
|
86
|
-
:
|
85
|
+
hostclasses: scope.environment.known_resource_types.hostclasses.keys,
|
86
|
+
definitions: scope.environment.known_resource_types.definitions.keys,
|
87
|
+
nodes: scope.environment.known_resource_types.nodes.keys
|
87
88
|
}
|
88
89
|
if sites = scope.environment.known_resource_types.instance_variable_get(:@sites)
|
89
|
-
res
|
90
|
+
res[:sites] = scope.environment.known_resource_types.instance_variable_get(:@sites).first
|
90
91
|
end
|
91
92
|
if scope.environment.known_resource_types.respond_to?(:applications)
|
92
|
-
res
|
93
|
+
res[:applications] = scope.environment.known_resource_types.applications.keys
|
93
94
|
end
|
94
95
|
# some versions of puppet do not support capabilities
|
95
96
|
if scope.environment.known_resource_types.respond_to?(:capability_mappings)
|
96
|
-
res
|
97
|
+
res[:capability_mappings] = scope.environment.known_resource_types.capability_mappings.keys
|
97
98
|
end
|
98
99
|
res
|
99
100
|
end
|
100
101
|
|
101
102
|
# this is required in order to load things only when we need them
|
102
103
|
def do_initialize
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
# do nothing otherwise calling init twice raises an error
|
111
|
-
end
|
104
|
+
Puppet.initialize_settings
|
105
|
+
Puppet[:parser] = 'future' # this is required in order to work with puppet 3.8
|
106
|
+
Puppet[:trusted_node_data] = true
|
107
|
+
rescue ArgumentError => e
|
108
|
+
|
109
|
+
rescue Puppet::DevError => e
|
110
|
+
# do nothing otherwise calling init twice raises an error
|
112
111
|
end
|
113
112
|
|
114
113
|
# @param String - any valid puppet language code
|
@@ -125,14 +124,14 @@ module PuppetDebugger
|
|
125
124
|
::Puppet::Pops::Model::AstTransformer.new('').merge_location(args, model)
|
126
125
|
|
127
126
|
ast_code =
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
127
|
+
if model.is_a? ::Puppet::Pops::Model::Program
|
128
|
+
::Puppet::Parser::AST::PopsBridge::Program.new(model, args)
|
129
|
+
else
|
130
|
+
args[:value] = model
|
131
|
+
::Puppet::Parser::AST::PopsBridge::Expression.new(args)
|
132
|
+
end
|
134
133
|
# Create the "main" class for the content - this content will get merged with all other "main" content
|
135
|
-
::Puppet::Parser::AST::Hostclass.new('', :
|
134
|
+
::Puppet::Parser::AST::Hostclass.new('', code: ast_code)
|
136
135
|
end
|
137
136
|
|
138
137
|
# @param String - any valid puppet language code
|
@@ -146,10 +145,10 @@ module PuppetDebugger
|
|
146
145
|
File.open(file, 'w') do |f|
|
147
146
|
f.write(input)
|
148
147
|
end
|
149
|
-
Puppet.override(
|
150
|
-
|
151
|
-
|
152
|
-
|
148
|
+
Puppet.override({ code: input, global_scope: scope, loaders: scope.compiler.loaders }, 'For puppet-debugger') do
|
149
|
+
# because the repl is not a module we leave the modname blank
|
150
|
+
scope.environment.known_resource_types.import_ast(ast, '')
|
151
|
+
parser.evaluate_string(scope, input, File.expand_path(file))
|
153
152
|
end
|
154
153
|
end
|
155
154
|
|
@@ -165,12 +164,11 @@ module PuppetDebugger
|
|
165
164
|
end
|
166
165
|
|
167
166
|
def default_manifests_dir
|
168
|
-
File.join(Puppet[:environmentpath],default_puppet_env_name,'manifests')
|
167
|
+
File.join(Puppet[:environmentpath], default_puppet_env_name, 'manifests')
|
169
168
|
end
|
170
169
|
|
171
170
|
def default_site_manifest
|
172
171
|
File.join(default_manifests_dir, 'site.pp')
|
173
172
|
end
|
174
|
-
|
175
173
|
end
|
176
174
|
end
|