puppet-debugger 0.5.1 → 0.6.0

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
  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