puppet-syntax 2.4.1 → 2.4.2

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
- SHA1:
3
- metadata.gz: 8f3a393428ed2fa0c2d2bfcf1f540d80589d5d16
4
- data.tar.gz: 8a40d90b8a844849051064d8d3042bd568da95a0
2
+ SHA256:
3
+ metadata.gz: 5881bcc80736f1d0fa83276ba62c306e827839e94e6d6b124a5212b11430af15
4
+ data.tar.gz: 6140b85f3ae60a823157c763369ee81a5cf7bd3d06a2e8f6400aabc8240ca0e2
5
5
  SHA512:
6
- metadata.gz: 37e9b85d01f0ec31b29a6ecbbe264f3e6d714af42d83b1d7f08db735fbd7b09b058e516d639b976a4a6e6a097f7c87db82beeb4ee52a529f672599549284a45f
7
- data.tar.gz: 1786cccadd25ace8e001fdaa4bf4a0b0966ed90726709595f7a291020726754992857261b2f46fdee1032f9cb6c65f514e8d24ca5433891b9ed1234781fed997
6
+ metadata.gz: 1b545df2d01645001047e3dac3ad30d9c11a9003f0f8ea5011b519305cafb17a0cffdd8cd646500ab515bc79cbd876148763c24e3aa894a5ff500c35e5a07c9f
7
+ data.tar.gz: 97ca7f5db0a74bb98fa3447cb60660601d7455e6d8322d872208a402393684aba8060a86183e5fa857d4fcf2379487a5ecb08234ae50dd470654ad3017dcf5d7
data/.gitignore CHANGED
@@ -16,3 +16,4 @@ test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
18
  vendor/
19
+ .idea/
@@ -5,32 +5,15 @@ before_install: gem install bundler
5
5
  install: bundle install --jobs 4 --retry 2 --without development
6
6
  script: bundle exec rake
7
7
  rvm:
8
- - 1.9.3
9
- - 2.1.6
10
- - 2.2.6
11
- - 2.3.3
12
- - 2.4.0
8
+ - 2.4.4
9
+ - 2.5.1
13
10
  env:
14
- - PUPPET_VERSION="~> 3.8.7"
15
- - PUPPET_VERSION="~> 4.8.0"
16
- - PUPPET_VERSION="~> 4.9.0"
11
+ - PUPPET_VERSION="~> 5.5.10"
12
+ - PUPPET_VERSION="~> 6.1.0"
13
+ - PUPPET_VERSION="~> 6.2.0"
17
14
  - PUPPET_VERSION=">= 0"
18
15
  - PUPPET_VERSION="git://github.com/puppetlabs/puppet.git#master"
19
16
  matrix:
20
- exclude:
21
- - env: PUPPET_VERSION="~> 3.8.7"
22
- rvm: 2.2.6
23
- - env: PUPPET_VERSION="~> 3.8.7"
24
- rvm: 2.3.3
25
- - env: PUPPET_VERSION="~> 3.8.7"
26
- rvm: 2.4.0
27
- # 4.9 with Ruby 1.9.3 issues deprecation warnings
28
- - env: PUPPET_VERSION="~> 4.9.0"
29
- rvm: 1.9.3
30
- - env: PUPPET_VERSION=">= 0"
31
- rvm: 1.9.3
32
- - env: PUPPET_VERSION="git://github.com/puppetlabs/puppet.git#master"
33
- rvm: 1.9.3
34
17
  allow_failures:
35
18
  - env: PUPPET_VERSION=">= 0"
36
19
  - env: PUPPET_VERSION="git://github.com/puppetlabs/puppet.git#master"
@@ -40,8 +23,8 @@ deploy:
40
23
  secure: "kwxryZZ/t9EkWuYxhz3G1v+U3ZK4WdsiN0UFHDjijnAGPxqe/n+oBcNA8hOiNhjZeTFo8bADEZkL7JtdKQo9RvgStipyaS5gDHB/C1c4LOBWv4Tga21NNCAuBcE2CDtAH3+TzrZV5vv2+SpOrhKZpzZoAoR6PR1MWVWMUie/rE0="
41
24
  gem: puppet-syntax
42
25
  on:
43
- rvm: 2.4.0
44
- condition: '"$PUPPET_VERSION" = "~> 4.8.0"'
26
+ rvm: 2.5.1
27
+ condition: '"$PUPPET_VERSION" = "~> 5.5.10"'
45
28
  tags: true
46
29
  all_branches: true
47
30
  repo: voxpupuli/puppet-syntax
