'Recent' updates
[pwan.org.git] / content / hints / count-your-yaml-dashes.rst
diff --git a/content/hints/count-your-yaml-dashes.rst b/content/hints/count-your-yaml-dashes.rst
new file mode 100644 (file)
index 0000000..31d4409
--- /dev/null
@@ -0,0 +1,45 @@
+Count your YAML dashes
+######################
+
+:date: 2014-08-31
+:tags: hints,ruby,yaml
+:category: hints
+:author: Jude N
+
+I spent way too long the other day thrying to figure out why some Hiera variable wasn't available in some puppet manifest.
+
+It turns out there was a typo in the YAML file where the first line of the file only had two dashes instead of three.
+
+In this cases, the Ruby 1.8.7 yaml parser corrupts the first entry in the yaml file, adding the two dashes to the beginning of the key, instead of throwing a parser error. 
+
+.. code-block:: irb
+
+     irb(main):001:0> require 'yaml'
+     => true
+     irb(main):002:0> a=YAML.load_file("only-two-dashes.yaml")
+     => {"-- first"=>1, "second"=>2}
+     irb(main):003:0> b=YAML.load_file("correctly-including-three-dashes.yaml")
+     => {"first"=>2, "first"=>1}
+
+I couldn't find an existing bug for this, but I didn't look to harrd since this has been fixed in Ruby 1.9 
+
+.. code-block:: irb
+
+     irb(main):001:0> require 'yaml'
+     => true
+     irb(main):002:0> a=YAML.load_file("only-two-dashes.yaml")
+     Psych::SyntaxError: (t1.yaml): couldn't parse YAML at line 1 column 1
+             from /usr/lib/ruby/1.9.1/psych.rb:154:in `parse'
+             from /usr/lib/ruby/1.9.1/psych.rb:154:in `parse_stream'
+             from /usr/lib/ruby/1.9.1/psych.rb:125:in `parse'
+             from /usr/lib/ruby/1.9.1/psych.rb:112:in `load'
+             from /usr/lib/ruby/1.9.1/psych.rb:229:in `load_file'
+             from (irb):2
+             from /usr/bin/irb1.9.1:12:in `<main>'.
+
+So if you're using Ruby 1.8.7, and it looks like the first item in your YAML file is being dropped for some
+reason, check the first line of the file has 3 dashes.
+
+
+
+