# Imports from commonkit import split_csv from .base import Command, Template from .django import DJANGO_MAPPINGS from .messages import MESSAGE_MAPPINGS from .mysql import MYSQL_MAPPINGS from .pgsql import PGSQL_MAPPINGS from .php import PHP_MAPPINGS from .posix import POSIX_MAPPINGS from .python import PYTHON_MAPPINGS # Exports __all__ = ( "UBUNTU_MAPPINGS", "apache", "apache_disable_module", "apache_disable_site", "apache_enable_module", "apache_enable_site", "apache_reload", "apache_restart", "apache_start", "apache_stop", "apache_test", "service_reload", "service_restart", "service_start", "service_stop", "system", "system_install", "system_reboot", "system_update", "system_upgrade", "system_uninstall", "template", "user", ) # Functions def apache(op, **kwargs): """Execute an Apache-related command. - op (str): The operation to perform; reload, restart, start, stop, test. """ if op == "reload": return apache_reload(**kwargs) elif op == "restart": return apache_restart(**kwargs) elif op == "start": return apache_start(**kwargs) elif op == "stop": return apache_stop(**kwargs) elif op == "test": return apache_test(**kwargs) else: raise NameError("Unrecognized or unsupported apache operation: %s" % op) def apache_disable_module(name, **kwargs): """Disable an Apache module. - name (str): The module name. """ kwargs.setdefault("comment", "disable %s apache module" % name) return Command("a2dismod %s" % name, **kwargs) def apache_disable_site(name, **kwargs): """Disable an Apache site. - name (str): The domain name. """ kwargs.setdefault("comment", "disable %s apache site" % name) return Command("a2dissite %s" % name, **kwargs) def apache_enable_module(name, **kwargs): """Enable an Apache module. - name (str): The module name. """ kwargs.setdefault("comment", "enable %s apache module" % name) return Command("a2enmod %s" % name, **kwargs) def apache_enable_site(name, **kwargs): """Enable an Apache site. """ kwargs.setdefault("comment", "enable %s apache module" % name) return Command("a2ensite %s" % name, **kwargs) def apache_reload(**kwargs): kwargs.setdefault("comment", "reload apache") kwargs.setdefault("register", "apache_reloaded") return Command("service apache2 reload", **kwargs) def apache_restart(**kwargs): kwargs.setdefault("comment", "restart apache") kwargs.setdefault("register", "apache_restarted") return Command("service apache2 restart", **kwargs) def apache_start(**kwargs): kwargs.setdefault("comment", "start apache") kwargs.setdefault("register", "apache_started") return Command("service apache2 start", **kwargs) def apache_stop(**kwargs): kwargs.setdefault("comment", "stop apache") return Command("service apache2 stop", **kwargs) def apache_test(**kwargs): kwargs.setdefault("comment", "check apache configuration") kwargs.setdefault("register", "apache_checks_out") return Command("apachectl configtest", **kwargs) def service_reload(name, **kwargs): """Reload a service. - name (str): The service name. """ kwargs.setdefault("comment", "reload %s service" % name) kwargs.setdefault("register", "%s_reloaded" % name) return Command("service %s reload" % name, **kwargs) def service_restart(name, **kwargs): """Restart a service. - name (str): The service name. """ kwargs.setdefault("comment", "restart %s service" % name) kwargs.setdefault("register", "%s_restarted" % name) return Command("service %s restart" % name, **kwargs) def service_start(name, **kwargs): """Start a service. - name (str): The service name. """ kwargs.setdefault("comment", "start %s service" % name) kwargs.setdefault("register", "%s_started" % name) return Command("service %s start" % name, **kwargs) def service_stop(name, **kwargs): """Stop a service. - name (str): The service name. """ kwargs.setdefault("comment", "stop %s service" % name) kwargs.setdefault("register", "%s_stopped" % name) return Command("service %s stop" % name, **kwargs) def system(op, **kwargs): """Perform a system operation. - op (str): The operation to perform; reboot, update, upgrade. """ if op == "reboot": return system_reboot(**kwargs) elif op == "update": return system_update(**kwargs) elif op == "upgrade": return system_upgrade(**kwargs) else: raise NameError("Unrecognized or unsupported system operation: %s" % op) def system_install(name, **kwargs): """Install a system-level package. - name (str): The name of the package to install. """ kwargs.setdefault("comment", "install system package %s" % name) return Command("apt install -y %s" % name, **kwargs) def system_reboot(**kwargs): kwargs.setdefault("comment", "reboot the system") return Command("reboot", **kwargs) def system_uninstall(name, **kwargs): """Uninstall a system-level package. - name (str): The name of the package to uninstall. """ kwargs.setdefault("comment", "remove system package %s" % name) return Command("apt uninstall -y %s" % name, **kwargs) def system_update(**kwargs): kwargs.setdefault("comment", "update system package info") return Command("apt update -y", **kwargs) def system_upgrade(**kwargs): kwargs.setdefault("comment", "upgrade the system") return Command("apt upgrade -y", **kwargs) def user(name, groups=None, home=None, op="add", password=None, **kwargs): """Create or remove a user. - name (str): The user name. - groups (str | list): A list of groups to which the user should belong. - home (str): The path to the user's home directory. - op (str); The operation to perform; ``add`` or ``remove``. - password (str): The user's password. (NOT IMPLEMENTED) """ if op == "add": kwargs.setdefault("comment", "create a user named %s" % name) commands = list() # The gecos switch eliminates the prompts. a = list() a.append('adduser %s --disabled-password --gecos ""' % name) if home is not None: a.append("--home %s" % home) commands.append(Command(" ".join(a), **kwargs)) if type(groups) is str: groups = split_csv(groups, smart=False) if type(groups) in [list, tuple]: for group in groups: commands.append(Command("adduser %s %s" % (name, group), **kwargs)) a = list() for c in commands: a.append(c.get_statement(include_comment=True)) return Command("\n".join(a), **kwargs) elif op == "remove": kwargs.setdefault("comment", "remove a user named %s" % name) return Command("deluser %s" % name, **kwargs) else: raise NameError("Unsupported or unrecognized operation: %s" % op) UBUNTU_MAPPINGS = { 'apache': apache, 'apache.disable_module': apache_disable_module, 'apache.disable_site': apache_disable_site, 'apache.enable_module': apache_enable_module, 'apache.enable_site': apache_enable_site, 'apache.reload': apache_reload, 'apache.restart': apache_restart, 'apache.start': apache_start, 'apache.stop': apache_stop, 'apache.test': apache_test, 'install': system_install, 'reboot': system_reboot, 'reload': service_reload, 'restart': service_restart, 'start': service_start, 'stop': service_stop, 'system': system, 'update': system_update, 'uninstall': system_uninstall, 'upgrade': system_upgrade, 'user': user, } UBUNTU_MAPPINGS.update(DJANGO_MAPPINGS) UBUNTU_MAPPINGS.update(MESSAGE_MAPPINGS) UBUNTU_MAPPINGS.update(MYSQL_MAPPINGS) UBUNTU_MAPPINGS.update(PGSQL_MAPPINGS) UBUNTU_MAPPINGS.update(PHP_MAPPINGS) UBUNTU_MAPPINGS.update(POSIX_MAPPINGS) UBUNTU_MAPPINGS.update(PYTHON_MAPPINGS)