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

Type and provider info should be logged when prefetch fails

    Details

    • Template:
      PUP Bug Template
    • Epic Link:
    • Team:
      Coremunity
    • Sprint:
      Platform Core KANBAN
    • Method Found:
      Customer Feedback
    • CS Priority:
      Reviewed
    • Zendesk Ticket IDs:
      33723
    • Zendesk Ticket Count:
      1
    • Release Notes:
      Bug Fix
    • Release Notes Summary:
      Puppet will now log exceptions that happen during prefetch. Also exception handling in prefetch was fixed to the correct set of exceptions.
    • QA Risk Assessment:
      Needs Assessment

      Description

      While the puppet agent is applying a catalog, it will pre-fetch resource instances that share a common source. Such as packages from the same provider or cron jobs from the same crontab. Catalog application will abort with an error message if this prefetch operation fails. Often, these errors are terse, cryptic, and give no insight into which sort of resource type failed to fetch (cron job? package? SSH key?). In the case of types based on the ParsedFile provider, the prefetch code is shared among all types which means that the stack trace produced by --trace doesn't even help distinguish what type encountered the error.

      Error messages should be clear about which type and provider failed so that users can proceed directly to debugging instead of puzzling out what happened.

      Reproduction Case

      • Install PE 2018.1.2 on CentOS 7.
      • Configure site.pp in the production environment with a cron resource:

      cat <<EOF > /etc/puppetlabs/code/environments/production/manifests/master_node.pp
      node '$(hostname -f)' {
        cron {'cron job to trigger prefetch':
          command => '/bin/true',
          user => 'root',
          hour => 1,
        }
      }
      EOF
      

      • Write garbage to root's crontab to trigger a parse failure:

      printf '\0\0\0\0odelay' > /var/spool/cron/root
      

      • Run puppet agent -t

      Outcome

      The catalog fails to apply with a very terse, cryptic error message:

      # puppet agent -t
      Info: Using configured environment 'production'
      Info: Retrieving pluginfacts
      Info: Retrieving plugin
      Info: Retrieving locales
      Info: Loading facts
      Info: Caching catalog for pe-201812-master.puppetdebug.vlan
      Info: Applying configuration version '1530028114'
      Error: Failed to apply catalog: Could not parse line "\u0000\u0000\u0000\u0000odelay" (file: root, line: 2)
      

      Expected Outcome

      Error message should include the type and provider name as is done when prefetch fails due to a LoadError or Puppet::MissingCommand error:

      # puppet agent -t
      Info: Using configured environment 'production'
      Info: Retrieving pluginfacts
      Info: Retrieving plugin
      Info: Retrieving locales
      Info: Loading facts
      Info: Caching catalog for pe-201812-master.puppetdebug.vlan
      Info: Applying configuration version '1530028653'
      Error: Failed to apply catalog: Could not prefetch cron provider 'crontab': Could not parse line "\u0000\u0000\u0000\u0000odelay" (file: root, line: 2)
      

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                kris.bosland Kris Bosland
                Reporter:
                chuck Charlie Sharpsteen
              • Votes:
                0 Vote for this issue
                Watchers:
                9 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved:

                  Zendesk Support