data/CHANGELOG CHANGED
@@ -1,3 +1,9 @@
1
+ 2019-02-02 Release 2.4.2
2
+ - Search manifests in manifests directory
3
+ - Allow .yml as an extension for YAML files.
4
+ - Ensure the pkg directory is always excluded
5
+ - Check consistency of ENC blobs in eyaml data
6
+
1
7
  2017-06-29 Release 2.4.1
2
8
  - Fix to ensure namespace scope is inherited.
3
9
  - Cleanly exits when syntax warnings/errors are found instead of failing.
@@ -8,9 +8,9 @@ module PuppetSyntax
8
8
  @exclude_paths = []
9
9
  @future_parser = false
10
10
  @hieradata_paths = [
11
- "**/data/**/*.*yaml",
12
- "hieradata/**/*.*yaml",
13
- "hiera*.*yaml"
11
+ "**/data/**/*.*{yaml,yml}",
12
+ "hieradata/**/*.*{yaml,yml}",
13
+ "hiera*.*{yaml,yml}"
14
14
  ]
15
15
  @fail_on_deprecation_notices = true
16
16
  @app_management = Puppet.version.to_i >= 5 ? true : false
@@ -1,4 +1,5 @@
1
1
  require 'yaml'
2
+ require 'base64'
2
3
 
3
4
  module PuppetSyntax
4
5
  class Hiera
@@ -20,6 +21,53 @@ module PuppetSyntax
20
21
  end
21
22
  end
22
23
 
24
+ # Recurse through complex data structures. Return on first error.
25
+ def check_eyaml_data(name, val)
26
+ error = nil
27
+ if val.is_a? String
28
+ err = check_eyaml_blob(val)
29
+ error = "Key #{name} #{err}" if err
30
+ elsif val.is_a? Array
31
+ val.each_with_index do |v, idx|
32
+ error = check_eyaml_data("#{name}[#{idx}]", v)
33
+ break if error
34
+ end
35
+ elsif val.is_a? Hash
36
+ val.each do |k,v|
37
+ error = check_eyaml_data("#{name}['#{k}']", v)
38
+ break if error
39
+ end
40
+ end
41
+ error
42
+ end
43
+
44
+ def check_eyaml_blob(val)
45
+ return unless val =~ /^ENC\[/
46
+
47
+ val.sub!('ENC[', '')
48
+ val.gsub!(/\s+/, '')
49
+ if val !~ /\]$/
50
+ return "has unterminated eyaml value"
51
+ else
52
+ val.sub!(/\]$/, '')
53
+ method, base64 = val.split(/,/)
54
+ if base64 == nil
55
+ base64 = method
56
+ method = 'PKCS7'
57
+ end
58
+
59
+ return "has unknown eyaml method #{method}" unless ['PKCS7','GPG'].include? method
60
+ return "has unpadded or truncated base64 data" unless base64.length % 4 == 0
61
+
62
+ # Base64#decode64 will silently ignore characters outside the alphabet,
63
+ # so we check resulting length of binary data instead
64
+ pad_length = base64.gsub(/[^=]/, '').length
65
+ if Base64.decode64(base64).length != base64.length * 3/4 - pad_length
66
+ return "has corrupt base64 data"
67
+ end
68
+ end
69
+ end
70
+
23
71
  def check(filelist)
24
72
  raise "Expected an array of files" unless filelist.is_a?(Array)
25
73
 
@@ -38,6 +86,8 @@ module PuppetSyntax
38
86
  key_msg = check_hiera_key(k)
39
87
  errors << "WARNING: #{hiera_file}: Key :#{k}: #{key_msg}" if key_msg
40
88
  end
89
+ eyaml_msg = check_eyaml_data(k, v)
90
+ errors << "WARNING: #{hiera_file}: #{eyaml_msg}" if eyaml_msg
41
91
  end
42
92
  end
43
93
  end
@@ -5,13 +5,15 @@ require 'rake/tasklib'
5
5
  module PuppetSyntax
6
6
  class RakeTask < ::Rake::TaskLib
7
7
  def filelist(paths)
8
+ excludes = PuppetSyntax.exclude_paths
9
+ excludes.push('pkg/**/*')
8
10
  files = FileList[paths]
9
11
  files.reject! { |f| File.directory?(f) }
10
- files.exclude(*PuppetSyntax.exclude_paths)
12
+ files.exclude(*excludes)
11
13
  end
12
14
 
13
15
  def filelist_manifests
14
- filelist("**/*.pp")
16
+ filelist("**/manifests/**/*.pp")
15
17
  end
16
18
 
17
19
  def filelist_templates
@@ -1,3 +1,3 @@
1
1
  module PuppetSyntax
2
- VERSION = "2.4.1"
2
+ VERSION = "2.4.2"
3
3
  end
