class Object
Public Instance Methods
check()
click to toggle source
# File lib/puppet-lint/plugins/check_wmf_styleguide.rb, line 530 def check check_classes defined_type_indexes.each do |df| define = PuppetResource.new(df) check_define define check_deprecations define end node_indexes.each do |node| check_node node end end
check_class(klass)
click to toggle source
# File lib/puppet-lint/plugins/check_wmf_styleguide.rb, line 227 def check_class(klass) # No lookup lookups allowed in a class. lookup klass # Cannot include or declare classes from other modules class_illegal_include klass illegal_class_declaration klass # System::role only goes in roles check_no_system_role klass end
check_classes()
click to toggle source
rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PercievedComplexity
# File lib/puppet-lint/plugins/check_wmf_styleguide.rb, line 516 def check_classes class_indexes.each do |cl| klass = PuppetResource.new(cl) if klass.profile? check_profile klass elsif klass.role? check_role klass else check_class klass end check_deprecations klass end end
check_define(define)
click to toggle source
# File lib/puppet-lint/plugins/check_wmf_styleguide.rb, line 237 def check_define(define) # No lookup calls are admitted in defines. ever. lookup define # No class can be included in defines, like in classes class_illegal_include define # Non-profile defines should respect the rules for classes illegal_class_declaration define unless define.module_name == 'profile' end
check_deprecations(resource)
click to toggle source
# File lib/puppet-lint/plugins/check_wmf_styleguide.rb, line 421 def check_deprecations(resource) # Check the resource for declarations of deprecated defines legacy_validate_errors resource legacy_hiera resource deprecated_defines = ['base::service_unit'] deprecated_defines.each do |deprecated| resource.resource?(deprecated).each do |token| msg = { message: "wmf-style: '#{resource.name}' should not include the deprecated define '#{token.value}'", line: token.line, column: token.column } notify :error, msg end end end
check_no_defines(klass)
click to toggle source
# File lib/puppet-lint/plugins/check_wmf_styleguide.rb, line 410 def check_no_defines(klass) # In a role, check if there is any define apart from one system::role call return if klass.declared_resources == klass.resource?('system::role') msg = { message: "wmf-style: role '#{klass.name}' should not include defines", line: 1, column: 1 } notify :error, msg end
check_no_system_role(klass)
click to toggle source
# File lib/puppet-lint/plugins/check_wmf_styleguide.rb, line 387 def check_no_system_role(klass) # The system::role define should only be used in roles klass.resource?('system::role').each do |token| msg = { message: "wmf-style: #{klass.type} '#{klass.name}' declares system::role, which should only be used in roles", line: token.line, column: token.column } notify :error, msg end end
check_node(node)
click to toggle source
rubocop:disable Metrics/MethodLength, Metrics/PerceivedComplexity, Metrics/AbcSize, Metrics/CyclomaticComplexity
# File lib/puppet-lint/plugins/check_wmf_styleguide.rb, line 439 def check_node(node) title = node[:title_tokens].map(&:value).join(', ') node[:tokens].each do |token| msg = nil if token.lookup? msg = { message: "wmf-style: node '#{title}' calls lookup function", line: token.line, column: token.column } elsif token.legacy_hiera? msg = { message: "wmf-style: node '#{title}' calls legacy #{token.value} function", line: token.line, column: token.column } elsif token.class_include? msg = { message: "wmf-style: node '#{title}' includes class #{token.included_class.value}", line: token.line, column: token.column } elsif token.declared_class msg = { message: "wmf-style: node '#{title}' declares class #{token.declared_class.value}", line: token.line, column: token.column } elsif token.declared_type? && token.value != 'interface::add_ip6_mapped' msg = { message: "wmf-style: node '#{title}' declares #{token.value}", line: token.line, column: token.column } end notify :error, msg if msg end end
check_profile(klass)
click to toggle source
Checks and functions
# File lib/puppet-lint/plugins/check_wmf_styleguide.rb, line 205 def check_profile(klass) # All parameters of profiles should have a default value that is a lookup params_without_lookup_defaults klass # All lookup lookups should be in parameters lookup_not_in_params klass # Only a few selected classes should be included in a profile profile_illegal_include klass # System::role only goes in roles check_no_system_role klass end
check_role(klass)
click to toggle source
# File lib/puppet-lint/plugins/check_wmf_styleguide.rb, line 216 def check_role(klass) # Hiera lookups within a role are forbidden lookup klass # A role should only include profiles include_not_profile klass # A call, and only one, to system::role will be done check_system_role klass # No defines should be present in a role check_no_defines klass end
check_system_role(klass)
click to toggle source
# File lib/puppet-lint/plugins/check_wmf_styleguide.rb, line 399 def check_system_role(klass) # Check that a role does indeed declare system::role return if klass.resource?('system::role').length == 1 msg = { message: "wmf-style: role '#{klass.name}' should declare system::role once", line: 1, column: 1 } notify :error, msg end
class_illegal_include(klass)
click to toggle source
# File lib/puppet-lint/plugins/check_wmf_styleguide.rb, line 338 def class_illegal_include(klass) # A class should only include classes from the same module. modules_include_ok = [klass.module_name] klass.included_classes.each do |token| class_name = token.value.gsub(/^::/, '') module_name = class_name.split('::')[0] next if modules_include_ok.include? module_name msg = { message: "wmf-style: #{klass.type} '#{klass.name}' includes #{class_name} from another module", line: token.line, column: token.column } notify :error, msg end end
illegal_class_declaration(klass)
click to toggle source
# File lib/puppet-lint/plugins/check_wmf_styleguide.rb, line 370 def illegal_class_declaration(klass) # Classes and defines should NEVER declare # classes from other modules. # If a class has multiple such occurrences, it should be a profile klass.declared_classes.each do |token| class_name = token.value.gsub(/^::/, '') module_name = class_name.split('::')[0] next if klass.module_name == module_name msg = { message: "wmf-style: #{klass.type} '#{klass.name}' declares class #{class_name} from another module", line: token.line, column: token.column } notify :error, msg end end
include_not_profile(klass)
click to toggle source
# File lib/puppet-lint/plugins/check_wmf_styleguide.rb, line 354 def include_not_profile(klass) # Checks that a role only includes other roles and profiles modules_include_ok = ['role', 'profile'] klass.included_classes.each do |token| class_name = token.value.gsub(/^::/, '') module_name = class_name.split('::')[0] next if modules_include_ok.include? module_name msg = { message: "wmf-style: role '#{klass.name}' includes #{class_name} which is neither a role nor a profile", line: token.line, column: token.column } notify :error, msg end end
legacy_hiera(klass)
click to toggle source
# File lib/puppet-lint/plugins/check_wmf_styleguide.rb, line 251 def legacy_hiera(klass) # No calls to legacy hiera tokens = klass.legacy_hiera_calls tokens.each do |token| msg = { message: "wmf-style: Found deprecated function (#{token.value}) " \ "in #{klass.type} '#{klass.name}', use lookup instead", line: token.line, column: token.column } notify :error, msg end end
legacy_validate_errors(klass)
click to toggle source
# File lib/puppet-lint/plugins/check_wmf_styleguide.rb, line 306 def legacy_validate_errors(klass) # Helper for printing errors nicely klass.legacy_validate_calls.each do |token| msg = { message: "wmf-style: Found legacy function (#{token.value}) call in #{klass.type} '#{klass.name}'", line: token.line, column: token.column } notify :error, msg end end
lookup(klass)
click to toggle source
# File lib/puppet-lint/plugins/check_wmf_styleguide.rb, line 246 def lookup(klass) # Searches for lookup calls inside classes and defines. lookup_errors(klass.lookup_calls, klass) end
lookup_errors(tokens, klass)
click to toggle source
# File lib/puppet-lint/plugins/check_wmf_styleguide.rb, line 292 def lookup_errors(tokens, klass) # Helper for printing lookup errors nicely tokens.each do |token| # lookup ( 'some::label' ) value = token.next_code_token.next_code_token.value msg = { message: "wmf-style: Found lookup call in #{klass.type} '#{klass.name}' for '#{value}'", line: token.line, column: token.column } notify :error, msg end end
lookup_not_in_params(klass)
click to toggle source
# File lib/puppet-lint/plugins/check_wmf_styleguide.rb, line 281 def lookup_not_in_params(klass) # Checks if a lookup call is not in a parameter declaration. Used to check profiles # Any lookup call that is not inside a parameter declaration is a violation tokens = klass.lookup_calls.reject do |token| maybe_param = token.prev_code_token.prev_code_token klass.params.keys.include?(maybe_param.value) end lookup_errors(tokens, klass) end
node_indexes()
click to toggle source
# File lib/puppet-lint/plugins/check_wmf_styleguide.rb, line 479 def node_indexes # Override the faulty "node_indexes" method from puppet-lint result = [] in_node_def = false braces_level = nil start = 0 title_tokens = [] tokens.each_with_index do |token, i| if token.type == :NODE braces_level = 0 start = i in_node_def = true next end # If we're not within a node definition, skip this token next unless in_node_def case token.type when :LBRACE title_tokens = tokens[start + 1..(i - 1)].select(&:node_def?) if braces_level.zero? braces_level += 1 when :RBRACE braces_level -= 1 if braces_level.zero? result << { start: start, end: i, tokens: tokens[start..i], title_tokens: title_tokens } in_node_def = false end end end result end
params_without_lookup_defaults(klass)
click to toggle source
# File lib/puppet-lint/plugins/check_wmf_styleguide.rb, line 265 def params_without_lookup_defaults(klass) # Finds parameters that have no lookup-defined default value. klass.params.each do |name, data| next unless data[:value].select(&:lookup?).empty? common = "wmf-style: Parameter '#{name}' of class '#{klass.name}'" message = if data[:value].select(&:legacy_hiera?).empty? "#{common} has no call to lookup" else "#{common} hiera is deprecated use lookup" end token = data[:param] msg = { message: message, line: token.line, column: token.column } notify :error, msg end end
profile_illegal_include(klass)
click to toggle source
# File lib/puppet-lint/plugins/check_wmf_styleguide.rb, line 318 def profile_illegal_include(klass) # Check if a profile includes any class that's not allowed there. # Allowed are: any other profile, or a class from the passwords module, # plus a couple parameter classes modules_include_ok = ['profile', 'passwords'] classes_include_ok = ['lvs::configuration', 'network::constants'] klass.included_classes.each do |token| class_name = token.value.gsub(/^::/, '') next if classes_include_ok.include? class_name module_name = class_name.split('::')[0] next if modules_include_ok.include? module_name msg = { message: "wmf-style: profile '#{klass.name}' includes non-profile class #{class_name}", line: token.line, column: token.column } notify :error, msg end end