Skip to content

Commit 394d007

Browse files
committed
bears: Add puppet lint bear
Fixes coala#46
1 parent ede9b47 commit 394d007

File tree

3 files changed

+193
-0
lines changed

3 files changed

+193
-0
lines changed

Gemfile

+1
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ ruby '2.1.5'
44
gem "rubocop"
55
gem "sqlint"
66
gem 'scss_lint', require: false# require flag is necessary https://github.com/brigade/scss-lint#installation
7+
gem "puppet-lint"

bears/configfiles/PuppetLintBear.py

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import re
2+
3+
from coalib.bearlib.abstractions.Lint import Lint
4+
from coalib.bears.LocalBear import LocalBear
5+
from coalib.results.RESULT_SEVERITY import RESULT_SEVERITY
6+
7+
8+
class PuppetLintBear(LocalBear, Lint):
9+
executable = 'puppet-lint'
10+
output_regex = re.compile(
11+
r'(?P<line>\d+):(?P<column>\d+):'
12+
r'(?P<severity>warning|error):(?P<message>.+)')
13+
severity_map = {
14+
'error': RESULT_SEVERITY.MAJOR,
15+
'warning': RESULT_SEVERITY.NORMAL
16+
}
17+
use_stdout = True
18+
19+
def run(self, filename, file, puppet_cli_options: str=""):
20+
'''
21+
Checks the code with puppet-lint`. This will run puppet-lint
22+
over all puppet files seperately.
23+
'''
24+
self.arguments = '--log-format '
25+
self.arguments += "'%{{line}}:%{{column}}:%{{kind}}:%{{message}}'"
26+
if puppet_cli_options:
27+
self.arguments += " " + puppet_cli_options
28+
self.arguments += " {filename}"
29+
30+
return self.lint(filename)
+162
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
from bears.configfiles.PuppetLintBear import PuppetLintBear
2+
from tests.LocalBearTestHelper import verify_local_bear
3+
4+
good_file = """# == Class: puppet::config
5+
#
6+
# Manage the pupppet configuration files.
7+
#
8+
# === Authors
9+
#
10+
# David Wagner <dwagner@allegheny.edu>
11+
#
12+
{
13+
include puppet::params
14+
15+
file { '/etc/puppet/puppet.conf':
16+
ensure => present,
17+
content => template('puppet/puppet.conf.erb'),
18+
owner => 'puppet',
19+
group => 'puppet',
20+
require => Class['puppet::install'],
21+
}
22+
23+
file { '/etc/puppet/auth.conf':
24+
ensure => present,
25+
content => template('puppet/auth.conf.erb'),
26+
owner => 'puppet',
27+
group => 'puppet',
28+
require => Class['puppet::install'],
29+
}
30+
31+
file { '/etc/default/puppet':
32+
ensure => present,
33+
content => template('puppet/puppet.erb'),
34+
owner => 'root',
35+
group => 'root',
36+
require => Class['puppet::install'],
37+
}
38+
}
39+
""".splitlines(True)
40+
41+
bad_file = """# == Class: puppet::config
42+
#
43+
# Manage the pupppet configuration files.
44+
#
45+
# === Authors
46+
#
47+
# David Wagner <dwagner@allegheny.edu>
48+
#
49+
{
50+
include puppet::params
51+
52+
file { '/etc/puppet/puppet.conf':
53+
ensure => present,
54+
content => template('puppet/puppet.conf.erb'),
55+
owner => 'puppet',
56+
group => 'puppet',
57+
require => Class['puppet::install'],
58+
}
59+
60+
file { '/etc/puppet/auth.conf':
61+
ensure => present,
62+
content => template('puppet/auth.conf.erb'),
63+
owner => 'puppet',
64+
group => 'puppet',
65+
require => Class['puppet::install'],
66+
}
67+
68+
file { '/etc/default/puppet':
69+
ensure => present,
70+
content => template('puppet/puppet.erb'),
71+
owner => 'root',
72+
group => 'root',
73+
require => Class['puppet::install'],
74+
}
75+
}
76+
""".splitlines(True)
77+
78+
bad_file_cli_opts = """# == Class: puppet::config
79+
#
80+
# Manage the pupppet configuration files.
81+
#
82+
# === Authors
83+
#
84+
# David Wagner <dwagner@allegheny.edu>
85+
#
86+
class puppet::config {
87+
include puppet::params
88+
89+
file { '/etc/puppet/puppet.conf':
90+
ensure => present,
91+
content => template('puppet/puppet.conf.erb'),
92+
owner => 'puppet',
93+
group => 'puppet',
94+
require => Class['puppet::install'],
95+
}
96+
97+
file { '/etc/puppet/auth.conf':
98+
ensure => present,
99+
content => template('puppet/auth.conf.erb'),
100+
owner => 'puppet',
101+
group => 'puppet',
102+
require => Class['puppet::install'],
103+
}
104+
105+
file { '/etc/default/puppet':
106+
ensure => present,
107+
content => template('puppet/puppet.erb'),
108+
owner => 'root',
109+
group => 'root',
110+
require => Class['puppet::install'],
111+
}
112+
}
113+
""".splitlines(True)
114+
115+
good_file_cli_opts = """# == Class: puppet::config
116+
#
117+
# Manage the pupppet configuration files.
118+
#
119+
# === Authors
120+
#
121+
# David Wagner <dwagner@allegheny.edu>
122+
#
123+
class puppet::config {
124+
include puppet::params
125+
126+
file { '/etc/puppet/puppet.conf':
127+
ensure => present,
128+
content => template('puppet/puppet.conf.erb'),
129+
owner => 'puppet',
130+
group => 'puppet',
131+
require => Class['puppet::install'],
132+
}
133+
134+
file { '/etc/puppet/auth.conf':
135+
ensure => present,
136+
content => template('puppet/auth.conf.erb'),
137+
owner => 'puppet',
138+
group => 'puppet',
139+
require => Class['puppet::install'],
140+
}
141+
142+
file { '/etc/default/puppet':
143+
ensure => present,
144+
content => template('puppet/puppet.erb'),
145+
owner => 'root',
146+
group => 'root',
147+
require => Class['puppet::install'],
148+
}
149+
}
150+
""".splitlines(True)
151+
152+
PuppetLintBearTest = verify_local_bear(PuppetLintBear,
153+
valid_files=(good_file,),
154+
invalid_files=(bad_file,))
155+
156+
puppetLintBearWithSettings = verify_local_bear(PuppetLintBear,
157+
valid_files=(good_file_cli_opts,bad_file_cli_opts),
158+
invalid_files=(),
159+
settings={
160+
"puppet_cli_options":
161+
"--no-autoloader_layout-check"
162+
})

0 commit comments

Comments
 (0)