module Puppet::Util::Yaml
Constants
- YamlLoadExceptions
Public Class Methods
# File lib/puppet/util/yaml.rb 61 def self.dump(structure, filename) 62 Puppet::FileSystem.replace_file(filename, 0660) do |fh| 63 YAML.dump(structure, fh) 64 end 65 end
Safely load the content as YAML. By default only the following classes can be deserialized:
-
TrueClass
-
FalseClass
-
NilClass
-
Numeric
-
String
-
Array
-
Hash
Attempting to deserialize other classes will raise an YamlLoadError exception unless they are specified in the array of allowed_classes. @param [String] yaml The yaml content to parse. @param [Array] allowed_classes Additional list of classes that can be deserialized. @param [String] filename The filename to load from, used if an exception is raised. @raise [YamlLoadException] If deserialization fails. @return The parsed YAML, which can be Hash, Array or scalar types.
# File lib/puppet/util/yaml.rb 27 def self.safe_load(yaml, allowed_classes = [], filename = nil) 28 if Gem::Version.new(Psych::VERSION) >= Gem::Version.new('3.1.0') 29 data = YAML.safe_load(yaml, permitted_classes: allowed_classes, aliases: true, filename: filename) 30 else 31 data = YAML.safe_load(yaml, allowed_classes, [], true, filename) 32 end 33 data = false if data.nil? 34 data 35 rescue ::Psych::DisallowedClass => detail 36 path = filename ? "(#{filename})" : "(<unknown>)" 37 raise YamlLoadError.new("#{path}: #{detail.message}", detail) 38 rescue *YamlLoadExceptions => detail 39 raise YamlLoadError.new(detail.message, detail) 40 end
Safely load the content from a file as YAML.
@see Puppet::Util::Yaml.safe_load
# File lib/puppet/util/yaml.rb 45 def self.safe_load_file(filename, allowed_classes = []) 46 yaml = Puppet::FileSystem.read(filename, :encoding => 'bom|utf-8') 47 safe_load(yaml, allowed_classes, filename) 48 end
Safely load the content from a file as YAML if contents are in valid format. This method does not raise error but returns `nil` when invalid file is given.
# File lib/puppet/util/yaml.rb 54 def self.safe_load_file_if_valid(filename, allowed_classes = []) 55 safe_load_file(filename, allowed_classes) 56 rescue YamlLoadError, ArgumentError, Errno::ENOENT => detail 57 Puppet.debug("Could not retrieve YAML content from '#{filename}': #{detail.message}") 58 nil 59 end