class PuppetValidator::Validators::Syntax
Public Class Methods
new(settings, version = nil)
click to toggle source
# File lib/puppet-validator/validators/syntax.rb, line 3 def initialize(settings, version = nil) @logger = settings.logger # Set the version of Puppet to load if version @logger.warn "Loading Puppet version #{version}." gem('puppet', version) end # load in the constructor to avoid polluting the parent process require 'puppet' require 'puppet/parser' Puppet.initialize_settings rescue nil Puppet.settings[:app_management] = true if Puppet.settings.include? :app_management # set up the base environment Puppet.push_context(Puppet.base_context(Puppet.settings), 'Setup for Puppet Validator') rescue nil # disable as much disk access as possible Puppet::Node::Facts.indirection.terminus_class = :memory Puppet::Node.indirection.cache_class = nil end
Public Instance Methods
render!()
click to toggle source
# File lib/puppet-validator/validators/syntax.rb, line 49 def render! require 'graphviz' begin raise 'No Puppet environment found' if Puppet[:code].empty? # neuter functions that might run code on the master during compilation Puppet::Parser::Functions.newfunction(:generate, :type => :rvalue) { |args| true } Puppet::Parser::Functions.newfunction(:template, :type => :rvalue) { |args| args.first } Puppet::Parser::Functions.newfunction(:inline_template, :type => :rvalue) { |args| args.first } node = Puppet::Node.indirection.find('validator') catalog = Puppet::Resource::Catalog.indirection.find(node.name, :use_node => node) # These calls are failing due to an internal method not being available in 2 & 3.x. Suspect # that it's related to the compiler not being set up fully? catalog.remove_resource(catalog.resource("Stage", :main)) rescue nil catalog.remove_resource(catalog.resource("Class", :settings)) rescue nil graph = catalog.to_ral.relationship_graph.to_dot svg = GraphViz.parse_string(graph) do |graph| graph[:label] = 'Resource Relationships' graph.each_node do |name, node| next unless name.start_with? 'Whit' newname = name.dup newname.sub!('Admissible_class', 'Starting Class') newname.sub!('Completed_class', 'Finishing Class') node[:label] = newname[5..-2] end end.output(:svg => String) rescue => detail @logger.warn detail.message @logger.debug detail.backtrace.join "\n" return detail.message end svg end
validate(data)
click to toggle source
# File lib/puppet-validator/validators/syntax.rb, line 26 def validate(data) begin Puppet[:code] = data if Puppet::Node::Environment.respond_to?(:create) validation_environment = Puppet::Node::Environment.create(:production, []) validation_environment.check_for_reparse else validation_environment = Puppet::Node::Environment.new(:production) end validation_environment.known_resource_types.clear {:status => true, :message => 'Syntax OK'} rescue => detail @logger.warn detail.message err = {:status => false, :message => detail.message} err[:line] = detail.line if detail.methods.include? :line err[:pos] = detail.pos if detail.methods.include? :pos err end end