puppet-syntax 1.0.0 → 1.1.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.
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ 2013-09-06 Release 1.1.0
2
+ - Syntax checks for Hiera YAML files.
3
+ - Improved documentation.
4
+
1
5
  2013-07-04 Release 1.0.0
2
6
  - Refactor code to make it easier to test.
3
7
  - Implement spec tests for syntax checks.
data/README.md CHANGED
@@ -1,6 +1,16 @@
1
1
  # Puppet::Syntax
2
2
 
3
- Syntax checks for Puppet manifests and templates
3
+ Syntax checks for Puppet manifests and templates.
4
+
5
+ ## Version support
6
+
7
+ This should work on any version of:
8
+
9
+ - Puppet >= 2.7 that provides the `validate` face.
10
+ - Ruby >= 1.8 with `erb` from stdlib.
11
+
12
+ You can see the matrix of specific versions that we currently test against
13
+ in the [TravisCI config](.travis.yml).
4
14
 
5
15
  ## Usage
6
16
 
@@ -23,6 +33,14 @@ A non-zero exit code and error message will be returned for any failures:
23
33
  Tasks: TOP => syntax => syntax:manifests
24
34
  (See full trace by running task with --trace)
25
35
 
36
+ Use in conjunction with lint and spec tests for Continuous Integration:
37
+
38
+ task :test => [
39
+ :syntax,
40
+ :lint,
41
+ :spec,
42
+ ]
43
+
26
44
  ## Configuration
27
45
 
28
46
  Paths can be excluded with:
data/lib/puppet-syntax.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require "puppet-syntax/version"
2
2
  require "puppet-syntax/manifests"
3
3
  require "puppet-syntax/templates"
4
+ require "puppet-syntax/hiera"
4
5
 
5
6
  module PuppetSyntax
6
7
  class << self
@@ -0,0 +1,23 @@
1
+ require 'yaml'
2
+
3
+ module PuppetSyntax
4
+ class Hiera
5
+ def check(filelist)
6
+ raise "Expected an array of files" unless filelist.is_a?(Array)
7
+
8
+ errors = []
9
+
10
+ filelist.each do |hiera_file|
11
+ begin
12
+ YAML.load_file(hiera_file)
13
+ rescue Exception => error
14
+ errors << error
15
+ end
16
+ end
17
+
18
+ errors.map! { |e| e.to_s }
19
+
20
+ errors
21
+ end
22
+ end
23
+ end
@@ -9,6 +9,7 @@ module PuppetSyntax
9
9
  task :syntax => [
10
10
  'syntax:manifests',
11
11
  'syntax:templates',
12
+ 'syntax:hiera',
12
13
  ]
13
14
 
14
15
  namespace :syntax do
@@ -35,6 +36,24 @@ module PuppetSyntax
35
36
  errors = c.check(files)
36
37
  fail errors.join("\n") unless errors.empty?
37
38
  end
39
+
40
+ desc 'Syntax check Hiera config files'
41
+ task :hiera => [
42
+ 'syntax:hiera:yaml',
43
+ ]
44
+
45
+ namespace :hiera do
46
+ task :yaml do |t|
47
+ $stderr.puts "---> #{t.name}"
48
+ files = FileList["hieradata/**/*.yaml", "hiera*.yaml"]
49
+ files.reject! { |f| File.directory?(f) }
50
+ files = files.exclude(*PuppetSyntax.exclude_paths)
51
+
52
+ c = PuppetSyntax::Hiera.new
53
+ errors = c.check(files)
54
+ fail errors.join("\n") unless errors.empty?
55
+ end
56
+ end
38
57
  end
39
58
  end
40
59
  end
@@ -1,3 +1,3 @@
1
1
  module PuppetSyntax
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.0"
3
3
  end
