puppet-validator 0.0.1 → 0.0.3

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
2
  SHA1:
3
- metadata.gz: 27540dfa278a0cc463d85b7ed95420957b9f061f
4
- data.tar.gz: 5d0c51971ca899cbddef2b63164722f18a0c8d68
3
+ metadata.gz: 6b24ee105fe4fa68c0d60cf4593248232f523aef
4
+ data.tar.gz: f62cee3a178109d601c0612238fafbebcd366f35
5
5
  SHA512:
6
- metadata.gz: dfc4006d55991a8d84d381ef4be02a95e5df9e12164699509ed70e79b07cd68ccfbc5fa8059495748977d0ee5809c701ee435f6358a27f85f2744b04ec9a83f0
7
- data.tar.gz: 753d447bf1e0cbcfc967da5fad07eecd85b2f3004eb37e58b230d8a0fa9fefca6c23f127532a85d22193eb38a0ef8f789aa5e34501af6cfab74534c7a3fce459
6
+ metadata.gz: 2a671e7c893f4230cb78d4e8a51dd93a2cf75c5143e170042e30809bae8950649baf56731b42bfb9570964bf8bc20e04631fa31fbe67d01f58424356b9525048
7
+ data.tar.gz: f9efab3576309a27cb89a13ec5c4615acc8b13c4e42045801fc3436f8ec6ddd51836c71b65edc66e8aec3094e5fe5454021ac7287c278c2dd72da36d0cd44d92
data/bin/puppet-validator CHANGED
@@ -16,11 +16,11 @@ loglevel = Logger::WARN
16
16
 
