docs: def keys_present(name, number, save_dir, region=None, key=None, keyid=None, profile=None,
                   save_format="{2}\n{0}\n{3}\n{1}\n"):
      '''
      .. versionadded:: 2015.8.0
  
      Ensure the IAM access keys are present.
  
      name (string)
          The name of the new user.
  
      number (int)
          Number of keys that user should have.
  
      save_dir (string)
          The directory that the key/keys will be saved. Keys are saved to a file named according
          to the username privided.
  
      region (string)
          Region to connect to.
  
      key (string)
          Secret key to be used.
  
      keyid (string)
          Access key to be used.
  
      profile (dict)
          A dict with region, key and keyid, or a pillar key (string)
          that contains a dict with region, key and keyid.
  
      save_format (dict)
          Save format is repeated for each key. Default format is
          "{2}\\n{0}\\n{3}\\n{1}\\n", where {0} and {1} are placeholders for new
          key_id and key respectively, whereas {2} and {3} are "key_id-{number}"
          and 'key-{number}' strings kept for compatibility.
      '''
      ret = {'name': name, 'result': True, 'comment': '', 'changes': {}}
      if not __salt__['boto_iam.get_user'](name, region, key, keyid, profile):
          ret['result'] = False
          ret['comment'] = 'IAM User {0} does not exist.'.format(name)
          return ret
      if not isinstance(number, int):
          ret['comment'] = 'The number of keys must be an integer.'
          ret['result'] = False
          return ret
      if not os.path.isdir(save_dir):
          ret['comment'] = 'The directory {0} does not exist.'.format(save_dir)
          ret['result'] = False
          return ret
      keys = __salt__['boto_iam.get_all_access_keys'](user_name=name, region=region, key=key,
                                                      keyid=keyid, profile=profile)
      if isinstance(keys, six.string_types):
          log.debug('keys are : false %s', keys)
          error, message = _get_error(keys)
          ret['comment'] = 'Could not get keys.\n{0}\n{1}'.format(error, message)
          ret['result'] = False
          return ret
      keys = keys['list_access_keys_response']['list_access_keys_result']['access_key_metadata']
      log.debug('Keys are : %s.', keys)
      if len(keys) >= number:
          ret['comment'] = 'The number of keys exist for user {0}'.format(name)
          ret['result'] = True
          return ret
      if __opts__['test']:
          ret['comment'] = 'Access key is set to be created for {0}.'.format(name)
          ret['result'] = None
          return ret
      new_keys = {}
      for i in range(number-len(keys)):
          created = __salt__['boto_iam.create_access_key'](name, region, key, keyid, profile)
          if isinstance(created, six.string_types):
              error, message = _get_error(created)
              ret['comment'] = 'Could not create keys.\n{0}\n{1}'.format(error, message)
              ret['result'] = False
              return ret
          log.debug('Created is : %s', created)
          response = 'create_access_key_response'
          result = 'create_access_key_result'
          new_keys[six.text_type(i)] = {}
          new_keys[six.text_type(i)]['key_id'] = created[response][result]['access_key']['access_key_id']
          new_keys[six.text_type(i)]['secret_key'] = created[response][result]['access_key']['secret_access_key']
      try:
          with salt.utils.files.fopen('{0}/{1}'.format(save_dir, name), 'a') as _wrf:
              for key_num, key in new_keys.items():
                  key_id = key['key_id']
                  secret_key = key['secret_key']
                  _wrf.write(salt.utils.stringutils.to_str(
                      save_format.format(
                          key_id,
                          secret_key,
                          'key_id-{0}'.format(key_num),
                          'key-{0}'.format(key_num)
                      )
                  ))
          ret['comment'] = 'Keys have been written to file {0}/{1}.'.format(save_dir, name)
          ret['result'] = True
          ret['changes'] = new_keys
          return ret
      except IOError:
          ret['comment'] = 'Could not write to file {0}/{1}.'.format(save_dir, name)
          ret['result'] = False
          return ret