docs: def template(client, src, dest, paths, opt):
      """Writes a template using variables from a vault path"""
      key_map = cli_hash(opt.key_map)
      obj = {}
      for path in paths:
          response = client.read(path)
          if not response:
              raise aomi.exceptions.VaultData("Unable to retrieve %s" % path)
          if is_aws(response['data']) and 'sts' not in path:
              renew_secret(client, response, opt)
  
          for s_k, s_v in response['data'].items():
              o_key = s_k
              if s_k in key_map:
                  o_key = key_map[s_k]
  
              k_name = secret_key_name(path, o_key, opt) \
                  .lower() \
                  .replace('-', '_')
              obj[k_name] = s_v
  
      template_obj = blend_vars(obj, opt)
      output = render(grok_template_file(src),
                      template_obj)
      write_raw_file(output, abspath(dest))