docs: def verify_data(self, data):
          '''
          Verify the data, return an error statement if something is wrong
          '''
          errors = []
          if 'state' not in data:
              errors.append('Missing "state" data')
          if 'fun' not in data:
              errors.append('Missing "fun" data')
          if 'name' not in data:
              errors.append('Missing "name" data')
          if data['name'] and not isinstance(data['name'], six.string_types):
              errors.append(
                  'ID \'{0}\' {1}is not formed as a string, but is a {2}'.format(
                      data['name'],
                      'in SLS \'{0}\' '.format(data['__sls__'])
                          if '__sls__' in data else '',
                      type(data['name']).__name__
                  )
              )
          if errors:
              return errors
          full = data['state'] + '.' + data['fun']
          if full not in self.states:
              if '__sls__' in data:
                  errors.append(
                      'State \'{0}\' was not found in SLS \'{1}\''.format(
                          full,
                          data['__sls__']
                          )
                      )
                  reason = self.states.missing_fun_string(full)
                  if reason:
                      errors.append('Reason: {0}'.format(reason))
              else:
                  errors.append(
                          'Specified state \'{0}\' was not found'.format(
                              full
                              )
                          )
          else:
              # First verify that the parameters are met
              aspec = salt.utils.args.get_function_argspec(self.states[full])
              arglen = 0
              deflen = 0
              if isinstance(aspec.args, list):
                  arglen = len(aspec.args)
              if isinstance(aspec.defaults, tuple):
                  deflen = len(aspec.defaults)
              for ind in range(arglen - deflen):
                  if aspec.args[ind] not in data:
                      errors.append(
                          'Missing parameter {0} for state {1}'.format(
                              aspec.args[ind],
                              full
                          )
                      )
          # If this chunk has a recursive require, then it will cause a
          # recursive loop when executing, check for it
          reqdec = ''
          if 'require' in data:
              reqdec = 'require'
          if 'watch' in data:
              # Check to see if the service has a mod_watch function, if it does
              # not, then just require
              # to just require extend the require statement with the contents
              # of watch so that the mod_watch function is not called and the
              # requisite capability is still used
              if '{0}.mod_watch'.format(data['state']) not in self.states:
                  if 'require' in data:
                      data['require'].extend(data.pop('watch'))
                  else:
                      data['require'] = data.pop('watch')
                  reqdec = 'require'
              else:
                  reqdec = 'watch'
          if reqdec:
              for req in data[reqdec]:
                  reqfirst = next(iter(req))
                  if data['state'] == reqfirst:
                      if (fnmatch.fnmatch(data['name'], req[reqfirst])
                              or fnmatch.fnmatch(data['__id__'], req[reqfirst])):
                          err = ('Recursive require detected in SLS {0} for'
                                 ' require {1} in ID {2}').format(
                                     data['__sls__'],
                                     req,
                                     data['__id__'])
                          errors.append(err)
          return errors