puppet-ghostbuster 1.1.0 → 1.2.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
  SHA256:
3
- metadata.gz: 3ec9b23a16d99a0943b30208b38c1445112a1bd359f26c3c161d3b7721f95b90
4
- data.tar.gz: c5fb473512bc43557378a83f318911709a1d475f81727da4f25e9beb96de47d9
3
+ metadata.gz: 527ccfac3b00bdcd6f58c17d2825332810f1c954089e596ba1eaf9d0a5015bb6
4
+ data.tar.gz: df8b761531f84a9a14527516b508229f35efe27abd1483549f062b6e8efd6eff
5
5
  SHA512:
6
- metadata.gz: bf4b7b687a058bb87c4af83be99d25deb8f2dc8fc48780a4c798dbe52a4ce5180f374cc023dc362e9c414327d298a942896c42deb2d6411a0ec357649ead7969
7
- data.tar.gz: 5e9a5b44cb3e34c09d68e8e332144568b92cb8cfdd20fed57e3206fbec9b4e11e0cabea9752622640109b70cc2fd26d6f8134548444ec7c699729965cfaaf38c
6
+ metadata.gz: cbe6f1914075e0f685db3f6252005149c62fd865abb90535823b37a8c9b94780f464583daaf131dce84699853af4b0a7af220c3758cd030bdcb0a167c824b7a4
7
+ data.tar.gz: cf926a7365b382b714cc1e32b2ab4cd86cb4bfc4278278374a6ccef61bc4f11b165d6c932d3bc1b86ac5bcb282460240fa0f3f43636cbae24542fcc3dd093f12
data/.rubocop_todo.yml CHANGED
@@ -90,6 +90,7 @@ Style/ClassAndModuleChildren:
90
90
  Style/ClassVars:
91
91
  Exclude:
92
92
  - 'lib/puppet-ghostbuster/puppetdb.rb'
93
+ - 'lib/puppet-ghostbuster/util.rb'
93
94
 
94
95
  # Offense count: 9
95
96
  # Configuration parameters: AllowedConstants.
@@ -98,6 +99,7 @@ Style/Documentation:
98
99
  - 'spec/**/*'
99
100
  - 'test/**/*'
100
101
  - 'lib/puppet-ghostbuster/puppetdb.rb'
102
+ - 'lib/puppet-ghostbuster/util.rb'
101
103
  - 'lib/puppet-lint/plugins/check_ghostbuster_classes.rb'
102
104
  - 'lib/puppet-lint/plugins/check_ghostbuster_defines.rb'
103
105
  - 'lib/puppet-lint/plugins/check_ghostbuster_facts.rb'
@@ -114,6 +116,7 @@ Style/Documentation:
114
116
  Style/FrozenStringLiteralComment:
115
117
  Exclude:
116
118
  - 'lib/puppet-ghostbuster/puppetdb.rb'
119
+ - 'lib/puppet-ghostbuster/util.rb'
117
120
  - 'lib/puppet-ghostbuster/version.rb'
118
121
  - 'lib/puppet-lint/plugins/check_ghostbuster_classes.rb'
119
122
  - 'lib/puppet-lint/plugins/check_ghostbuster_defines.rb'
@@ -167,4 +170,4 @@ Style/ZeroLengthPredicate:
167
170
  # Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, AllowedPatterns.
168
171
  # URISchemes: http, https
169
172
  Layout/LineLength:
170
- Max: 189
173
+ Max: 195
data/CHANGELOG.md CHANGED
@@ -2,6 +2,27 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## [1.2.0](https://github.com/voxpupuli/puppet-ghostbuster/tree/1.2.0) (2024-01-29)
6
+
7
+ [Full Changelog](https://github.com/voxpupuli/puppet-ghostbuster/compare/1.1.0...1.2.0)
8
+
9
+ **Implemented enhancements:**
10
+
11
+ - Support facts by symbol [\#87](https://github.com/voxpupuli/puppet-ghostbuster/pull/87) ([h0tw1r3](https://github.com/h0tw1r3))
12
+ - support for hiera datadir [\#86](https://github.com/voxpupuli/puppet-ghostbuster/pull/86) ([h0tw1r3](https://github.com/h0tw1r3))
13
+ - optimize puppetdb query [\#85](https://github.com/voxpupuli/puppet-ghostbuster/pull/85) ([h0tw1r3](https://github.com/h0tw1r3))
14
+ - optimize search file content [\#84](https://github.com/voxpupuli/puppet-ghostbuster/pull/84) ([h0tw1r3](https://github.com/h0tw1r3))
15
+ - support puppetdb token authentication [\#73](https://github.com/voxpupuli/puppet-ghostbuster/pull/73) ([h0tw1r3](https://github.com/h0tw1r3))
16
+
17
+ **Fixed bugs:**
18
+
19
+ - Getting 'ArgumentError: invalid byte sequence in UTF-8' when using ghostbuster\_facts [\#63](https://github.com/voxpupuli/puppet-ghostbuster/issues/63)
20
+
21
+ **Merged pull requests:**
22
+
23
+ - Update voxpupuli-rubocop requirement from ~\> 2.3.0 to ~\> 2.4.0 [\#82](https://github.com/voxpupuli/puppet-ghostbuster/pull/82) ([dependabot[bot]](https://github.com/apps/dependabot))
24
+ - Update voxpupuli-rubocop requirement from ~\> 2.2.0 to ~\> 2.3.0 [\#81](https://github.com/voxpupuli/puppet-ghostbuster/pull/81) ([dependabot[bot]](https://github.com/apps/dependabot))
25
+
5
26
  ## [1.1.0](https://github.com/voxpupuli/puppet-ghostbuster/tree/1.1.0) (2024-01-08)
6
27
 
7
28
  [Full Changelog](https://github.com/voxpupuli/puppet-ghostbuster/compare/1.0.0...1.1.0)
data/README.md CHANGED
@@ -46,6 +46,11 @@ An SSL certificate signed by your site’s Puppet CA
46
46
 
47
47
  The private key for that certificate
48
48
 
49
+ ### PE_TOKEN
50
+
51
+ If set, PE token authentication will be used instead of certificate authentication.
52
+ Value may be a token _or_ path to a file containing a token.
53
+
49
54
  Plugins
50
55
  -------
51
56
 
@@ -13,14 +13,25 @@ class PuppetGhostbuster
13
13
  end
14
14
 
15
15
  def self.client
16
- @@client ||= ::PuppetDB::Client.new({
17
- server: ENV['PUPPETDB_URL'] || @@puppetdb,
18
- pem: {
19
- 'key' => ENV['PUPPETDB_KEY_FILE'] || Puppet[:hostprivkey],
20
- 'cert' => ENV['PUPPETDB_CERT_FILE'] || Puppet[:hostcert],
21
- 'ca_file' => ENV['PUPPETDB_CACERT_FILE'] || Puppet[:localcacert],
22
- },
23
- }, 4)
16
+ @@client ||= begin
17
+ options = {
18
+ server: ENV['PUPPETDB_URL'] || @@puppetdb,
19
+ }
20
+
21
+ if ENV['PE_TOKEN']
22
+ token_file = File.expand_path(ENV['PE_TOKEN'])
23
+ options[:token] = File.exist?(token_file) ? File.read(token_file) : ENV.fetch('PE_TOKEN')
24
+ options[:cacert] = ENV['PUPPETDB_CACERT_FILE'] || Puppet[:localcacert]
25
+ else
26
+ options[:pem] = {
27
+ 'key' => ENV['PUPPETDB_KEY_FILE'] || Puppet[:hostprivkey],
28
+ 'cert' => ENV['PUPPETDB_CERT_FILE'] || Puppet[:hostcert],
29
+ 'ca_file' => ENV['PUPPETDB_CACERT_FILE'] || Puppet[:localcacert],
30
+ }
31
+ end
32
+
33
+ ::PuppetDB::Client.new(options, 4)
34
+ end
24
35
  end
25
36
 
26
37
  def client
@@ -29,9 +40,9 @@ class PuppetGhostbuster
29
40
 
30
41
  def self.classes
31
42
  @@classes ||= client.request('',
32
- 'resources[title] { type = "Class" and nodes { deactivated is null } }').data.map do |r|
43
+ 'resources[title] { type = "Class" and nodes { deactivated is null } group by title }').data.map do |r|
33
44
  r['title']
34
- end.uniq
45
+ end
35
46
  end
36
47
 
37
48
  def classes
@@ -39,9 +50,9 @@ class PuppetGhostbuster
39
50
  end
40
51
 
41
52
  def self.resources
42
- @@resources ||= client.request('', 'resources[type] { nodes { deactivated is null } }').data.map do |r|
53
+ @@resources ||= client.request('', 'resources[type] { nodes { deactivated is null } group by type }').data.map do |r|
43
54
  r['type']
44
- end.uniq
55
+ end
45
56
  end
46
57
 
47
58
  def resources
@@ -0,0 +1,19 @@
1
+ class PuppetGhostbuster
2
+ class Util
3
+ class << self
4
+ def search_file(name, search)
5
+ return search_file_regexp(name, search) if search.is_a?(Regexp)
6
+
7
+ File.foreach(name) do |line|
8
+ return true if line.include?(search)
9
+ end
10
+ end
11
+
12
+ def search_file_regexp(name, search)
13
+ File.foreach(name) do |line|
14
+ return true if line.match?(search)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -1,3 +1,3 @@
1
1
  class PuppetGhostbuster
2
- VERSION = '1.1.0'
2
+ VERSION = '1.2.0'
3
3
  end
@@ -1,3 +1,5 @@
1
+ require 'puppet-ghostbuster/util'
2
+
1
3
  class PuppetLint::Checks
2
4
  def load_data(path, content)
3
5
  lexer = PuppetLint::Lexer.new
@@ -25,29 +27,30 @@ PuppetLint.new_check(:ghostbuster_facts) do
25
27
  m = path.match(%r{.*/([^/]+)/lib/facter/(.+)$})
26
28
  return if m.nil?
27
29
 
28
- File.readlines(path).grep(/Facter.add\(["']([^"']+)["']\)/).each do |line|
29
- fact_name = line.match(/Facter.add\(["']([^"']+)["']\)/).captures[0]
30
+ File.foreach(path) do |line|
31
+ if line =~ /Facter.add\(["':](?<fact>[^"'\)]+)["']?\)/
32
+ fact_name = Regexp.last_match(:fact)
30
33
 
31
- found = false
34
+ found = false
32
35
 
33
- manifests.each do |manifest|
34
- found = true if File.readlines(manifest).grep(/\$\{?::#{fact_name}\}?/).size > 0
35
- found = true if File.readlines(manifest).grep(/@#{fact_name}/).size > 0
36
- break if found
37
- end
36
+ manifests.each do |manifest|
37
+ found = true unless PuppetGhostbuster::Util.search_file(manifest, /(\$\{?::#{fact_name}\}?|@#{fact_name})/).nil?
38
+ break if found
39
+ end
38
40
 
39
- templates.each do |template|
40
- found = true if File.readlines(template).grep(/@#{fact_name}/).size > 0
41
- break if found
42
- end
41
+ templates.each do |template|
42
+ found = true unless PuppetGhostbuster::Util.search_file(template, /@#{fact_name}/).nil?
43
+ break if found
44
+ end
43
45
 
44
- next if found
46
+ next if found
45
47
 
46
- notify :warning, {
47
- message: "Fact #{fact_name} seems unused",
48
- line: 1,
49
- column: 1,
50
- }
48
+ notify :warning, {
49
+ message: "Fact #{fact_name} seems unused",
50
+ line: 1,
51
+ column: 1,
52
+ }
53
+ end
51
54
  end
52
55
  end
53
56
  end
@@ -1,4 +1,5 @@
1
1
  require 'puppet-ghostbuster/puppetdb'
2
+ require 'puppet-ghostbuster/util'
2
3
 
3
4
  class PuppetLint::Checks
4
5
  def load_data(path, content)
@@ -42,9 +43,9 @@ PuppetLint.new_check(:ghostbuster_files) do
42
43
  end
43
44
 
44
45
  manifests.each do |manifest|
45
- return if File.readlines(manifest).grep(%r{["']#{module_name}/#{file_name}["']}).size > 0
46
+ return if PuppetGhostbuster::Util.search_file(manifest, %r{["']#{module_name}/#{file_name}["']})
46
47
 
47
- if (match = manifest.match(%r{.*/([^/]+)/manifests/.+$})) && (match.captures[0] == module_name) && (File.readlines(manifest).grep(%r{["']\$\{module_name\}/#{file_name}["']}).size > 0)
48
+ if (match = manifest.match(%r{.*/([^/]+)/manifests/.+$})) && (match.captures[0] == module_name) && PuppetGhostbuster::Util.search_file(manifest, %r{["']\$\{module_name\}/#{file_name}["']})
48
49
  return
49
50
  end
50
51
  end
@@ -1,3 +1,5 @@
1
+ require 'puppet-ghostbuster/util'
2
+
1
3
  class PuppetLint::Checks
2
4
  def load_data(path, content)
3
5
  lexer = PuppetLint::Lexer.new
@@ -28,12 +30,11 @@ PuppetLint.new_check(:ghostbuster_functions) do
28
30
  function_name = m.captures[0]
29
31
 
30
32
  manifests.each do |manifest|
31
- return if File.readlines(manifest).grep(/#{function_name}\(/).size > 0
33
+ return if PuppetGhostbuster::Util.search_file(manifest, "#{function_name}(")
32
34
  end
33
35
 
34
36
  templates.each do |template|
35
- return if File.readlines(template).grep(/scope.function_#{function_name}\(/).size > 0
36
- return if File.readlines(template).grep(/Puppet::Parser::Functions.function\(:#{function_name}/).size > 0
37
+ return if PuppetGhostbuster::Util.search_file(template, /(Puppet::Parser::Functions\.function\(:|scope\.function_)#{function_name}/)
37
38
  end
38
39
 
39
40
  notify :warning, {
@@ -13,13 +13,26 @@ class PuppetLint::Checks
13
13
  end
14
14
 
15
15
  PuppetLint.new_check(:ghostbuster_hiera_files) do
16
+ def hiera
17
+ @hiera ||= YAML.load_file(ENV['HIERA_YAML_PATH'] || '/etc/puppetlabs/code/hiera.yaml')
18
+ end
19
+
20
+ def default_datadir
21
+ hiera.dig('defaults', 'datadir') || 'hieradata'
22
+ end
23
+
24
+ def path_in_datadirs?(path)
25
+ @data_dirs ||= hiera['hierarchy'].map { |h| (h['datadir'] || default_datadir).chomp('/') }.uniq
26
+ path.match?(%(./#{Regexp.union(@data_dirs)}/))
27
+ end
28
+
16
29
  def regexprs
17
- hiera_yaml_file = ENV['HIERA_YAML_PATH'] || '/etc/puppetlabs/code/hiera.yaml'
18
- hiera = YAML.load_file(hiera_yaml_file)
19
30
  regs = {}
20
31
  hiera['hierarchy'].each do |hierarchy|
32
+ path_datadir = Regexp.escape((hierarchy['datadir'] || default_datadir).chomp('/'))
21
33
  ([*hierarchy['path']] + [*hierarchy['paths']]).each do |level|
22
- regex = level.gsub(/%\{(::)?(trusted|server_facts|facts)\.[^\}]+\}/, '(.+)').gsub(/%\{[^\}]+\}/, '.+')
34
+ level = File.join(path_datadir, level)
35
+ regex = Regexp.new(level.gsub(/%\{(::)?(trusted|server_facts|facts)\.[^\}]+\}/, '(.+)').gsub(/%\{[^\}]+\}/, '.+'))
23
36
  facts = level.match(regex).captures.map { |f| f[/%{(::)?(trusted|server_facts|facts)\.(.+)}/, 3] }
24
37
  regs[regex] = facts
25
38
  end
@@ -28,14 +41,14 @@ PuppetLint.new_check(:ghostbuster_hiera_files) do
28
41
  end
29
42
 
30
43
  def check
31
- return if path.match(%r{./hieradata/.*\.yaml}).nil?
44
+ return unless path_in_datadirs? path
32
45
 
33
46
  puppetdb = PuppetGhostbuster::PuppetDB.new
34
- _path = path.gsub('./hieradata/', '')
35
47
 
36
48
  regexprs.each do |k, v|
37
- m = _path.match(Regexp.new(k))
49
+ m = path.match(k)
38
50
  next if m.nil?
51
+
39
52
  return if m.captures.size == 0
40
53
 
41
54
  if m.captures.size > 1
@@ -68,7 +81,7 @@ PuppetLint.new_check(:ghostbuster_hiera_files) do
68
81
  end
69
82
 
70
83
  notify :warning, {
71
- message: "Hiera File #{_path} seems unused",
84
+ message: "Hiera File #{path} seems unused",
72
85
  line: 1,
73
86
  column: 1,
74
87
  }
@@ -1,3 +1,5 @@
1
+ require 'puppet-ghostbuster/util'
2
+
1
3
  class PuppetLint::Checks
2
4
  def load_data(path, content)
3
5
  lexer = PuppetLint::Lexer.new
@@ -28,19 +30,17 @@ PuppetLint.new_check(:ghostbuster_templates) do
28
30
  module_name, template_name = m.captures
29
31
 
30
32
  manifests.each do |manifest|
31
- return if File.readlines(manifest).grep(%r{["']#{module_name}/#{template_name}["']}).size > 0
33
+ return if PuppetGhostbuster::Util.search_file(manifest, %r{["']#{module_name}/#{template_name}["']})
32
34
 
33
35
  next unless match = manifest.match(%r{.*/([^/]+)/manifests/.+$})
34
36
 
35
- if match.captures[0] == module_name && (File.readlines(manifest).grep(%r{["']\$\{module_name\}/#{template_name}["']}).size > 0)
37
+ if match.captures[0] == module_name && PuppetGhostbuster::Util.search_file(manifest, %r{["']\$\{module_name\}/#{template_name}["']})
36
38
  return
37
39
  end
38
40
  end
39
41
 
40
42
  templates.each do |template|
41
- if File.readlines(template).grep(%r{scope.function_template\(\['#{module_name}/#{template_name}'\]\)}).size > 0
42
- return
43
- end
43
+ return if PuppetGhostbuster::Util.search_file(template, "scope.function_template(['#{module_name}/#{template_name}'])")
44
44
  end
45
45
 
46
46
  notify :warning, {
@@ -23,7 +23,7 @@ Gem::Specification.new do |s|
23
23
  s.add_development_dependency 'rspec', '~> 3.0'
24
24
  s.add_development_dependency 'rspec-collection_matchers', '~> 1.0'
25
25
  s.add_development_dependency 'rspec-its', '~> 1.0'
26
- s.add_development_dependency 'voxpupuli-rubocop', '~> 2.2.0'
26
+ s.add_development_dependency 'voxpupuli-rubocop', '~> 2.4.0'
27
27
  s.add_runtime_dependency 'json', '>= 2.0', '< 3.0'
28
28
  s.add_runtime_dependency 'puppet', '>= 6.0', '< 9.0'
29
29
  s.add_dependency 'puppet-lint', '>= 1.0', '< 5.0'
@@ -1,6 +1,12 @@
1
1
  ---
2
2
  version: 5
3
+ defaults:
4
+ datadir: data
3
5
  hierarchy:
6
+ - name: "Some other location"
7
+ datadir: private/
8
+ path: "nodes/%{trusted.certname}.eyaml"
9
+
4
10
  - name: "Per-node data (yaml version)"
5
11
  path: "nodes/%{trusted.certname}.yaml"
6
12
 
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Fact is a symbol
4
+ Facter.add(:asym) do
5
+ setcode do
6
+ 'asym'
7
+ end
8
+ end
@@ -53,5 +53,17 @@ describe 'ghostbuster_facts' do
53
53
  expect(problems.size).to eq(0)
54
54
  end
55
55
  end
56
+
57
+ context 'when added fact is a symbol and unused' do
58
+ let(:path) { './spec/fixtures/modules/foo/lib/facter/asym.rb' }
59
+
60
+ it 'detects one problem' do
61
+ expect(problems.size).to eq(1)
62
+ end
63
+
64
+ it 'creates a warning' do
65
+ expect(problems).to contain_warning('Fact asym seems unused')
66
+ end
67
+ end
56
68
  end
57
69
  end
@@ -9,19 +9,19 @@ describe 'ghostbuster_hiera_files' do
9
9
 
10
10
  context 'with fix disabled' do
11
11
  context 'when a certname file is NOT used' do
12
- let(:path) { './hieradata/nodes/foo.example.com.yaml' }
12
+ let(:path) { './data/nodes/foo.example.com.yaml' }
13
13
 
14
14
  it 'detects one problem' do
15
15
  expect(problems.size).to eq(1)
16
16
  end
17
17
 
18
18
  it 'creates a warning' do
19
- expect(problems).to contain_warning('Hiera File nodes/foo.example.com.yaml seems unused')
19
+ expect(problems).to contain_warning("Hiera File #{path} seems unused")
20
20
  end
21
21
  end
22
22
 
23
23
  context 'when a certname file is used' do
24
- let(:path) { './hieradata/nodes/bar.example.com.yaml' }
24
+ let(:path) { './data/nodes/bar.example.com.yaml' }
25
25
 
26
26
  it 'does not detect any problem' do
27
27
  expect(problems.size).to eq(0)
@@ -29,19 +29,19 @@ describe 'ghostbuster_hiera_files' do
29
29
  end
30
30
 
31
31
  context 'when an environment file is NOT used' do
32
- let(:path) { './hieradata/environment/foo.yaml' }
32
+ let(:path) { './data/environment/foo.yaml' }
33
33
 
34
34
  it 'detects one problem' do
35
35
  expect(problems.size).to eq(1)
36
36
  end
37
37
 
38
38
  it 'creates a warning' do
39
- expect(problems).to contain_warning('Hiera File environment/foo.yaml seems unused')
39
+ expect(problems).to contain_warning("Hiera File #{path} seems unused")
40
40
  end
41
41
  end
42
42
 
43
43
  context 'when an environment file is used' do
44
- let(:path) { './hieradata/environment/production.yaml' }
44
+ let(:path) { './data/environment/production.yaml' }
45
45
 
46
46
  it 'does not detect any problem' do
47
47
  expect(problems.size).to eq(0)
@@ -49,31 +49,55 @@ describe 'ghostbuster_hiera_files' do
49
49
  end
50
50
 
51
51
  context 'when an fact is NOT used' do
52
- let(:path) { './hieradata/virtual/false.yaml' }
52
+ let(:path) { './data/virtual/false.yaml' }
53
53
 
54
54
  it 'detects one problem' do
55
55
  expect(problems.size).to eq(1)
56
56
  end
57
57
 
58
58
  it 'creates a warning' do
59
- expect(problems).to contain_warning('Hiera File virtual/false.yaml seems unused')
59
+ expect(problems).to contain_warning("Hiera File #{path} seems unused")
60
60
  end
61
61
  end
62
62
 
63
63
  context 'when an fact file is used' do
64
- let(:path) { './hieradata/virtual/true.yaml' }
64
+ let(:path) { './data/virtual/true.yaml' }
65
65
 
66
66
  it 'does not detect any problem' do
67
67
  expect(problems.size).to eq(0)
68
68
  end
69
69
  end
70
70
 
71
+ context 'when an fact file is used with wrong extension' do
72
+ let(:path) { './data/virtual/true.eyaml' }
73
+
74
+ it 'detects one problem' do
75
+ expect(problems.size).to eq(1)
76
+ end
77
+
78
+ it 'creates a warning' do
79
+ expect(problems).to contain_warning("Hiera File #{path} seems unused")
80
+ end
81
+ end
82
+
71
83
  context 'when using a variable in hierarchy' do
72
- let(:path) { './hieradata/domain/example.com.yaml' }
84
+ let(:path) { './data/domain/example.com.yaml' }
73
85
 
74
86
  it 'does not detect any problem' do
75
87
  expect(problems.size).to eq(0)
76
88
  end
77
89
  end
90
+
91
+ context 'when hierarchy datadir is NOT default and NOT used' do
92
+ let(:path) { './private/nodes/privates.example.com.eyaml' }
93
+
94
+ it 'detects one problem' do
95
+ expect(problems.size).to eq(1)
96
+ end
97
+
98
+ it 'creates a warning' do
99
+ expect(problems).to contain_warning("Hiera File #{path} seems unused")
100
+ end
101
+ end
78
102
  end
79
103
  end
data/spec/spec_helper.rb CHANGED
@@ -21,6 +21,7 @@ class PuppetDB::Client
21
21
  endpoint_cols = query.split('{').first
22
22
  endpoint = endpoint_cols.split(/[\s\[]/).first
23
23
  query.sub!(/^#{Regexp.quote(endpoint_cols)}\{\s*/, '')
24
+ query.sub!(/(group\s+by\s+(type|title))/, '')
24
25
  query.sub!(/\s*}\s*/, '')
25
26
  query.sub!(/(and\s+)?nodes\s*\{\s*deactivated\s+is\s+null\s*\}/, '')
26
27
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puppet-ghostbuster
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Camptocamp
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2024-01-08 00:00:00.000000000 Z
12
+ date: 2024-01-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: coveralls
@@ -119,14 +119,14 @@ dependencies:
119
119
  requirements:
120
120
  - - "~>"
121
121
  - !ruby/object:Gem::Version
122
- version: 2.2.0
122
+ version: 2.4.0
123
123
  type: :development
124
124
  prerelease: false
125
125
  version_requirements: !ruby/object:Gem::Requirement
126
126
  requirements:
127
127
  - - "~>"
128
128
  - !ruby/object:Gem::Version
129
- version: 2.2.0
129
+ version: 2.4.0
130
130
  - !ruby/object:Gem::Dependency
131
131
  name: json
132
132
  requirement: !ruby/object:Gem::Requirement
@@ -225,6 +225,7 @@ files:
225
225
  - README.md
226
226
  - Rakefile
227
227
  - lib/puppet-ghostbuster/puppetdb.rb
228
+ - lib/puppet-ghostbuster/util.rb
228
229
  - lib/puppet-ghostbuster/version.rb
229
230
  - lib/puppet-lint/plugins/check_ghostbuster_classes.rb
230
231
  - lib/puppet-lint/plugins/check_ghostbuster_defines.rb
@@ -236,6 +237,7 @@ files:
236
237
  - lib/puppet-lint/plugins/check_ghostbuster_types.rb
237
238
  - puppet-ghostbuster.gemspec
238
239
  - spec/fixtures/hiera.yaml
240
+ - spec/fixtures/modules/foo/lib/facter/asym.rb
239
241
  - spec/fixtures/modules/foo/lib/facter/bar.rb
240
242
  - spec/fixtures/modules/foo/lib/facter/baz.rb
241
243
  - spec/fixtures/modules/foo/lib/facter/foo.rb