Uploaded image for project: 'Puppet'
  1. Puppet
  2. PUP-7658

Puppet 4.10.2 fails when Facter facts contains ampersand

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Critical
    • Resolution: Fixed
    • Affects Version/s: PUP 4.10.2
    • Fix Version/s: PUP 4.10.3
    • Component/s: None
    • Labels:
      None
    • Template:
    • Team:
      Agent
    • Story Points:
      2
    • Sprint:
      Agent 2017-06-28
    • Method Found:
      Needs Assessment
    • QA Risk Assessment:
      No Action

      Description

      Some of our Puppet users did upgrade to the newest Puppet agent version 4.10.2 and have failing Puppet runs when one of their custom Facts contain an ampersand character.

      Facter itself does return the custom fact correctly.

      Everything works with Puppet agent version 4.10.1

      Steps to reproduce:

      $ puppet --version
      4.10.2
      $ cat > /etc/facter/facts.d/foo.yaml
      ---
      fact: "foo & bar"
      $ facter --version
      3.6.5 (commit f1dd8bb97a2a5254093862bc0168a464e72f135a)
      $ facter fact
      foo & bar
      

      Puppet agent output:

      Info: Retrieving pluginfacts
      Info: Retrieving plugin
      Info: Loading facts
      Error: Could not retrieve catalog from remote server: Error 500 on SERVER: Server Error: Could not intern from pson: expected value in object at '"foo '!
      Warning: Not using cache on failed catalog
      Error: Could not retrieve catalog; skipping run
      

      We suspect the bug could originate from this commit:

      https://github.com/puppetlabs/puppet/commit/fb99479df8dcc07f19cc9c2bff6b5c79dbcc1f

      which changed the way the Facter fact values where formated into pson.

      Puppetserver log:

      2017-06-14 12:32:44,356 ERROR [qtp1802912927-72] [puppetserver] Puppet Server Error: Could not intern from pson: expected value in object at '"foo '!
      /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/external/pson/pure/parser.rb:292:in `parse_object'
      /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/external/pson/pure/parser.rb:225:in `parse_value'
      /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/external/pson/pure/parser.rb:280:in `parse_object'
      /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/external/pson/pure/parser.rb:92:in `parse'
      /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/external/pson/common.rb:121:in `parse'
      /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/network/formats.rb:89:in `intern'
      /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/network/format_support.rb:12:in `convert_from'
      /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/indirector/catalog/compiler.rb:30:in `extract_facts_from_request'
      /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/profiler/around_profiler.rb:58:in `profile'
      /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/profiler.rb:51:in `profile'
      /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/indirector/catalog/compiler.rb:23:in `extract_facts_from_request'
      /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/indirector/catalog/compiler.rb:50:in `find'
      /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/indirector/indirection.rb:194:in `find'
      /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/network/http/api/indirected_routes.rb:121:in `do_find'
      /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/network/http/api/indirected_routes.rb:48:in `call'
      /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/context.rb:65:in `override'
      /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet.rb:306:in `override'
      /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/network/http/api/indirected_routes.rb:47:in `call'
      /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/network/http/route.rb:82:in `process'
      org/jruby/RubyArray.java:1613:in `each'
      /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/network/http/route.rb:81:in `process'
      /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/network/http/route.rb:87:in `process'
      /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/network/http/route.rb:87:in `process'
      /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/network/http/handler.rb:60:in `process'
      /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/profiler/around_profiler.rb:58:in `profile'
      /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/profiler.rb:51:in `profile'
      /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/network/http/handler.rb:58:in `process'
      file:/opt/puppetlabs/server/apps/puppetserver/puppet-server-release.jar!/puppetserver-lib/puppet/server/master.rb:42:in `handleRequest'
      Puppet$$Server$$Master_1215734539.gen:13:in `handleRequest'
      request_handler_core.clj:273:in `invoke'
      jruby_request.clj:46:in `invoke'
      jruby_request.clj:31:in `invoke'
      request_handler_service.clj:34:in `handle_request'
      request_handler.clj:3:in `invoke'
      request_handler.clj:3:in `invoke'
      core.clj:2515:in `invoke'
      ring_middleware.clj:284:in `invoke'
      core.clj:168:in `invoke'
      core.clj:211:in `invoke'
      core.clj:45:in `invoke'
      core.clj:343:in `invoke'
      core.clj:51:in `invoke'
      ringutils.clj:83:in `invoke'
      master_core.clj:428:in `invoke'
      ring.clj:21:in `invoke'
      ring.clj:12:in `invoke'
      comidi.clj:249:in `invoke'
      jetty9_core.clj:424:in `invoke'
      normalized_uri_helpers.clj:80:in `invoke'
      

        Attachments

          Issue Links

            Activity

              People

              Assignee:
              ethan Ethan Brown
              Reporter:
              xorpaul Andreas Paul
              Votes:
              4 Vote for this issue
              Watchers:
              14 Start watching this issue

                Dates

                Created:
                Updated:
                Resolved:

                  Zendesk Support