puppet-lint-wmf_styleguide-check 1.1.2 → 1.1.4
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
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 54c6fe22c9d84651ff87c3731d412676e09b531e395ce3124dac997550db5b7a
|
4
|
+
data.tar.gz: 47143edec121e62799273e771c77ae1fe82711708da154363f311f6427f4348a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e9c1db9492965bf77d8705ab9b2220a47cae1d66cf6a34981fca517f2fe80937d63da80844f463faac22245729036ba0a7dc92a5b8b6984484a216701d23d863
|
7
|
+
data.tar.gz: 0cfad3cc8ce589560568ab5ec796dc8b35010e11482e6f2540ce8d2af08844d037be3f0c180dbe2d19b8bf23c8a5195abf96d3194c71747006512287112ac4bf
|
@@ -190,7 +190,7 @@ class PuppetLint
|
|
190
190
|
end
|
191
191
|
|
192
192
|
def node_def?
|
193
|
-
[:SSTRING, :STRING, :NAME, :REGEX].include?(@type)
|
193
|
+
[:SSTRING, :STRING, :NAME, :REGEX, :DEFAULT].include?(@type)
|
194
194
|
end
|
195
195
|
|
196
196
|
def role_keyword?
|
@@ -218,8 +218,6 @@ def check_role(klass)
|
|
218
218
|
lookup klass
|
219
219
|
# A role should only include profiles
|
220
220
|
include_not_profile klass
|
221
|
-
# A call, and only one, to system::role will be done
|
222
|
-
check_system_role klass
|
223
221
|
# No defines should be present in a role
|
224
222
|
check_no_defines klass
|
225
223
|
end
|
@@ -395,17 +393,6 @@ def check_no_system_role(klass)
|
|
395
393
|
end
|
396
394
|
end
|
397
395
|
|
398
|
-
def check_system_role(klass)
|
399
|
-
# Check that a role does indeed declare system::role
|
400
|
-
return if klass.resource?('system::role').length == 1
|
401
|
-
msg = {
|
402
|
-
message: "wmf-style: role '#{klass.name}' should declare system::role once",
|
403
|
-
line: 1,
|
404
|
-
column: 1
|
405
|
-
}
|
406
|
-
notify :error, msg
|
407
|
-
end
|
408
|
-
|
409
396
|
def check_no_defines(klass)
|
410
397
|
# In a role, check if there is any define apart from one system::role call
|
411
398
|
return if klass.declared_resources == klass.resource?('system::role')
|
@@ -493,9 +480,40 @@ PuppetLint.new_check(:wmf_styleguide) do
|
|
493
480
|
next unless in_node_def
|
494
481
|
case token.type
|
495
482
|
when :REGEX
|
496
|
-
|
483
|
+
unless token.value.start_with?('^')
|
484
|
+
msg = {
|
485
|
+
message: "wmf-style: node regex must match the start of the hostname with '^' got: #{token.value}",
|
486
|
+
line: token.line,
|
487
|
+
column: token.column,
|
488
|
+
token: token,
|
489
|
+
problem: 'node_regex'
|
490
|
+
}
|
491
|
+
notify :error, msg
|
492
|
+
end
|
493
|
+
if token.value.end_with?('$')
|
494
|
+
msg = {
|
495
|
+
message: "wmf-style: node regex must not match the end of the hostname with '$' got: #{token.value}",
|
496
|
+
line: token.line,
|
497
|
+
column: token.column,
|
498
|
+
token: token,
|
499
|
+
problem: 'node_regex'
|
500
|
+
}
|
501
|
+
notify :error, msg
|
502
|
+
end
|
503
|
+
['.wmnet', '.org'].each do |tld|
|
504
|
+
next unless token.value.index(tld)
|
497
505
|
msg = {
|
498
|
-
message: "wmf-style:
|
506
|
+
message: "wmf-style: node regex must not contain the '#{tld}' tld got: #{token.value}",
|
507
|
+
line: token.line,
|
508
|
+
column: token.column,
|
509
|
+
token: token,
|
510
|
+
problem: 'node_regex'
|
511
|
+
}
|
512
|
+
notify :error, msg
|
513
|
+
end
|
514
|
+
if !token.value.match(/\\?\.wikimedia\\?\.org/) && !token.value.end_with?('\.')
|
515
|
+
msg = {
|
516
|
+
message: "wmf-style: datacenter node regex must match subdomain end with '\.': #{token.value}",
|
499
517
|
line: token.line,
|
500
518
|
column: token.column,
|
501
519
|
token: token,
|
@@ -504,7 +522,19 @@ PuppetLint.new_check(:wmf_styleguide) do
|
|
504
522
|
notify :error, msg
|
505
523
|
end
|
506
524
|
when :LBRACE
|
507
|
-
|
525
|
+
if braces_level.zero?
|
526
|
+
title_tokens = tokens[start + 1..(i - 1)].select(&:node_def?)
|
527
|
+
unless title_tokens[0].type == :REGEX || title_tokens[0].type == :DEFAULT
|
528
|
+
msg = {
|
529
|
+
message: "wmf-style: node definition must use a regex, got: #{title_tokens[0].value}",
|
530
|
+
line: token.line,
|
531
|
+
column: token.column,
|
532
|
+
token: token,
|
533
|
+
problem: 'node_regex'
|
534
|
+
}
|
535
|
+
notify :error, msg
|
536
|
+
end
|
537
|
+
end
|
508
538
|
braces_level += 1
|
509
539
|
when :RBRACE
|
510
540
|
braces_level -= 1
|
@@ -549,10 +579,15 @@ PuppetLint.new_check(:wmf_styleguide) do
|
|
549
579
|
end
|
550
580
|
end
|
551
581
|
|
582
|
+
# rubocop:disable Metrics/AbcSize
|
552
583
|
def fix_node_regex(problem)
|
553
584
|
problem[:token].value.insert(0, '^') unless problem[:token].value.start_with?('^')
|
554
|
-
problem[:token].value
|
585
|
+
problem[:token].value.chop! if problem[:token].value.end_with?('$')
|
586
|
+
['wmnet', 'org'].each do |tld|
|
587
|
+
problem[:token].value.slice!(/#{tld}/) if problem[:token].value =~ /\\?\.#{tld}/
|
588
|
+
end
|
555
589
|
end
|
590
|
+
# rubocop:enable Metrics/AbcSize
|
556
591
|
|
557
592
|
def fix(problem)
|
558
593
|
raise PuppetLint::NoFix unless problem[:problem] == 'node_regex'
|
@@ -88,7 +88,19 @@ define foo::fixme ($a=hiera('something')) {
|
|
88
88
|
EOF
|
89
89
|
|
90
90
|
node_ok = <<-EOF
|
91
|
-
node /^test1.*\\.
|
91
|
+
node /^test1.*\\.eqiad\\./ {
|
92
|
+
role(spare::system)
|
93
|
+
}
|
94
|
+
EOF
|
95
|
+
|
96
|
+
node_ok_wikimedia = <<-EOF
|
97
|
+
node /^test1.*\\.wikimedia\\./ {
|
98
|
+
role(spare::system)
|
99
|
+
}
|
100
|
+
EOF
|
101
|
+
|
102
|
+
node_default = <<-EOF
|
103
|
+
node default {
|
92
104
|
role(spare::system)
|
93
105
|
}
|
94
106
|
EOF
|
@@ -106,26 +118,38 @@ node 'fixme' {
|
|
106
118
|
}
|
107
119
|
EOF
|
108
120
|
|
109
|
-
|
110
|
-
node
|
121
|
+
node_regex_with_wmf_tld = <<-EOF
|
122
|
+
node /^test1.*\\.eqiad\\.wmnet/ {
|
123
|
+
role(spare::system)
|
124
|
+
}
|
125
|
+
EOF
|
126
|
+
|
127
|
+
node_regex_with_org_tld = <<-EOF
|
128
|
+
node /^test1.*\\.wikimedia\\.org/ {
|
111
129
|
role(spare::system)
|
112
130
|
}
|
113
131
|
EOF
|
114
132
|
|
115
|
-
|
116
|
-
node
|
133
|
+
node_regex_missing_start = <<-EOF
|
134
|
+
node /test1.*\\.eqiad\\./ {
|
117
135
|
role(spare::system)
|
118
136
|
}
|
119
137
|
EOF
|
120
138
|
|
121
|
-
|
122
|
-
node
|
139
|
+
node_regex_with_end = <<-EOF
|
140
|
+
node /^test1.*\\.eqiad\\.wmnet$/ {
|
123
141
|
role(spare::system)
|
124
142
|
}
|
125
143
|
EOF
|
126
144
|
|
127
145
|
node_regex_fixed = <<-EOF
|
128
|
-
node /^test1.*\\.
|
146
|
+
node /^test1.*\\.eqiad\\./ {
|
147
|
+
role(spare::system)
|
148
|
+
}
|
149
|
+
EOF
|
150
|
+
|
151
|
+
node_regex_fixed_wmf_tld = <<-EOF
|
152
|
+
node /^test1.*\\.eqiad\\./ {
|
129
153
|
role(spare::system)
|
130
154
|
}
|
131
155
|
EOF
|
@@ -242,6 +266,21 @@ describe 'wmf_styleguide' do
|
|
242
266
|
expect(problems).to have(0).problems
|
243
267
|
end
|
244
268
|
end
|
269
|
+
|
270
|
+
context 'node wikimedia.org with no errors' do
|
271
|
+
let(:code) { node_ok_wikimedia }
|
272
|
+
it 'should not detect any problems' do
|
273
|
+
expect(problems).to have(0).problems
|
274
|
+
end
|
275
|
+
end
|
276
|
+
|
277
|
+
context 'node default with no errors' do
|
278
|
+
let(:code) { node_default }
|
279
|
+
it 'should not detect any problems' do
|
280
|
+
expect(problems).to have(0).problems
|
281
|
+
end
|
282
|
+
end
|
283
|
+
|
245
284
|
context 'node with violations' do
|
246
285
|
let(:code) { node_ko }
|
247
286
|
it 'should not include classes directly' do
|
@@ -262,24 +301,36 @@ describe 'wmf_styleguide' do
|
|
262
301
|
it 'should not call hiera_hash' do
|
263
302
|
expect(problems).to contain_error("wmf-style: node 'fixme' calls legacy hiera_hash function")
|
264
303
|
end
|
304
|
+
it 'should use a regex' do
|
305
|
+
expect(problems).to contain_error('wmf-style: node definition must use a regex, got: fixme')
|
306
|
+
end
|
307
|
+
end
|
308
|
+
|
309
|
+
context 'node regex with wmnet tld violation' do
|
310
|
+
let(:code) { node_regex_with_wmf_tld }
|
311
|
+
it 'should not contain the wmnet tld' do
|
312
|
+
expect(problems).to contain_error("wmf-style: node regex must not contain the '.wmnet' tld got: ^test1.*\\.eqiad\\.wmnet")
|
313
|
+
end
|
314
|
+
end
|
315
|
+
|
316
|
+
context 'node regex with org tld violation' do
|
317
|
+
let(:code) { node_regex_with_org_tld }
|
318
|
+
it 'should not contain the wmnet tld' do
|
319
|
+
expect(problems).to contain_error("wmf-style: node regex must not contain the '.org' tld got: ^test1.*\\.wikimedia\\.org")
|
320
|
+
end
|
265
321
|
end
|
266
322
|
|
267
323
|
context 'node regex with start violation' do
|
268
324
|
let(:code) { node_regex_missing_start }
|
269
325
|
it 'should start the regex with ^' do
|
270
|
-
expect(problems).to contain_error(
|
326
|
+
expect(problems).to contain_error("wmf-style: node regex must match the start of the hostname with '^' got: test1.*\\.eqiad\\.")
|
271
327
|
end
|
272
328
|
end
|
329
|
+
|
273
330
|
context 'node regex with end violation' do
|
274
|
-
let(:code) {
|
275
|
-
it 'should end the regex with $' do
|
276
|
-
expect(problems).to contain_error(
|
277
|
-
end
|
278
|
-
end
|
279
|
-
context 'node regex with start and end violations' do
|
280
|
-
let(:code) { node_regex_missing_both }
|
281
|
-
it 'should start the regex with ^ and end it with $' do
|
282
|
-
expect(problems).to contain_error('wmf-style: regex node matching must match the whole string (^...$), got: test1.*\\.example\\.com')
|
331
|
+
let(:code) { node_regex_with_end }
|
332
|
+
it 'should not end the regex with $' do
|
333
|
+
expect(problems).to contain_error("wmf-style: node regex must not match the end of the hostname with '$' got: ^test1.*\\.eqiad\\.wmnet$")
|
283
334
|
end
|
284
335
|
end
|
285
336
|
|
@@ -304,12 +355,12 @@ describe 'wmf_styleguide' do
|
|
304
355
|
it { expect(manifest).to eq(node_regex_fixed) }
|
305
356
|
end
|
306
357
|
context 'node regex with end violation' do
|
307
|
-
let(:code) {
|
358
|
+
let(:code) { node_regex_with_end }
|
308
359
|
it { expect(manifest).to eq(node_regex_fixed) }
|
309
360
|
end
|
310
|
-
context 'node regex with
|
311
|
-
let(:code) {
|
312
|
-
it { expect(manifest).to eq(
|
361
|
+
context 'node regex with tld violation' do
|
362
|
+
let(:code) { node_regex_with_wmf_tld }
|
363
|
+
it { expect(manifest).to eq(node_regex_fixed_wmf_tld) }
|
313
364
|
end
|
314
365
|
end
|
315
366
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: puppet-lint-wmf_styleguide-check
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Giuseppe Lavagetto
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: puppet-lint
|
@@ -148,7 +148,7 @@ homepage: https://github.com/lavagetto/puppet-lint-wmf_styleguide-check
|
|
148
148
|
licenses:
|
149
149
|
- GPL-3.0
|
150
150
|
metadata: {}
|
151
|
-
post_install_message:
|
151
|
+
post_install_message:
|
152
152
|
rdoc_options: []
|
153
153
|
require_paths:
|
154
154
|
- lib
|
@@ -163,10 +163,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
163
163
|
- !ruby/object:Gem::Version
|
164
164
|
version: '0'
|
165
165
|
requirements: []
|
166
|
-
rubygems_version: 3.
|
167
|
-
signing_key:
|
166
|
+
rubygems_version: 3.4.20
|
167
|
+
signing_key:
|
168
168
|
specification_version: 4
|
169
169
|
summary: A puppet-lint plugin to check code adheres to the WMF coding guidelines
|
170
170
|
test_files:
|
171
|
-
- spec/spec_helper.rb
|
172
171
|
- spec/puppet-lint/plugins/check_wmf_styleguide_check_spec.rb
|
172
|
+
- spec/spec_helper.rb
|