puppet-lint-recurse_file-check 0.1.1 → 0.2.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/.gitignore +1 -0
- data/.rubocop.yml +37 -0
- data/Gemfile +14 -6
- data/Rakefile +3 -1
- data/lib/puppet-lint/plugins/recurse_file.rb +30 -10
- data/puppet-lint-recurse_file-check.gemspec +5 -5
- data/spec/puppet-lint/plugins/recurse_file_spec.rb +79 -32
- data/spec/spec_helper.rb +2 -0
- metadata +8 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7c6c735a24e0dd891461df7b40c7e807d39029c5cf2b12a0e697da29c1d197d4
|
4
|
+
data.tar.gz: 23cf243f5f520573574d1bed25f20a05594a16fd13a0a3b37c46ee6675604959
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: db3ed6c3cf8dacecce87a06b1f2c7e01a45c5c642a8d6537789c73d455bc751d0ec682b6fe64f6b72dccb5779f29c5a54f7f82a18d45ed2c9b3253233efbbc8b
|
7
|
+
data.tar.gz: 7fbbf9ab4dc8874f6c64d190b5b7f0a999c291abd4e39aba0512e5df7001f223de54fd2c164405e51d85f4ba0e461eb97c3776a5f48aa9ca540cf4aea91af29c
|
data/.gitignore
CHANGED
data/.rubocop.yml
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
---
|
2
|
+
require:
|
3
|
+
- rubocop-rake
|
4
|
+
- rubocop-rspec
|
5
|
+
AllCops:
|
6
|
+
NewCops: disable
|
7
|
+
DisplayCopNames: true
|
8
|
+
Include:
|
9
|
+
- "**/*.rb"
|
10
|
+
- "*.gemspec"
|
11
|
+
Exclude:
|
12
|
+
- bin/*
|
13
|
+
- ".vendor/**/*"
|
14
|
+
- "**/Gemfile"
|
15
|
+
- "**/Rakefile"
|
16
|
+
- pkg/**/*
|
17
|
+
- spec/fixtures/**/*
|
18
|
+
- vendor/**/*
|
19
|
+
- "**/Puppetfile"
|
20
|
+
- "**/Vagrantfile"
|
21
|
+
- "**/Guardfile"
|
22
|
+
Gemspec/RequiredRubyVersion:
|
23
|
+
Enabled: false
|
24
|
+
Metrics/MethodLength:
|
25
|
+
Enabled: false
|
26
|
+
Metrics/BlockLength:
|
27
|
+
Enabled: false
|
28
|
+
RSpec/DescribeClass:
|
29
|
+
Enabled: false
|
30
|
+
RSpec/MultipleExpectations:
|
31
|
+
Max: 4
|
32
|
+
Metrics/AbcSize:
|
33
|
+
Enabled: false
|
34
|
+
Metrics/CyclomaticComplexity:
|
35
|
+
Enabled: false
|
36
|
+
Metrics/PerceivedComplexity:
|
37
|
+
Enabled: false
|
data/Gemfile
CHANGED
@@ -1,17 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
source 'https://rubygems.org'
|
2
4
|
|
3
5
|
gemspec
|
4
6
|
|
5
7
|
group :test do
|
6
|
-
gem 'rake', '~> 10.0'
|
7
|
-
gem 'rspec-its', '~> 1.0'
|
8
|
-
gem 'rspec-collection_matchers', '~> 1.0'
|
9
|
-
gem 'rspec', '~> 3.0'
|
10
8
|
gem 'json'
|
9
|
+
gem 'rake', '>= 12.3.3'
|
10
|
+
gem 'rspec', '>= 3.0'
|
11
|
+
gem 'rspec-collection_matchers', '>= 1.0'
|
12
|
+
gem 'rspec-its', '>= 1.0'
|
11
13
|
gem 'rubocop'
|
12
|
-
gem '
|
14
|
+
gem 'rubocop-rspec'
|
15
|
+
gem 'rubocop-rake'
|
16
|
+
gem 'simplecov', require: false
|
13
17
|
end
|
14
18
|
|
15
19
|
group :development do
|
16
|
-
gem 'github_changelog_generator',
|
20
|
+
gem 'github_changelog_generator', require: false if RUBY_VERSION >= '2.2.2'
|
21
|
+
end
|
22
|
+
|
23
|
+
if File.file?('Gemfile.local') && File.readable?('Gemfile.local')
|
24
|
+
eval(File.read('Gemfile.local'), binding)
|
17
25
|
end
|
data/Rakefile
CHANGED
@@ -1,26 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# Public: Check the tokens of each File resource instance for a recurse
|
2
4
|
# true parameter and if found, record a warning about the potential
|
3
5
|
# performance impact.
|
4
6
|
#
|
5
7
|
# https://puppet.com/docs/puppet/latest/types/file.html#file-attribute-recurse
|
6
8
|
PuppetLint.new_check(:recurse_file) do
|
7
|
-
|
8
9
|
def check
|
9
10
|
resource_indexes.each do |resource|
|
10
11
|
next unless resource[:type].value == 'file'
|
11
12
|
|
12
|
-
resource[:param_tokens].select
|
13
|
-
param_token.value
|
14
|
-
|
15
|
-
|
13
|
+
param_tokens = resource[:param_tokens].select do |param_token|
|
14
|
+
%w[recurse max_files].include? param_token.value
|
15
|
+
end
|
16
|
+
|
17
|
+
recurse = param_tokens.find do |t|
|
18
|
+
t.value == 'recurse' and %w[true remote].include? t.next_code_token.next_code_token.value
|
19
|
+
end
|
20
|
+
|
21
|
+
next if recurse.nil?
|
16
22
|
|
17
|
-
|
23
|
+
max_files = param_tokens.find do |t|
|
24
|
+
t.value == 'max_files'
|
25
|
+
end
|
26
|
+
|
27
|
+
if max_files.nil?
|
28
|
+
value_token = recurse.next_code_token.next_code_token
|
29
|
+
notify(
|
30
|
+
:warning,
|
31
|
+
message: 'Unbounded recurse file resources can cause decreased performance. See "max_files"',
|
32
|
+
line: value_token.line,
|
33
|
+
column: value_token.column,
|
34
|
+
token: value_token
|
35
|
+
)
|
36
|
+
elsif ['0', '-1'].include? max_files.next_code_token.next_code_token.value
|
37
|
+
value_token = max_files.next_code_token.next_code_token
|
18
38
|
notify(
|
19
39
|
:warning,
|
20
|
-
:
|
21
|
-
:
|
22
|
-
:
|
23
|
-
:
|
40
|
+
message: 'Disabling warnings in recurse file resources using "max_files" is not recommended',
|
41
|
+
line: value_token.line,
|
42
|
+
column: value_token.column,
|
43
|
+
token: value_token
|
24
44
|
)
|
25
45
|
end
|
26
46
|
end
|
@@ -1,6 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
Gem::Specification.new do |s|
|
2
4
|
s.name = 'puppet-lint-recurse_file-check'
|
3
|
-
s.version = '0.
|
5
|
+
s.version = '0.2.0'
|
4
6
|
s.homepage = 'https://github.com/jarretlavallee/puppet-lint-recurse_file-check'
|
5
7
|
s.license = 'MIT'
|
6
8
|
s.author = 'Jarret Lavallee'
|
@@ -8,9 +10,7 @@ Gem::Specification.new do |s|
|
|
8
10
|
s.files = `git ls-files`.split("\n")
|
9
11
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
10
12
|
s.summary = 'puppet-lint recurse_file check'
|
11
|
-
s.description =
|
12
|
-
Extends puppet-lint to ensure file resources do not have recurse enabled.
|
13
|
-
EOF
|
13
|
+
s.description = 'Extends puppet-lint to ensure file resources do not have recurse enabled.'
|
14
14
|
|
15
|
-
s.add_dependency
|
15
|
+
s.add_dependency 'puppet-lint', '>= 1.1', '< 3.0'
|
16
16
|
end
|
@@ -1,39 +1,86 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe 'recurse_file' do
|
4
|
-
let(:msg) { 'recurse file resources can cause decreased performance' }
|
6
|
+
let(:msg) { 'Unbounded recurse file resources can cause decreased performance. See "max_files"' }
|
7
|
+
let(:maxfilesmsg) { 'Disabling warnings in recurse file resources using "max_files" is not recommended' }
|
8
|
+
|
9
|
+
context 'when recurse is enabled' do
|
10
|
+
let(:code) { "file { 'foo': recurse => true }" }
|
11
|
+
|
12
|
+
it 'detects a single problem' do
|
13
|
+
expect(problems).to have(1).problem
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'creates a warning' do
|
17
|
+
expect(problems).to contain_warning(msg).on_line(1).in_column(26)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'when recurse is remote' do
|
22
|
+
let(:code) { "file { 'foo': recurse => 'remote' }" }
|
23
|
+
|
24
|
+
it 'detects a single problem' do
|
25
|
+
expect(problems).to have(1).problem
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'creates a warning' do
|
29
|
+
expect(problems).to contain_warning(msg).on_line(1).in_column(26)
|
30
|
+
end
|
31
|
+
end
|
5
32
|
|
6
|
-
|
7
|
-
|
33
|
+
context 'when recurse is enabled with max_files set to a number' do
|
34
|
+
let(:code) { "file { 'foo': recurse => 'remote', max_files => 10 }" }
|
8
35
|
|
9
|
-
|
10
|
-
|
11
|
-
|
36
|
+
it 'does not detect any problems' do
|
37
|
+
expect(problems).to have(0).problem
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context 'when recurse is enabled with max_files set to "0"' do
|
42
|
+
let(:code) { "file { 'foo': recurse => 'remote', max_files => 0 }" }
|
43
|
+
|
44
|
+
it 'detects a single problem' do
|
45
|
+
expect(problems).to have(1).problem
|
46
|
+
end
|
12
47
|
|
13
|
-
|
14
|
-
|
15
|
-
end
|
48
|
+
it 'creates a warning' do
|
49
|
+
expect(problems).to contain_warning(maxfilesmsg).on_line(1).in_column(49)
|
16
50
|
end
|
51
|
+
end
|
52
|
+
|
53
|
+
context 'when recurse is enabled with max_files set to "-1"' do
|
54
|
+
let(:code) { "file { 'foo': recurse => 'remote', max_files => '-1' }" }
|
17
55
|
|
18
|
-
|
19
|
-
|
56
|
+
it 'detects a single problem' do
|
57
|
+
expect(problems).to have(1).problem
|
58
|
+
end
|
20
59
|
|
21
|
-
|
22
|
-
|
23
|
-
end
|
60
|
+
it 'creates a warning' do
|
61
|
+
expect(problems).to contain_warning(maxfilesmsg).on_line(1).in_column(49)
|
24
62
|
end
|
63
|
+
end
|
25
64
|
|
26
|
-
|
27
|
-
|
65
|
+
context 'when recurse is disabled' do
|
66
|
+
let(:code) { "file { 'foo': recurse => false }" }
|
28
67
|
|
29
|
-
|
30
|
-
|
31
|
-
end
|
68
|
+
it 'does not detect any problems' do
|
69
|
+
expect(problems).to have(0).problems
|
32
70
|
end
|
71
|
+
end
|
33
72
|
|
34
|
-
|
35
|
-
|
36
|
-
|
73
|
+
context 'when recurse is not defined' do
|
74
|
+
let(:code) { "file { 'foo': }" }
|
75
|
+
|
76
|
+
it 'does not detect any problems' do
|
77
|
+
expect(problems).to have(0).problems
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
context 'with multi body file recurse selector' do
|
82
|
+
let(:code) do
|
83
|
+
<<-MANIFEST
|
37
84
|
file {
|
38
85
|
'/tmp/foo1':
|
39
86
|
ensure => $foo ? { default => absent },
|
@@ -43,17 +90,17 @@ describe 'recurse_file' do
|
|
43
90
|
'/tmp/foo3':
|
44
91
|
recurse => true;
|
45
92
|
}
|
46
|
-
|
47
|
-
|
93
|
+
MANIFEST
|
94
|
+
end
|
48
95
|
|
49
|
-
|
50
|
-
|
51
|
-
|
96
|
+
it 'detects 3 problems' do
|
97
|
+
expect(problems).to have(3).problems
|
98
|
+
end
|
52
99
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
end
|
100
|
+
it 'creates three warnings' do
|
101
|
+
expect(problems).to contain_warning(sprintf(msg)).on_line(4).in_column(26)
|
102
|
+
expect(problems).to contain_warning(sprintf(msg)).on_line(6).in_column(26)
|
103
|
+
expect(problems).to contain_warning(sprintf(msg)).on_line(8).in_column(26)
|
58
104
|
end
|
105
|
+
end
|
59
106
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: puppet-lint-recurse_file-check
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jarret Lavallee
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-11-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: puppet-lint
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: '3.0'
|
33
|
-
description:
|
34
|
-
enabled.\n"
|
33
|
+
description: Extends puppet-lint to ensure file resources do not have recurse enabled.
|
35
34
|
email: jarret.lavallee@gmail.com
|
36
35
|
executables: []
|
37
36
|
extensions: []
|
38
37
|
extra_rdoc_files: []
|
39
38
|
files:
|
40
39
|
- ".gitignore"
|
40
|
+
- ".rubocop.yml"
|
41
41
|
- ".travis.yml"
|
42
42
|
- Gemfile
|
43
43
|
- LICENSE
|
@@ -51,7 +51,7 @@ homepage: https://github.com/jarretlavallee/puppet-lint-recurse_file-check
|
|
51
51
|
licenses:
|
52
52
|
- MIT
|
53
53
|
metadata: {}
|
54
|
-
post_install_message:
|
54
|
+
post_install_message:
|
55
55
|
rdoc_options: []
|
56
56
|
require_paths:
|
57
57
|
- lib
|
@@ -66,9 +66,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
66
66
|
- !ruby/object:Gem::Version
|
67
67
|
version: '0'
|
68
68
|
requirements: []
|
69
|
-
|
70
|
-
|
71
|
-
signing_key:
|
69
|
+
rubygems_version: 3.1.4
|
70
|
+
signing_key:
|
72
71
|
specification_version: 4
|
73
72
|
summary: puppet-lint recurse_file check
|
74
73
|
test_files:
|