def uninstall(self, unique_id, configs=None):
<EOL>if configs is None:<EOL><INDENT>configs = {}<EOL><DEDENT>tmp = self.default_configs.copy()<EOL>tmp.update(configs)<EOL>configs = tmp<EOL>if unique_id in self.processes:<EOL><INDENT>hostname = self.processes[unique_id].hostname<EOL><DEDENT>else:<EOL><INDENT>logger.error("<STR_LIT>".format(unique_id))<EOL>raise DeploymentError("<STR_LIT>".format(unique_id))<EOL><DEDENT>install_path = self.processes[unique_id].install_path<EOL>directories_to_remove = self.default_configs.get('<STR_LIT>', [])<EOL>directories_to_remove.extend(configs.get('<STR_LIT>', []))<EOL>if install_path not in directories_to_remove:<EOL><INDENT>directories_to_remove.append(install_path)<EOL><DEDENT>with get_ssh_client(hostname, username=runtime.get_username(), password=runtime.get_password()) as ssh:<EOL><INDENT>for directory_to_remove in directories_to_remove:<EOL><INDENT>log_output(better_exec_command(ssh, "<STR_LIT>".format(directory_to_remove),<EOL>"<STR_LIT>".format(directory_to_remove)))<EOL><DEDENT><DEDENT>
uninstall the service.  If the deployer has not started a service with
        `unique_id` this will raise a DeploymentError.  This considers one config:
        'additional_directories': a list of directories to remove in addition to those provided in the constructor plus
         the install path. This will update the directories to remove but does not override it
        :param unique_id:
        :param configs:
        :return: