-
Notifications
You must be signed in to change notification settings - Fork 6
/
rakefile
162 lines (121 loc) · 3.87 KB
/
rakefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
=begin
This rakefile is meant to trigger your local puppet-linter. To take
advantage of that powerful linter, you must have the puppet and
puppet-lint gems:
$ sudo gem install puppet
$ sudo gem instlal puppet-lint
Then run the linter using rake (a ruby build helper):
$ rake lint
A list of top errors can be obtained using:
rake lint |rev |cut -d\ -f4- | rev | sort | uniq -c | sort -rn
puppet-lint doc is at https://github.com/rodjek/puppet-lint
-- hashar 20120216
=end
# Only care about color when using a tty
if Rake.application.tty_output?
# Since we are going to use puppet internal stuff, we might as
# well reuse their colorization utility:
require'puppet/util/colors'
include Puppet::Util::Colors
$puppetcolor = '--color true'
else
# define our own colorization method that simply output the message
def console_color( level, message )
return message
end
$puppetcolor = '--color none'
end
task :default => [:help]
desc 'Show the help'
task :help do
puts "Puppet helper for operations/puppet.git
Welcome #{ENV['USER']} in WMF wonderful rake helper to play with puppet.
---[Command line options]----------------------------------------------
`rake -T` : list available tasks
`rake -P` : shows tasks dependencies
---[Available rake tasks]----------------------------------------------"
# show our tasks list
system "rake -T"
puts "-----------------------------------------------------------------------"
puts "
Examples:
Validate syntax for all puppet manifests:
rake validate
Validate manifests/nfs.pp and manifests/apaches.pp
rake \"validate[manifests/nfs.pp manifests/apaches.pp]\"
Run puppet style checker:
rake lint
"
end
task :run_puppet_lint do
require 'puppet-lint/tasks/puppet-lint'
# Get possible checks values with: puppet-lint --help
disabled_checks = [
# We still use the 2.6 way of referencing variables.
# 2.8 will requires $::globalname. Skip for now
"variable_scope",
# We really like nesting classes:
"nested_classes_or_defines",
# Lot of long lines (ssh keys for example)
"80chars",
# Anyone as a different indentation preference
"hard_tabs",
"2sp_soft_tabs",
# Misc rules, some of them might use to be enabled later
"autoloader_layout", # unused in our setup?
"inherits_across_namespaces",
"double_quoted_strings",
"unquoted_file_mode",
"ensure_first_param",
"unquoted_resource_title",
"arrow_alignment",
# "true" and "false" are everywhere.
"quoted_booleans",
# We dont have much documentation yet:
"documentation",
# Variables should be enclosed in {}
"variables_not_enclosed",
# We use dash in class and variables
"names_containing_dash",
"variable_contains_dash",
# FIXME Following test cause a stacktrace ;-(
"ensure_not_symlink_target",
]
# Disable checks referenced above:
disabled_checks.each { |name|
warn "Disabling rule '#{name}' from rakefile"
PuppetLint.configuration.send( "disable_#{name}" )
}
end
desc "Lint puppet files"
task :lint => :run_puppet_lint
desc "Validate puppet syntax (default: manifests/site.pp)"
task :validate, [:files ] do |t, args|
success = true
if args.files
puts console_color( :info, "Validating " + args.files.inspect )
ok = puppet_parser_validate args.files
else
ok = puppet_parser_validate 'manifests/site.pp'
success = success && ok
Dir.glob("modules/*").each do |dir|
puts console_color( :info, "Validating manifests in '#{dir}'" )
ok = puppet_parser_validate Dir.glob( "#{dir}/**/*.pp" )
success = success && ok
end
end
if success
puts "[OK] " + console_color( :info, "files looks fine!" )
else
raise console_color( :alert, "puppet failed to validate files (exit: #{res.exitstatus}" )
end
end
# Validate manifests passed as an array of filenames
def puppet_parser_validate(*manifests)
manifests = manifests.join(' ')
sh "puppet parser validate #{$puppetcolor} #{manifests}"
end
=begin lint
amass profit
donate!
=end