@@ -0,0 +1 @@
1
+ %YAMLBAD
@@ -0,0 +1,3 @@
1
+ ---
2
+ !!!str
3
+ foo
@@ -0,0 +1,7 @@
1
+ ---
2
+ :backends:
3
+ - yaml
4
+ :yaml:
5
+ :datadir: './hieradata/good'
6
+ :hierarchy:
7
+ - common
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ describe PuppetSyntax::Hiera do
4
+ let(:subject) { PuppetSyntax::Hiera.new }
5
+
6
+ it 'should expect an array of files' do
7
+ expect { subject.check(nil) }.to raise_error(/Expected an array of files/)
8
+ end
9
+
10
+ it "should return nothing from valid YAML" do
11
+ files = fixture_hiera('hiera_good.yaml')
12
+ res = subject.check(files)
13
+ expect(res).to be == []
14
+ end
15
+
16
+ it "should return an error from invalid YAML" do
17
+ case RUBY_VERSION
18
+ when /1.8/
19
+ files = fixture_hiera('hiera_bad_18.yaml')
20
+ expected = /syntax error on line 3, col -1: `'/
21
+ else
22
+ files = fixture_hiera('hiera_bad.yaml')
23
+ expected = /scanning a directive at line 1 column 1/
24
+ end
25
+ res = subject.check(files)
26
+ expect(res.size).to be == 1
27
+ expect(res.first).to match(expected)
28
+ end
29
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,17 +1,21 @@
1
1
  require 'rspec'
2
2
  require 'puppet-syntax'
3
3
 
4
+ def fixture_hiera(list)
5
+ fixture_files(list, 'hiera')
6
+ end
7
+
4
8
  def fixture_templates(list)
5
- fixture_files(list, 'templates')
9
+ fixture_files(list, 'test_module/templates')
6
10
  end
7
11
 
8
12
  def fixture_manifests(list)
9
- fixture_files(list, 'manifests')
13
+ fixture_files(list, 'test_module/manifests')
10
14
  end
11
15
 
12
16
  def fixture_files(list, path)
13
17
  list = [list].flatten
14
- list.map { |f| File.expand_path("../fixtures/test_module/#{path}/#{f}", __FILE__) }
18
+ list.map { |f| File.expand_path("../fixtures/#{path}/#{f}", __FILE__) }
15
19
  end
16
20
 
17
21
  RSpec.configure do |config|
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puppet-syntax
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-07-04 00:00:00.000000000 Z
12
+ date: 2013-09-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -106,11 +106,15 @@ files:
106
106
  - README.md
107
107
  - Rakefile
108
108
  - lib/puppet-syntax.rb
109
+ - lib/puppet-syntax/hiera.rb
109
110
  - lib/puppet-syntax/manifests.rb
110
111
  - lib/puppet-syntax/tasks/puppet-syntax.rb
111
112
  - lib/puppet-syntax/templates.rb
112
113
  - lib/puppet-syntax/version.rb
113
114
  - puppet-syntax.gemspec
115
+ - spec/fixtures/hiera/hiera_bad.yaml
116
+ - spec/fixtures/hiera/hiera_bad_18.yaml
117
+ - spec/fixtures/hiera/hiera_good.yaml
114
118
  - spec/fixtures/test_module/manifests/fail_error.pp
115
119
  - spec/fixtures/test_module/manifests/fail_warning.pp
116
120
  - spec/fixtures/test_module/manifests/pass.pp
@@ -119,6 +123,7 @@ files:
119
123
  - spec/fixtures/test_module/templates/fail_warning.erb
120
124
  - spec/fixtures/test_module/templates/pass.erb
121
125
  - spec/fixtures/test_module/templates/pass_unbound_var.erb
126
+ - spec/puppet-syntax/hiera_spec.rb
122
127
  - spec/puppet-syntax/manifests_spec.rb
123
128
  - spec/puppet-syntax/tasks/puppet-syntax_spec.rb
124
129
  - spec/puppet-syntax/templates_spec.rb
@@ -139,7 +144,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
139
144
  version: '0'
140
145
  segments:
141
146
  - 0
142
- hash: -368354706311963489
147
+ hash: 4527904498098256296
143
148
  required_rubygems_version: !ruby/object:Gem::Requirement
144
149
  none: false
145
150
  requirements:
@@ -148,7 +153,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
148
153
  version: '0'
149
154
  segments:
150
155
  - 0
151
- hash: -368354706311963489
156
+ hash: 4527904498098256296
152
157
  requirements: []
153
158
  rubyforge_project:
154
159
  rubygems_version: 1.8.23
@@ -156,6 +161,9 @@ signing_key:
156
161
  specification_version: 3
157
162
  summary: ''
158
163
  test_files:
164
+ - spec/fixtures/hiera/hiera_bad.yaml
165
+ - spec/fixtures/hiera/hiera_bad_18.yaml
166
+ - spec/fixtures/hiera/hiera_good.yaml
159
167
  - spec/fixtures/test_module/manifests/fail_error.pp
160
168
  - spec/fixtures/test_module/manifests/fail_warning.pp
161
169
  - spec/fixtures/test_module/manifests/pass.pp
@@ -164,6 +172,7 @@ test_files:
164
172
  - spec/fixtures/test_module/templates/fail_warning.erb
165
173
  - spec/fixtures/test_module/templates/pass.erb
166
174
  - spec/fixtures/test_module/templates/pass_unbound_var.erb
175
+ - spec/puppet-syntax/hiera_spec.rb
167
176
  - spec/puppet-syntax/manifests_spec.rb
168
177
  - spec/puppet-syntax/tasks/puppet-syntax_spec.rb
169
178
  - spec/puppet-syntax/templates_spec.rb