docs: def _get_token_and_url_from_master():
      '''
      Get a token with correct policies for the minion, and the url to the Vault
      service
      '''
      minion_id = __grains__['id']
      pki_dir = __opts__['pki_dir']
  
      # When rendering pillars, the module executes on the master, but the token
      # should be issued for the minion, so that the correct policies are applied
      if __opts__.get('__role', 'minion') == 'minion':
          private_key = '{0}/minion.pem'.format(pki_dir)
          log.debug('Running on minion, signing token request with key %s',
                    private_key)
          signature = base64.b64encode(salt.crypt.sign_message(
              private_key,
              minion_id
          ))
          result = __salt__['publish.runner'](
              'vault.generate_token',
              arg=[minion_id, signature]
          )
      else:
          private_key = '{0}/master.pem'.format(pki_dir)
          log.debug('Running on master, signing token request for %s with key %s',
                    minion_id, private_key)
          signature = base64.b64encode(salt.crypt.sign_message(
              private_key,
              minion_id
          ))
          result = __salt__['saltutil.runner'](
              'vault.generate_token',
              minion_id=minion_id,
              signature=signature,
              impersonated_by_master=True
          )
  
      if not result:
          log.error('Failed to get token from master! No result returned - '
                    'is the peer publish configuration correct?')
          raise salt.exceptions.CommandExecutionError(result)
      if not isinstance(result, dict):
          log.error('Failed to get token from master! '
                    'Response is not a dict: %s', result)
          raise salt.exceptions.CommandExecutionError(result)
      if 'error' in result:
          log.error('Failed to get token from master! '
                    'An error was returned: %s', result['error'])
          raise salt.exceptions.CommandExecutionError(result)
      return {
          'url': result['url'],
          'token': result['token'],
          'verify': result.get('verify', None),
      }