puppet-debugger 0.5.1 → 0.6.0
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 +12 -8
- data/CHANGELOG.md +5 -2
- data/lib/puppet-debugger/cli.rb +3 -3
- data/lib/puppet-debugger/support/environment.rb +2 -2
- data/lib/puppet-debugger/support/functions.rb +12 -0
- data/lib/puppet-debugger/support/input_responders.rb +33 -4
- data/lib/puppet-debugger/support/loader.rb +37 -10
- data/lib/puppet-debugger/support/node.rb +4 -6
- data/lib/puppet-debugger/support/scope.rb +0 -1
- data/lib/version.rb +1 -1
- data/spec/puppet/application/debugger_spec.rb +0 -4
- data/spec/puppet_debugger_spec.rb +25 -1
- metadata +22 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 857afe5c153e6dbdce56459291318d984689a28f
|
4
|
+
data.tar.gz: c8c80c82ef553716ac98bf59c6a3175f8a11235a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0fd7ebb96bef948c27045478ff96f872e22bcd98b2bcf4c8c2b44087eb7d75efaa1760327c9becdc8be2eb6b62ba1e6cf6bc5f147b00d98db1135410e0af27ed
|
7
|
+
data.tar.gz: d2440f621ba7b0fe0111fa7735fd7cd8a53f1e6832cf7c1eba073149ebb8bd8c7d1bd15d6d5559766f1a2303194155be35d2edbdfd40d23201ac1ba50fb478d0
|
data/.gitlab-ci.yml
CHANGED
@@ -13,6 +13,8 @@ stages:
|
|
13
13
|
- bundle install --without development validate
|
14
14
|
- bundle exec puppet module install puppetlabs-stdlib
|
15
15
|
- bundle exec rake spec
|
16
|
+
tags:
|
17
|
+
- ruby
|
16
18
|
|
17
19
|
web_trigger_staging:
|
18
20
|
type: web_deploy
|
@@ -45,14 +47,16 @@ bump_and_tag:
|
|
45
47
|
- gem install release_me
|
46
48
|
- bump_and_tag
|
47
49
|
|
48
|
-
web_trigger_production:
|
49
|
-
type: web_deploy
|
50
|
-
variables:
|
51
|
-
REF: production
|
52
|
-
only:
|
53
|
-
- tags
|
54
|
-
|
55
|
-
-
|
50
|
+
#web_trigger_production:
|
51
|
+
# type: web_deploy
|
52
|
+
# variables:
|
53
|
+
# REF: production
|
54
|
+
# only:
|
55
|
+
# - tags
|
56
|
+
# tags:
|
57
|
+
# - ruby
|
58
|
+
# script:
|
59
|
+
# - "curl -X POST -F token=$PREPL_BUILD_TRIGGER_TOKEN -F ref=$REF https://gitlab.com/api/v3/projects/1146764/trigger/builds"
|
56
60
|
|
57
61
|
.ruby_193: &ruby193
|
58
62
|
image: ruby:1.9.3
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,8 @@
|
|
1
|
-
##
|
2
|
-
|
1
|
+
## 0.6.0
|
2
|
+
* Adds ability to list puppet types
|
3
|
+
* Adds ability to list puppet datatypes
|
4
|
+
## 0.5.1
|
5
|
+
* accidently bump
|
3
6
|
## 0.5.0
|
4
7
|
* Fixes #gh-49 - puppet 4 functions don't seem to work
|
5
8
|
* Disables trying to set trusted_node_data for puppet versions that do not support it
|
data/lib/puppet-debugger/cli.rb
CHANGED
@@ -45,7 +45,7 @@ module PuppetDebugger
|
|
45
45
|
scoped_vars = variables.map { |k, _v| scope.compiler.topscope.exist?(k) ? "$::#{k}" : "$#{k}" }
|
46
46
|
# append a () to functions so we know they are functions
|
47
47
|
funcs = function_map.keys.map { |k| "#{k.split('::').last}()" }
|
48
|
-
(scoped_vars + funcs + static_responder_list).uniq.sort
|
48
|
+
(scoped_vars + funcs + static_responder_list + all_data_types).uniq.sort
|
49
49
|
end
|
50
50
|
|
51
51
|
# looks up the type in the catalog by using the type and title
|
@@ -97,7 +97,7 @@ module PuppetDebugger
|
|
97
97
|
begin
|
98
98
|
output = ''
|
99
99
|
case input
|
100
|
-
when /^play|^classification|^whereami|^facterdb_filter|^facts|^vars|^functions|^classes|^resources|^krt|^environment|^reset|^help/
|
100
|
+
when /^play|^classification|^whereami|^facterdb_filter|^facts|^datatypes|^types|^vars|^functions|^classes|^resources|^krt|^environment|^reset|^help/
|
101
101
|
args = input.split(' ')
|
102
102
|
command = args.shift.to_sym
|
103
103
|
output = send(command, args) if respond_to?(command)
|
@@ -150,7 +150,7 @@ Puppet Version: #{Puppet.version}
|
|
150
150
|
Puppet Debugger Version: #{PuppetDebugger::VERSION}
|
151
151
|
Created by: NWOps <corey@nwops.io>
|
152
152
|
Type "exit", "functions", "vars", "krt", "whereami", "facts", "resources", "classes",
|
153
|
-
"play", "classification", "reset", or "help" for more information.
|
153
|
+
"play", "classification", "types", "datatypes", "reset", or "help" for more information.
|
154
154
|
|
155
155
|
EOT
|
156
156
|
output
|
@@ -34,8 +34,8 @@ module PuppetDebugger
|
|
34
34
|
# returns the environment
|
35
35
|
def create_environment
|
36
36
|
Puppet::Node::Environment.create(Puppet[:environment],
|
37
|
-
|
38
|
-
|
37
|
+
default_modules_paths,
|
38
|
+
default_manifests_dir)
|
39
39
|
end
|
40
40
|
|
41
41
|
def create_node_environment(manifest = nil)
|
@@ -17,6 +17,18 @@ module PuppetDebugger
|
|
17
17
|
Dir.glob(search_dirs.flatten)
|
18
18
|
end
|
19
19
|
|
20
|
+
def data_type_files
|
21
|
+
search_dirs = lib_dirs.map do |lib_dir|
|
22
|
+
[File.join(lib_dir, 'puppet', 'functions', '**', '*.rb'),
|
23
|
+
File.join(lib_dir, 'functions', '**', '*.rb'),
|
24
|
+
File.join(lib_dir, 'puppet', 'parser', 'functions', '*.rb')]
|
25
|
+
end
|
26
|
+
# add puppet lib directories
|
27
|
+
search_dirs << [File.join(puppet_lib_dir, 'puppet', 'functions', '**', '*.rb'),
|
28
|
+
File.join(puppet_lib_dir, 'puppet', 'parser', 'functions', '*.rb')]
|
29
|
+
Dir.glob(search_dirs.flatten)
|
30
|
+
end
|
31
|
+
|
20
32
|
# returns either the module name or puppet version
|
21
33
|
def mod_finder
|
22
34
|
@mod_finder ||= Regexp.new('\/([\w\-\.]+)\/lib')
|
@@ -3,13 +3,20 @@ module PuppetDebugger
|
|
3
3
|
module Support
|
4
4
|
module InputResponders
|
5
5
|
def static_responder_list
|
6
|
-
%w(exit functions classification vars facterdb_filter krt facts
|
7
|
-
resources classes whereami play reset help)
|
6
|
+
%w(exit functions classification vars facterdb_filter krt facts types
|
7
|
+
resources classes whereami datatypes play reset help)
|
8
|
+
end
|
9
|
+
|
10
|
+
def datatypes(_args = [])
|
11
|
+
types = all_data_types
|
12
|
+
return types.sort.ai if types.instance_of?(Array)
|
13
|
+
types
|
8
14
|
end
|
9
15
|
|
10
16
|
# @source_file and @source_line_num instance variables must be set for this
|
11
17
|
# method to show the surrounding code
|
12
|
-
# @return [String] - string output of the code surrounded by the breakpoint or nil if file
|
18
|
+
# @return [String] - string output of the code surrounded by the breakpoint or nil if file
|
19
|
+
# or line_num do not exist
|
13
20
|
def whereami(_command = nil, _args = nil)
|
14
21
|
file = @source_file
|
15
22
|
line_num = @source_line_num
|
@@ -20,7 +27,29 @@ module PuppetDebugger
|
|
20
27
|
else
|
21
28
|
code = DebuggerCode.from_file(file, :puppet)
|
22
29
|
end
|
23
|
-
return code.with_marker(line_num).around(line_num, 5)
|
30
|
+
return code.with_marker(line_num).around(line_num, 5)
|
31
|
+
.with_line_numbers.with_indentation(5).with_file_reference.to_s
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
# @return - returns a list of types available to the environment
|
36
|
+
# if a error occurs we we run the types function again
|
37
|
+
def types(_args = [])
|
38
|
+
loaded_types = []
|
39
|
+
begin
|
40
|
+
# this loads all the types, if already loaded the file is skipped
|
41
|
+
Puppet::Type.loadall
|
42
|
+
Puppet::Type.eachtype do |t|
|
43
|
+
next if t.name == :component
|
44
|
+
loaded_types << t.name.to_s
|
45
|
+
end
|
46
|
+
loaded_types.ai
|
47
|
+
rescue Puppet::Error => e
|
48
|
+
puts e.message.red
|
49
|
+
Puppet.info(e.message)
|
50
|
+
# prevent more than two calls and recursive loop
|
51
|
+
return if caller_locations(1,10).find_all{|f| f.label == 'types' }.count > 2
|
52
|
+
types
|
24
53
|
end
|
25
54
|
end
|
26
55
|
|
@@ -1,15 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module PuppetDebugger
|
2
3
|
module Support
|
3
4
|
module Loader
|
4
|
-
|
5
5
|
def create_loader(environment)
|
6
6
|
Puppet::Pops::Loaders.new(environment)
|
7
7
|
end
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
9
|
+
# @return [Array[String]] - returns a list of all the custom data types found in all the modules in the environment
|
10
|
+
def environment_data_types
|
11
|
+
files = Dir.glob(puppet_environment.modulepath.map { |m| File.join(m, '**', 'types', '**', '*.pp') })
|
12
|
+
files.map do |f|
|
13
|
+
m = File.read(f).match(/type\s([a-z\d\:_]+)/i)
|
14
|
+
next if m =~ /type|alias/ # can't figure out the best way to filter type and alias out
|
15
|
+
m[1] if m && m[1] =~ /::/
|
16
|
+
end.uniq.compact
|
17
|
+
end
|
18
|
+
|
19
|
+
# @return [Array[String]] - a list of core data types
|
20
|
+
def core_datatypes
|
21
|
+
loaders.implementation_registry
|
22
|
+
.instance_variable_get(:'@implementations_per_type_name')
|
23
|
+
.keys.find_all { |t| t !~ /::/ }
|
24
|
+
end
|
25
|
+
|
26
|
+
# @return [Array[String]] - combined list of core data types and environment data types
|
27
|
+
def all_data_types
|
28
|
+
unless loaders.respond_to?(:implementation_registry)
|
29
|
+
Puppet.info("Data Types Not Available in Puppet: #{Puppet.version}")
|
30
|
+
return []
|
31
|
+
end
|
32
|
+
core_datatypes + environment_data_types
|
13
33
|
end
|
14
34
|
|
15
35
|
def loaders
|
@@ -19,16 +39,23 @@ module PuppetDebugger
|
|
19
39
|
# returns an array of module loaders that we may need to use in the future
|
20
40
|
# in order to parse all types of code (ie. functions) For now this is not
|
21
41
|
# being used.
|
22
|
-
def resolve_paths(loaders)
|
23
|
-
|
24
|
-
|
25
|
-
|
42
|
+
# def resolve_paths(loaders)
|
43
|
+
# mod_resolver = loaders.instance_variable_get(:@module_resolver)
|
44
|
+
# all_mods = mod_resolver.instance_variable_get(:@all_module_loaders)
|
45
|
+
# all_mods.last.get_contents
|
46
|
+
# end
|
26
47
|
|
27
48
|
# def functions
|
28
49
|
# @functions = []
|
29
50
|
# @functions << compiler.loaders.static_loader.loaded.keys.find_all {|l| l.type == :function}
|
51
|
+
# returns all the type names, athough we cannot determine the difference between datatype and resource type
|
52
|
+
# loaders.static_loader.loaded.map { |item| item.first.name}
|
53
|
+
# loaders.implementation_registry.
|
54
|
+
# instance_variable_get(:'@implementations_per_type_name').
|
55
|
+
# keys.find_all { |t| t !~ /::/ }
|
56
|
+
# Puppet::Pops::Types::TypeFactory.type_map.keys.map(&:capatilize)
|
30
57
|
# end
|
31
|
-
|
58
|
+
# Puppet::Pops::Adapters::LoaderAdapter.loader_for_model_object(generate_ast(''))
|
32
59
|
end
|
33
60
|
end
|
34
61
|
end
|
@@ -31,17 +31,15 @@ module PuppetDebugger
|
|
31
31
|
node = nil
|
32
32
|
unless Puppet[:node_name_fact].empty?
|
33
33
|
# Collect our facts.
|
34
|
-
|
35
|
-
|
36
|
-
end
|
34
|
+
facts = Puppet::Node::Facts.indirection.find(Puppet[:node_name_value])
|
35
|
+
raise "Could not find facts for #{Puppet[:node_name_value]}" unless facts
|
37
36
|
Puppet[:node_name_value] = facts.values[Puppet[:node_name_fact]]
|
38
37
|
facts.name = Puppet[:node_name_value]
|
39
38
|
end
|
40
39
|
Puppet.override({ current_environment: environment }, 'For puppet debugger') do
|
41
40
|
# Find our Node
|
42
|
-
|
43
|
-
|
44
|
-
end
|
41
|
+
node = Puppet::Node.indirection.find(Puppet[:node_name_value])
|
42
|
+
raise "Could not find node #{Puppet[:node_name_value]}" unless node
|
45
43
|
# Merge in the facts.
|
46
44
|
node.merge(facts.values) if facts
|
47
45
|
end
|
data/lib/version.rb
CHANGED
@@ -78,7 +78,6 @@ $var1
|
|
78
78
|
EOF
|
79
79
|
end
|
80
80
|
|
81
|
-
|
82
81
|
it 'assign variable' do
|
83
82
|
allow(debugger).to receive(:options).and_return(code: input, quiet: true, run_once: true, use_facterdb: true)
|
84
83
|
expect { debugger.run_command }.to output(/\"111111\"/).to_stdout
|
@@ -109,13 +108,10 @@ $var1
|
|
109
108
|
EOF
|
110
109
|
end
|
111
110
|
|
112
|
-
|
113
111
|
it 'assign variable' do
|
114
112
|
allow(debugger).to receive(:options).and_return(code: input, quiet: true, run_once: true, use_facterdb: false)
|
115
113
|
expect { debugger.run_command }.to output(/\"111111\"/).to_stdout
|
116
114
|
end
|
117
115
|
end
|
118
116
|
end
|
119
|
-
|
120
|
-
|
121
117
|
end
|
@@ -180,7 +180,7 @@ describe 'PuppetDebugger' do
|
|
180
180
|
'help'
|
181
181
|
end
|
182
182
|
it 'can show the help screen' do
|
183
|
-
expected_debugger_output = /Type \"exit\", \"functions\", \"vars\", \"krt\", \"whereami\", \"facts\", \"resources\", \"classes\",\n \"play\", \"classification\", \"reset\", or \"help\" for more information.\n\n/
|
183
|
+
expected_debugger_output = /Type \"exit\", \"functions\", \"vars\", \"krt\", \"whereami\", \"facts\", \"resources\", \"classes\",\n \"play\", \"classification\", \"types\", \"datatypes\", \"reset\", or \"help\" for more information.\n\n/
|
184
184
|
debugger.handle_input(input)
|
185
185
|
expect(output.string).to match(/Ruby Version: #{RUBY_VERSION}\n/)
|
186
186
|
expect(output.string).to match(/Puppet Version: \d.\d.\d\n/)
|
@@ -446,6 +446,20 @@ describe 'PuppetDebugger' do
|
|
446
446
|
end
|
447
447
|
end
|
448
448
|
|
449
|
+
describe 'datatypes' do
|
450
|
+
let(:input) do
|
451
|
+
'datatypes'
|
452
|
+
end
|
453
|
+
it 'handle datatypes' do
|
454
|
+
debugger.handle_input(input)
|
455
|
+
if Puppet.version < '4.3.0'
|
456
|
+
expect(output.string).to eq("\n[]\n")
|
457
|
+
else
|
458
|
+
expect(output.string).to match(/.*Array.*/)
|
459
|
+
end
|
460
|
+
end
|
461
|
+
end
|
462
|
+
|
449
463
|
describe 'whereami' do
|
450
464
|
let(:input) do
|
451
465
|
File.expand_path File.join(fixtures_dir, 'sample_start_debugger.pp')
|
@@ -465,6 +479,16 @@ describe 'PuppetDebugger' do
|
|
465
479
|
end
|
466
480
|
end
|
467
481
|
|
482
|
+
describe 'types' do
|
483
|
+
let(:input) do
|
484
|
+
'types'
|
485
|
+
end
|
486
|
+
it 'runs' do
|
487
|
+
debugger.handle_input(input)
|
488
|
+
expect(output.string).to match(/service/)
|
489
|
+
end
|
490
|
+
end
|
491
|
+
|
468
492
|
describe 'error message' do
|
469
493
|
let(:input) do
|
470
494
|
"file{'/tmp/test': ensure => present, contact => 'blah'}"
|
metadata
CHANGED
@@ -1,69 +1,69 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: puppet-debugger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Corey Osman
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-04-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: puppet
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '3.8'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '3.8'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: facterdb
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 0.3.8
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 0.3.8
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: awesome_print
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ~>
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '1.6'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '1.6'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rdoc
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '3.12'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ~>
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '3.12'
|
69
69
|
description: A interactive command line tool for evaluating and debugging the puppet
|
@@ -77,15 +77,15 @@ extra_rdoc_files:
|
|
77
77
|
- LICENSE.txt
|
78
78
|
- README.md
|
79
79
|
files:
|
80
|
-
-
|
81
|
-
-
|
82
|
-
-
|
83
|
-
-
|
84
|
-
-
|
85
|
-
-
|
86
|
-
-
|
87
|
-
-
|
88
|
-
-
|
80
|
+
- .dockerignore
|
81
|
+
- .document
|
82
|
+
- .gitignore
|
83
|
+
- .gitlab-ci.yml
|
84
|
+
- .release_me.yaml
|
85
|
+
- .rspec
|
86
|
+
- .rubocop.yml
|
87
|
+
- .rubocop_todo.yml
|
88
|
+
- .ruby-version
|
89
89
|
- CHANGELOG.md
|
90
90
|
- DEVELOPMENT.md
|
91
91
|
- Gemfile
|
@@ -142,17 +142,17 @@ require_paths:
|
|
142
142
|
- lib
|
143
143
|
required_ruby_version: !ruby/object:Gem::Requirement
|
144
144
|
requirements:
|
145
|
-
- -
|
145
|
+
- - '>='
|
146
146
|
- !ruby/object:Gem::Version
|
147
147
|
version: '0'
|
148
148
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
|
-
- -
|
150
|
+
- - '>='
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '0'
|
153
153
|
requirements: []
|
154
154
|
rubyforge_project:
|
155
|
-
rubygems_version: 2.
|
155
|
+
rubygems_version: 2.0.14.1
|
156
156
|
signing_key:
|
157
157
|
specification_version: 4
|
158
158
|
summary: A repl based debugger for the puppet language
|