code: def _write_config_file(items, global_vars, template, project_name, out_dir,
                         remotes):
      
      config_dir = utils.safe_makedir(os.path.join(out_dir, "config"))
      out_config_file = os.path.join(config_dir, "%s.yaml" % project_name)
      out = {"fc_name": project_name,
             "upload": {"dir": "../final"},
             "details": items}
      if remotes.get("base"):
          r_base = objectstore.parse_remote(remotes.get("base"))
          out["upload"]["method"] = r_base.store
          out["upload"]["bucket"] = r_base.bucket
          out["upload"]["folder"] = os.path.join(r_base.key, "final") if r_base.key else "final"
          if r_base.region:
              out["upload"]["region"] = r_base.region
      if global_vars:
          out["globals"] = global_vars
      for k, v in template.items():
          if k not in ["details"]:
              out[k] = v
      if os.path.exists(out_config_file):
          shutil.move(out_config_file,
                      out_config_file + ".bak%s" % datetime.datetime.now().strftime("%Y-%m-%d-%H-%M-%S"))
      with open(out_config_file, "w") as out_handle:
          yaml.safe_dump(out, out_handle, default_flow_style=False, allow_unicode=False)
      return out_config_file
docs: Write configuration file, adding required top level attributes.