puppet-syntax 2.4.1 → 2.4.2

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