def install_ce_ubuntu(version=None) -> bool: """ Returns true if installed, false if was already installed """ # https://docs.docker.com/v17.09/engine/installation/linux/docker-ce/ubuntu/ from carnival.cmd import apt pkgname = "docker-ce" if apt.is_pkg_installed(pkgname, version): log(f"{pkgname} already installed") return False log(f"Installing {pkgname}...") cmd.cli.run("sudo apt-get remove docker docker-engine docker.io") cmd.cli.run("sudo apt-get update") cmd.cli.run( "sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common" ) cmd.cli.run( "curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -", pty=True) cmd.cli.run( 'sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"' ) apt.force_install(pkgname=pkgname, version=version, update=True, hide=True) return True
def install_multiple(*pkg_names: str, update=True, hide=False) -> bool: if all([is_pkg_installed(x) for x in pkg_names]): if not hide: log(f"{','.join(pkg_names)} already installed") return False if update: cmd.cli.run("sudo apt-get update", pty=True, hide=hide) for pkg in pkg_names: install(pkg, update=False, hide=hide) return True
def install(pkgname, version=None, update=True, hide=False) -> bool: """ Install apt package if not installed Returns true if installed, false if was already installed """ if is_pkg_installed(pkgname, version): if version: if not hide: log(f"{pkgname}={version} already installed") else: if not hide: log(f"{pkgname} already installed") return False force_install(pkgname=pkgname, version=version, update=update, hide=hide) return True
def install(pkgname: str, version: Optional[str] = None, update: bool = True, hide: bool = False) -> bool: """ Установить пакет если он еще не установлен в системе :param pkgname: название пакета :param version: версия :param update: запустить apt-get update перед установкой :param hide: скрыть вывод этапов :return: `True` если пакет был установлен, `False` если пакет уже был установлен ранее """ if is_pkg_installed(pkgname, version): if version: if not hide: log(f"{pkgname}={version} already installed") else: if not hide: log(f"{pkgname} already installed") return False force_install(pkgname=pkgname, version=version, update=update, hide=hide) return True
def install_multiple(*pkg_names: str, update: bool = True, hide: bool = False) -> bool: """ Установить несколько пакетов, если они не установлены :param pkg_names: список пакетов которые нужно установить :param update: запустить apt-get update перед установкой :param hide: скрыть вывод этапов :return: `True` если хотя бы один пакет был установлен, `False` если все пакеты уже были установлен ранее """ if all([is_pkg_installed(x) for x in pkg_names]): if not hide: log(f"{','.join(pkg_names)} already installed") return False if update: cmd.cli.run("DEBIAN_FRONTEND=noninteractive sudo apt-get update", pty=True, hide=hide) for pkg in pkg_names: install(pkg, update=False, hide=hide) return True
def install_compose(version="1.25.1", dest="/usr/local/bin/docker-compose"): log(f"Installing compose...") download_link = f"https://github.com/docker/compose/releases/download/{version}/docker-compose-`uname -s`-`uname -m`" cmd.cli.run(f"sudo curl -sL {download_link} -o {dest}") cmd.cli.run(f"sudo chmod a+x {dest}")
def test_log(capsys): with global_context.SetContext(Host("local")): utils.log("Hellotest") captured = capsys.readouterr() assert captured.out == "💃💃💃 local> Hellotest\n"