17
17
  optparse = OptionParser.new { |opts|
18
18
  opts.banner = "Usage : puppet-validator [-p <port>] [-l [logfile]] [-t <themedir>] [-d]
19
- Runs the Puppet Validator code validation service.
19
+ -- Runs the Puppet Validator code validation service.
20
20
 
21
21
  puppet-validator init
22
- Copies the files needed to create a puppet-validator theme into $CWD.
23
- This will overwrite existing files.
22
+ -- Copies the files needed to create a puppet-validator theme into $CWD.
23
+ This will overwrite existing files.
24
24
 
25
25
  "
26
26
 
@@ -19,9 +19,10 @@ class PuppetValidator < Sinatra::Base
19
19
  def initialize(app=nil)
20
20
  super(app)
21
21
 
22
+ Puppet.initialize_settings if Puppet.version.to_i >= 3
23
+
22
24
  # there must be a better way
23
25
  if settings.respond_to? :disabled_lint_checks
24
-
25
26
  # can pass in an array, a filename, or a list of checks
26
27
  if settings.disabled_lint_checks.class == String
27
28
  path = File.expand_path(settings.disabled_lint_checks)
@@ -46,6 +47,9 @@ class PuppetValidator < Sinatra::Base
46
47
  end
47
48
 
48
49
  get '/' do
50
+ @disabled = settings.disabled_lint_checks
51
+ @checks = puppet_lint_checks
52
+
49
53
  erb :index
50
54
  end
51
55
 
@@ -55,7 +59,7 @@ class PuppetValidator < Sinatra::Base
55
59
 
56
60
  if request.body.size <= MAXSIZE
57
61
  result = validate params['code']
58
- lint = lint params['code'] if params['lint'] == 'on'
62
+ lint = lint(params['code'], params['checks']) if params['lint'] == 'on'
59
63
  lint ||= {} # but make sure we have a data object to iterate
60
64
 
61
65
  @code = params['code']
@@ -95,10 +99,17 @@ class PuppetValidator < Sinatra::Base
95
99
 
96
100
  def validate(data)
97
101
  begin
102
+ Puppet.settings[:app_management] = true if Gem::Version.new(Puppet.version) >= Gem::Version.new('4.3.2')
103
+
98
104
  Puppet[:code] = data
99
- validation_environment = Puppet.lookup(:current_environment)
100
105
 
101
- validation_environment.check_for_reparse
106
+ if Puppet::Node::Environment.respond_to?(:create)
107
+ validation_environment = Puppet::Node::Environment.create(:production, [])
108
+ validation_environment.check_for_reparse
109
+ else
110
+ validation_environment = Puppet::Node::Environment.new(:production)
111
+ end
112
+
102
113
  validation_environment.known_resource_types.clear
103
114
 
104
115
  {:status => true, :message => 'Syntax OK'}
@@ -111,10 +122,24 @@ class PuppetValidator < Sinatra::Base
111
122
  end
112
123
  end
113
124
 
114
- def lint(data)
125
+ def lint(data, checks=nil)
115
126
  begin
116
- settings.disabled_lint_checks.each do |check|
117
- PuppetLint.configuration.send("disable_#{check}")
127
+ if checks
128
+ logger.info "Disabling checks: #{(puppet_lint_checks - checks).inspect}"
129
+
130
+ checks.each do |check|
131
+ PuppetLint.configuration.send("enable_#{check}")
132
+ end
133
+
134
+ (puppet_lint_checks - checks).each do |check|
135
+ PuppetLint.configuration.send("disable_#{check}")
136
+ end
137
+ else
138
+ logger.info "Disabling checks: #{settings.disabled_lint_checks.inspect}"
139
+
140
+ settings.disabled_lint_checks.each do |check|
141
+ PuppetLint.configuration.send("disable_#{check}")
142
+ end
118
143
  end
119
144
 
120
145
  linter = PuppetLint.new
@@ -127,6 +152,10 @@ class PuppetValidator < Sinatra::Base
127
152
  end
128
153
  end
129
154
 
155
+ def puppet_lint_checks
156
+ # sanitize because reasonss
157
+ PuppetLint.configuration.checks.map {|check| check.to_s}
158
+ end
130
159
 
131
160
  end
132
161
  end
data/public/scripts.js ADDED
@@ -0,0 +1,37 @@
1
+ function toggleChecks() {
2
+ var enabled = $('input#lint').is(":checked");
3
+
4
+ $('ul#checks input').attr('disabled', ! enabled);
5
+ }
6
+
7
+ function toggleMenu() {
8
+ $('#checks-menu').slideToggle();
9
+ return false;
10
+ }
11
+
12
+ $( document ).ready(function() {
13
+ toggleChecks();
14
+
15
+ $("textarea#code").keydown(function(e) {
16
+ if(e.keyCode === 9) { // tab was pressed
17
+ // get caret position/selection
18
+ var start = this.selectionStart;
19
+ var end = this.selectionEnd;
20
+
21
+ var $this = $(this);
22
+ var value = $this.val();
23
+
24
+ // set textarea value to: text before caret + tab + text after caret
25
+ $this.val(value.substring(0, start)
26
+ + "\t"
27
+ + value.substring(end));
28
+
29
+ // put caret at right position again (add one for the tab)
30
+ this.selectionStart = this.selectionEnd = start + 1;
31
+
32
+ // prevent the loss of focus
33
+ e.preventDefault();
34
+ }
35
+ });
36
+
37
+ });
data/public/styles.css CHANGED
@@ -1,7 +1,12 @@
1
1
  body {
2
+ min-width: 690px;
2
3
  padding: 0 2em;
3
4
  }
4
5
 
6
+ /* keeps the tooltip from clipping to the pre */
7
+ pre[class*="language-"] {
8
+ overflow: visible;
9
+ }
5
10
  div.line-highlight {
6
11
  /* Cannot use opacity, because that affects tooltip children as well */
7
12
  background-color: rgba(255, 181, 181, 0.25);
@@ -82,6 +87,34 @@ div.entry {
82
87
  width: 100%;
83
88
  }
84
89
 
90
+ a.button {
91
+ font-size: small;
92
+ background-color: #fff;
93
+ padding: 0 2px;
94
+ border: 1px solid #fff;
95
+ border-radius: 3px;
96
+ text-decoration: none;
97
+ }
98
+ a.button:hover {
99
+ background-color: #efefef;
100
+ border-color: #bbb;
101
+ }
102
+ fieldset.menu {
103
+ display: none;
104
+ border-radius: 0.5em;
105
+ }
106
+ fieldset.menu ul {
107
+ list-style-type: none;
108
+ padding: 0;
109
+ margin: 0;
110
+ -moz-column-count: 2;
111
+ -moz-column-gap: 20px;
112
+ -webkit-column-count: 2;
113
+ -webkit-column-gap: 20px;
114
+ column-count: 2;
115
+ column-gap: 20px;
116
+ }
117
+
85
118
  p.info {
86
119
  background: #fefefe url('info.png') no-repeat 5px 5px !important;
87
120
  border: 1px solid #efefef;
data/public/testing.html CHANGED
@@ -2,16 +2,15 @@
2
2
  <head>
3
3
  <title>Puppet Validator</title>
4
4
  <link rel="stylesheet" href="styles.css">
5
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
5
6
  </head>
6
7
  <body>
7
8
  <h1>Testing Puppet Code</h1>
8
9
  <p>
9
- This tool will validate the Puppet DSL syntax without compiling a catalog or syncing
10
- any resources. Be aware that this <em>only validates syntax</em>. If you have
11
- variables that are incorrectly spelled or have a bad value, your code will still
12
- be completely valid&mdash;and will not do what you want. See the
13
- <a href="https://docs.puppetlabs.com/puppet/latest/reference/lang_visual_index.html">Puppet Language Guide</a>
14
- if you need help understanding the syntax.
10
+ This tool will validate the Puppet DSL syntax. It won't actually compile a catalog or
11
+ enforce any configuration state. This means that this <em>only validates syntax</em>.
12
+ There are many ways in which a Puppet manifest may have valid syntax but be completely
13
+ incorrect for your purposes and not do what you intend.
15
14
  </p>
16
15
  <p>
17
16
  Some examples of flaws that will not be identified by this tool include:
@@ -24,13 +23,14 @@
24
23
  </ul>
25
24
  </p>
26
25
  <p>
27
- Other tools do exist which can help make sure your code actually works as intended.
26
+ Many other resources exist which can help make sure your code actually works as intended.
28
27
  Some examples are:
29
28
  <ul>
30
- <li><a href="https://github.com/rodjek/puppet-lint">Puppet Lint</a></li>
31
- <li><a href="http://rspec-puppet.com/tutorial/">rspec-puppet</a></li>
32
- <li><a href="https://github.com/puppetlabs/puppetlabs_spec_helper">Puppetlabs Spec Helper</a></li>
33
- <li><a href="https://github.com/puppetlabs/beaker">Beaker</a></li>
29
+ <li><a href="https://docs.puppetlabs.com/puppet/latest/reference/lang_visual_index.html">the Puppet Language Guide</a></li>
30
+ <li><a href="https://github.com/rodjek/puppet-lint">Puppet Lint</a> style validation</li>
31
+ <li><a href="http://rspec-puppet.com/tutorial/">rspec-puppet</a> unit testing framework</li>
32
+ <li><a href="https://github.com/puppetlabs/puppetlabs_spec_helper">Puppetlabs Spec Helper</a> for rspec-puppet</li>
33
+ <li><a href="https://github.com/puppetlabs/beaker">Beaker</a> testing automation platform</li>
34
34
  </ul>
35
35
  </p>
36
36
  <div class="links"><a href="javascript:history.back();">Try Again</a> &bull; <a href="/">Validate More Code</a></div>
data/views/index.erb CHANGED
@@ -2,23 +2,35 @@
2
2
  <head>
3
3
  <title>Puppet Validator</title>
4
4
  <link rel="stylesheet" href="styles.css">
5
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
6
+ <script src="scripts.js"></script>
5
7
  </head>
6
8
  <body>
7
9
  <h1>Puppet Code Validator</h1>
8
10
  <p>Paste Puppet code into the following textbox and check it for validity.</p>
9
- <form id="code" action="/validate" method="post">
11
+ <form action="/validate" method="post">
10
12
  <div class="entry">
11
- <textarea name="code" id="textarea" cols="65" rows="25"></textarea>
13
+ <textarea name="code" id="code" cols="65" rows="25"></textarea>
12
14
  <input type="submit" value="Validate">
13
- <input type="checkbox" name="lint">Include <code>puppet-lint</code> style checks.
15
+ <label><input type="checkbox" name="lint" id="lint" onchange="toggleChecks();">Include <code>puppet-lint</code> style checks.</label>
16
+ <a class="button" href="#" onclick="toggleMenu();">customize &#9662;</a>
17
+ <fieldset id="checks-menu" class="menu">
18
+ <legend>Enabled Lint Checks</legend>
19
+ <ul id="checks">
20
+ <% @checks.each do |check| %>
21
+ <li><label>
22
+ <input type="checkbox" name="checks[]" value="<%= check %>" id="check_<%= check %>" <% unless @disabled.include? check %>checked<% end %>><%= check %></input>
23
+ </label></li>
24
+ <% end %>
25
+ </ul>
26
+ </fieldset>
14
27
  </div>
15
28
  </form>
16
29
  <p class="info">
17
- Be aware that this <em>only validates syntax</em>. It will not compile a
18
- catalog or sync any resources. This means that, for example, it cannot
19
- identify whether you have used the proper resource types, whether package
20
- names are correct, or file paths exist. See <a href="/testing.html">more
21
- information on testing and validating Puppet code.</a>
30
+ Be aware that this <em>only validates syntax</em>. It will not compile or
31
+ enforce a catalog, which means that there are many mistakes that it cannot
32
+ identify. See <a href="/testing.html">more information on testing and
33
+ validating Puppet code.</a>
22
34
  </p>
23
35
  </body>
24
36
  </html>
data/views/result.erb CHANGED
@@ -3,6 +3,7 @@
3
3
  <title>Puppet Validator</title>
4
4
  <link rel="stylesheet" href="prism-default.css">
5
5
  <link rel="stylesheet" href="styles.css">
6
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
6
7
  <script src="prism.js"></script>
7
8
  </head>
8
9
  <body>
@@ -27,11 +28,10 @@
27
28
  <pre data-line='<%= @highlights %>' class="line-numbers language-puppet"><code class="line-numbers language-puppet"><%= @code %></code></pre>
28
29
  <div class="links"><a href="javascript:history.back();">Try Again</a> &bull; <a href="/">Validate More Code</a></div>
29
30
  <p class="info">
30
- Be aware that this has <em>only validated syntax</em>. It will not compile a
31
- catalog or sync any resources. This means that, for example, it cannot
32
- identify whether you have used the proper resource types, whether package
33
- names are correct, or file paths exist. See <a href="/testing.html">more
34
- information on testing and validating Puppet code.</a>
31
+ Be aware that this has <em>only validated syntax</em>. It will not compile or
32
+ enforce a catalog, which means that there are many mistakes that it cannot
33
+ identify. See <a href="/testing.html">more information on testing and
34
+ validating Puppet code.</a>
35
35
  </p>
36
36
  </body>
37
37
  </html>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puppet-validator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Ford
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-09 00:00:00.000000000 Z
11
+ date: 2016-02-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sinatra
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - ~>
32
32
  - !ruby/object:Gem::Version
33
- version: '4.0'
33
+ version: '2.7'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ~>
39
39
  - !ruby/object:Gem::Version
40
- version: '4.0'
40
+ version: '2.7'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: puppet-lint
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -70,6 +70,7 @@ files:
70
70
  - public/info.png
71
71
  - public/prism-default.css
72
72
  - public/prism.js
73
+ - public/scripts.js
73
74
  - public/styles.css
74
75
  - public/testing.html
75
76
  - views/index.erb