@@ -0,0 +1,24 @@
1
+ ---
2
+ acme::warning1: ENC[unknown-method,aGVsbG8sIHdvcmxk]
3
+ acme::warning2: ENC[PKCS7,aGVsbG8sIHdvcmxk
4
+ acme::warning3: ENC[PKCS7,aGVsbG8sIHdvcmxk==]
5
+ acme::warning4: ENC[PKCS7,aGVs!!!!bG8sIHdvcmxk]
6
+ acme::warning5:
7
+ key1: foo
8
+ key2: ENC[PKCS7,aGVs!!!!bG8sIHdvcmxk]
9
+ acme::warning6:
10
+ hash_key:
11
+ - element1
12
+ - >
13
+ ENC[PKCS7,
14
+ aGVsbG8sIHdvcmxk
15
+ ]
16
+ - >
17
+ ENC[PKCS7,
18
+ aGVs!!!!bG8sIHdvcmxk
19
+ ]
20
+ acme::good1: >
21
+ ENC[PKCS7,
22
+ aGVsbG8sIHdvcmxk]
23
+ acme::good2: ENC[GPG,aGVsbG8sIHdvcmxkIQ==]
24
+ acme::good3: ENC[GPG,aGVsbG8sIHdvcmxkISE=]
@@ -43,6 +43,23 @@ describe PuppetSyntax::Hiera do
43
43
  expect(res[4]).to match('Key :picky::warning5: Puppet automatic lookup will not look up symbols')
44
44
  end
45
45
 
46
+ it "should return warnings for bad eyaml values" do
47
+ hiera_yaml = 'hiera_bad.eyaml'
48
+ examples = 6
49
+ files = fixture_hiera(hiera_yaml)
50
+ res = subject.check(files)
51
+ (1..examples).each do |n|
52
+ expect(res).to include(/::warning#{n}/)
53
+ end
54
+ expect(res.size).to be == examples
55
+ expect(res[0]).to match('Key acme::warning1 has unknown eyaml method unknown-method')
56
+ expect(res[1]).to match('Key acme::warning2 has unterminated eyaml value')
57
+ expect(res[2]).to match('Key acme::warning3 has unpadded or truncated base64 data')
58
+ expect(res[3]).to match('Key acme::warning4 has corrupt base64 data')
59
+ expect(res[4]).to match('Key acme::warning5\[\'key2\'\] has corrupt base64 data')
60
+ expect(res[5]).to match('Key acme::warning6\[\'hash_key\'\]\[2\] has corrupt base64 data')
61
+ end
62
+
46
63
  it "should handle empty files" do
47
64
  hiera_yaml = 'hiera_key_empty.yaml'
48
65
  files = fixture_hiera(hiera_yaml)
@@ -74,8 +74,8 @@ describe PuppetSyntax::Manifests do
74
74
  expect(has_errors).to eq(true)
75
75
  if Puppet.version.to_i >= 4
76
76
  expect(output.size).to eq(5)
77
- expect(output[0]).to match(/This Name has no effect. A Host Class Definition can not end with a value-producing expression without other effect at \S*\/fail_error.pp:2:32$/)
78
- expect(output[1]).to match(/This Name has no effect. A value(-producing expression without other effect may only be placed last in a block\/sequence| was produced and then forgotten.*) at \S*\/fail_error.pp:2:3$/)
77
+ expect(output[0]).to match(/This Name has no effect. A Host Class Definition can not end with a value-producing expression without other effect \(file: \S*\/fail_error.pp, line: 2, column: 32\)$/)
78
+ expect(output[1]).to match(/This Name has no effect. A value was produced and then forgotten \(one or more preceding expressions may have the wrong form\) \(file: \S*\/fail_error.pp, line: 2, column: 3\)$/)
79
79
  expect(output[2]).to match('2 errors. Giving up')
80
80
  expect(output[3]).to match(/Unrecogni(s|z)ed escape sequence '\\\['/)
81
81
  expect(output[4]).to match(/Unrecogni(s|z)ed escape sequence '\\\]'/)
@@ -35,21 +35,4 @@ describe 'PuppetSyntax rake tasks' do
35
35
  expect(list).to include(known_eyaml_subdir)
36
36
  expect(list.count).to eq 4
37
37
  end
38
-
39
- it 'should check manifests relative to Rakefile' do
40
- if RSpec::Version::STRING < '3'
41
- pending
42
- else
43
- skip('needs to be done')
44
- end
45
- end
46
-
47
- it 'should check templates relative to Rakefile' do
48
- if RSpec::Version::STRING < '3'
49
- pending
50
- else
51
- skip('needs to be done')
52
- end
53
- end
54
-
55
38
  end
@@ -117,7 +117,7 @@ describe PuppetSyntax::Templates do
117
117
 
118
118
  expect(res.size).to eq(2)
119
119
  expect(res[0]).to match(/This Type-Name has no effect/)
120
- expect(res[1]).to match(/Syntax error at '}' at \S*\/fail_error_also.epp:2:4/)
120
+ expect(res[1]).to match(/Syntax error at '}' \(file: \S*\/fail_error_also.epp, line: 2, column: 4\)/)
121
121
  end
122
122
 
123
123
  context "when the 'epp_only' options is set" do
@@ -6,8 +6,8 @@ describe PuppetSyntax do
6
6
  PuppetSyntax.app_management = false if Puppet.version.to_i < 5
7
7
  end
8
8
 
9
- it 'should default exclude_paths to empty array' do
10
- expect(PuppetSyntax.exclude_paths).to be_empty
9
+ it 'should default exclude_paths to include the pkg directory' do
10
+ expect(PuppetSyntax.exclude_paths).to include('pkg/**/*')
11
11
  end
12
12
 
13
13
  it 'should support setting exclude_paths' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puppet-syntax
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.1
4
+ version: 2.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vox Pupuli
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-29 00:00:00.000000000 Z
11
+ date: 2019-02-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -80,7 +80,6 @@ files:
80
80
  - LICENSE.txt
81
81
  - README.md
82
82
  - Rakefile
83
- - appveyor.yml
84
83
  - jenkins.sh
85
84
  - lib/puppet-syntax.rb
86
85
  - lib/puppet-syntax/hiera.rb
@@ -93,6 +92,7 @@ files:
93
92
  - spec/fixtures/hiera/data/hiera_2.eyaml
94
93
  - spec/fixtures/hiera/data/test/hiera_3.yaml
95
94
  - spec/fixtures/hiera/data/test/hiera_4.eyaml
95
+ - spec/fixtures/hiera/hiera_bad.eyaml
96
96
  - spec/fixtures/hiera/hiera_bad.yaml
97
97
  - spec/fixtures/hiera/hiera_bad_18.yaml
98
98
  - spec/fixtures/hiera/hiera_badkey.yaml
@@ -141,8 +141,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
141
141
  - !ruby/object:Gem::Version
142
142
  version: '0'
143
143
  requirements: []
144
- rubyforge_project:
145
- rubygems_version: 2.6.11
144
+ rubygems_version: 3.0.2
146
145
  signing_key:
147
146
  specification_version: 4
148
147
  summary: Syntax checks for Puppet manifests, templates, and Hiera YAML
@@ -151,6 +150,7 @@ test_files:
151
150
  - spec/fixtures/hiera/data/hiera_2.eyaml
152
151
  - spec/fixtures/hiera/data/test/hiera_3.yaml
153
152
  - spec/fixtures/hiera/data/test/hiera_4.eyaml
153
+ - spec/fixtures/hiera/hiera_bad.eyaml
154
154
  - spec/fixtures/hiera/hiera_bad.yaml
155
155
  - spec/fixtures/hiera/hiera_bad_18.yaml
156
156
  - spec/fixtures/hiera/hiera_badkey.yaml
@@ -1,38 +0,0 @@
1
- build: off
2
-
3
- branches:
4
- only:
5
- - master
6
-
7
- # ruby versions under test
8
- environment:
9
- matrix:
10
- - RUBY_VERSION: 21
11
- PUPPET_VERSION: "~> 3.8.7"
12
- - RUBY_VERSION: 21
13
- PUPPET_VERSION: "~> 4.8.0"
14
- - RUBY_VERSION: 23-x64
15
- PUPPET_VERSION: "~> 4.9.0"
16
- - RUBY_VERSION: 23-x64
17
- PUPPET_VERSION: "> 0"
18
- - RUBY_VERSION: 23-x64
19
- PUPPET_VERSION: "git://github.com/puppetlabs/puppet.git#master"
20
-
21
- matrix:
22
- allow_failures:
23
- - RUBY_VERSION: 23-x64
24
- PUPPET_VERSION: "git://github.com/puppetlabs/puppet.git#master"
25
-
26
- install:
27
- - SET PATH=C:\Ruby%RUBY_VERSION%\bin;%PATH%
28
- - SET LOG_SPEC_ORDER=true
29
- - bundle install --jobs 4 --retry 2 --without development
30
-
31
- before_test:
32
- - type Gemfile.lock
33
- - ruby -v
34
- - gem -v
35
- - bundle -v
36
-
37
- test_script:
38
- - bundle exec rake spec