docs: def add_job(self, data, persist=True):
          '''
          Adds a new job to the scheduler. The format is the same as required in
          the configuration file. See the docs on how YAML is interpreted into
          python data-structures to make sure, you pass correct dictionaries.
          '''
  
          # we don't do any checking here besides making sure its a dict.
          # eval() already does for us and raises errors accordingly
          if not isinstance(data, dict):
              raise ValueError('Scheduled jobs have to be of type dict.')
          if not len(data) == 1:
              raise ValueError('You can only schedule one new job at a time.')
  
          # if enabled is not included in the job,
          # assume job is enabled.
          for job in data:
              if 'enabled' not in data[job]:
                  data[job]['enabled'] = True
  
          new_job = next(six.iterkeys(data))
  
          if new_job in self._get_schedule(include_opts=False):
              log.warning("Cannot update job %s, it's in the pillar!", new_job)
  
          elif new_job in self.opts['schedule']:
              log.info('Updating job settings for scheduled job: %s', new_job)
              self.opts['schedule'].update(data)
  
          else:
              log.info('Added new job %s to scheduler', new_job)
              self.opts['schedule'].update(data)
  
          # Fire the complete event back along with updated list of schedule
          evt = salt.utils.event.get_event('minion', opts=self.opts, listen=False)
          evt.fire_event({'complete': True,
                          'schedule': self._get_schedule()},
                         tag='/salt/minion/minion_schedule_add_complete')
  
          if persist:
              self.persist()