def METHOD_NAME(self):
    """Gather user configuration and hand it off to the template plugin to
    create the files and directories for the new charm.
    """
    output_path = self._get_output_path()
    if os.path.exists(output_path):
        raise CharmGeneratorException(
            '{} exists. Please move it out of the way.'.format(
                output_path))
    if not os.access(os.path.dirname(output_path), os.W_OK):
        raise CharmGeneratorException('Unable to write to {}'.format(
            output_path))
    log.info('Generating charm for %s in %s',
             self.opts.charmname, output_path)
    metadata = self._get_metadata()
    user_config = self._get_user_config()
    user_config.update(metadata=metadata)
    tempdir = self._get_tempdir()
    try:
        self.plugin.METHOD_NAME(user_config, tempdir)
        shutil.copytree(tempdir, output_path, symlinks=True)
    finally:
        self._cleanup(tempdir)