Module: Puppet::Util::Yaml
- Defined in:
- lib/puppet/util/yaml.rb
Defined Under Namespace
Classes: YamlLoadError
Constant Summary collapse
- YamlLoadExceptions =
[::StandardError, ::Psych::Exception]
Class Method Summary collapse
- .dump(structure, filename) ⇒ Object
-
.load_file(filename, default_value = false, strip_classes = false) ⇒ Object
deprecated
Deprecated.
Use #safe_load_file instead.
-
.safe_load(yaml, allowed_classes = [], filename = nil) ⇒ Object
Safely load the content as YAML.
-
.safe_load_file(filename, allowed_classes = []) ⇒ Object
Safely load the content from a file as YAML.
-
.safe_load_file_if_valid(filename, allowed_classes = []) ⇒ Object
Safely load the content from a file as YAML if contents are in valid format.
Class Method Details
.dump(structure, filename) ⇒ Object
86 87 88 89 90 |
# File 'lib/puppet/util/yaml.rb', line 86 def self.dump(structure, filename) Puppet::FileSystem.replace_file(filename, 0660) do |fh| YAML.dump(structure, fh) end end |
.load_file(filename, default_value = false, strip_classes = false) ⇒ Object
Deprecated.
Use #safe_load_file instead.
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/puppet/util/yaml.rb', line 61 def self.load_file(filename, default_value = false, strip_classes = false) Puppet.deprecation_warning(_("Puppet::Util::Yaml.load_file is deprecated. Use safe_load_file instead.")) if(strip_classes) then data = YAML::parse_file(filename) data.root.each do |o| if o.respond_to?(:tag=) and o.tag != nil and o.tag.start_with?("!ruby") o.tag = nil end end data.to_ruby || default_value else if Gem::Version.new(Psych::VERSION) >= Gem::Version.new('3.3.2') yaml = YAML.unsafe_load_file(filename) else yaml = YAML.load_file(filename) end yaml || default_value end rescue *YamlLoadExceptions => detail raise YamlLoadError.new(detail., detail) end |
.safe_load(yaml, allowed_classes = [], filename = nil) ⇒ Object
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.
26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/puppet/util/yaml.rb', line 26 def self.safe_load(yaml, allowed_classes = [], filename = nil) if Gem::Version.new(Psych::VERSION) >= Gem::Version.new('3.1.0') data = YAML.safe_load(yaml, permitted_classes: allowed_classes, aliases: true, filename: filename) else data = YAML.safe_load(yaml, allowed_classes, [], true, filename) end data = false if data.nil? data rescue ::Psych::DisallowedClass => detail path = filename ? "(#{filename})" : "(<unknown>)" raise YamlLoadError.new("#{path}: #{detail.}", detail) rescue *YamlLoadExceptions => detail raise YamlLoadError.new(detail., detail) end |
.safe_load_file(filename, allowed_classes = []) ⇒ Object
Safely load the content from a file as YAML.
44 45 46 47 |
# File 'lib/puppet/util/yaml.rb', line 44 def self.safe_load_file(filename, allowed_classes = []) yaml = Puppet::FileSystem.read(filename, :encoding => 'bom|utf-8') safe_load(yaml, allowed_classes, filename) end |
.safe_load_file_if_valid(filename, allowed_classes = []) ⇒ Object
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.
53 54 55 56 57 58 |
# File 'lib/puppet/util/yaml.rb', line 53 def self.safe_load_file_if_valid(filename, allowed_classes = []) safe_load_file(filename, allowed_classes) rescue YamlLoadError, ArgumentError, Errno::ENOENT => detail Puppet.debug("Could not retrieve YAML content from '#{filename}': #{detail.}") nil end |