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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bf5bf556d8e8b1810aff75dc4ca595b8d52d1f2e
4
- data.tar.gz: 57513b64926b0107ecff995c4ce81985dce6ea6c
3
+ metadata.gz: 857afe5c153e6dbdce56459291318d984689a28f
4
+ data.tar.gz: c8c80c82ef553716ac98bf59c6a3175f8a11235a
5
5
  SHA512:
6
- metadata.gz: a8de0ef4a70b41de5ed03f119f1332e16222ba9fd3a8405ae31526004be2c69ab2cbf6abf56c02862113eca6e60d90fe69711519de30667155b1763922275247
7
- data.tar.gz: a1bd4e25633ee39854aad9a4ff74489eb22773c03012c23b4b8926e57583f4922f8f5c9da0ec9007b12f9b0f832923daa48666fea503514c18a605d8f718e81a
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
- script:
55
- - "curl -X POST -F token=$PREPL_BUILD_TRIGGER_TOKEN -F ref=$REF https://gitlab.com/api/v3/projects/1146764/trigger/builds"
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
- ## Unreleased
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
@@ -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
- default_modules_paths,
38
- default_manifests_dir)
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 or line_num do not exist
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).with_line_numbers.with_indentation(5).with_file_reference.to_s
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
- def data_types
10
- loader.implementation_registry.
11
- instance_variable_get(:'@implementations_per_type_name').
12
- keys.find_all { |t| t !~ /::/ }
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
- mod_resolver = loaders.instance_variable_get(:@module_resolver)
24
- all_mods = mod_resolver.instance_variable_get(:@all_module_loaders)
25
- end
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
- unless facts = Puppet::Node::Facts.indirection.find(Puppet[:node_name_value])
35
- raise "Could not find facts for #{Puppet[:node_name_value]}"
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
- unless node = Puppet::Node.indirection.find(Puppet[:node_name_value])
43
- raise "Could not find node #{Puppet[:node_name_value]}"
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
@@ -2,7 +2,6 @@
2
2
  module PuppetDebugger
3
3
  module Support
4
4
  module Scope
5
-
6
5
  # @param [Puppet::Pops::Scope] - Scope object or nil
7
6
  def set_scope(value)
8
7
  @scope = value
data/lib/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module PuppetDebugger
3
- VERSION = '0.5.1'
3
+ VERSION = '0.6.0'
4
4
  end
@@ -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.5.1
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-03-25 00:00:00.000000000 Z
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
- - ".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"
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.6.11
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