diff --git a/README.md b/README.md index d24c4dd..87075f5 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,8 @@ A basic [pyinfra](https://pyinfra.com) deploy that installs and optionally confi + Debian 8/9/10 + CentOS 7/8 +This deploy installs packages in the `docker-ce` ecosystem (`docker-ce`/`docker-ce-cli`/`docker-ce-rootless-extras`) You can specify `docker_version` in the host data and it will install that version for all `docker-ce` packages. + ## Usage See [the example](https://github.com/Fizzadar/pyinfra-docker/tree/master/example) for a more complete example. diff --git a/pyinfra_docker/docker.py b/pyinfra_docker/docker.py index 0d9abfe..059908c 100644 --- a/pyinfra_docker/docker.py +++ b/pyinfra_docker/docker.py @@ -11,7 +11,25 @@ from pyinfra.operations import apt, dnf, files, yum -def _apt_install(): +DEFAULTS = { + "docker_version": None, +} + + +def get_pkgs_to_install(operator): + docker_packages = [ + "docker-ce", + "docker-ce-cli", + "docker-ce-rootless-extras", + ] + if not host.data.docker_version: + return docker_packages + + return [f"{pkg}{operator}{host.data.docker_version}" for pkg in docker_packages] + + + +def _apt_install(packages): apt.packages( name="Install apt requirements to use HTTPS", packages=["apt-transport-https", "ca-certificates"], @@ -40,12 +58,13 @@ def _apt_install(): apt.packages( name="Install Docker via apt", - packages="docker-ce", + packages=packages, update=add_apt_repo.changed, # update if we added the repo + allow_downgrades=True, ) -def _yum_or_dnf_install(yum_or_dnf): +def _yum_or_dnf_install(yum_or_dnf, packages): yum_or_dnf.repo( name="Add the Docker yum repo", src="https://download.docker.com/linux/centos/docker-ce.repo", @@ -60,12 +79,12 @@ def _yum_or_dnf_install(yum_or_dnf): yum_or_dnf.packages( name="Install Docker via yum", - packages=["docker-ce"], + packages=packages, extra_install_args=extra_install_args, ) -@deploy("Deploy Docker") +@deploy("Deploy Docker", data_defaults=DEFAULTS) def deploy_docker(config=None): """ Install Docker on the target machine. @@ -75,10 +94,13 @@ def deploy_docker(config=None): """ if host.get_fact(DebPackages): - _apt_install() + packages = get_pkgs_to_install('=') + _apt_install(packages) elif host.get_fact(RpmPackages): + packages = get_pkgs_to_install('-') _yum_or_dnf_install( dnf if host.get_fact(Which, command="dnf") else yum, + packages, ) else: raise DeployError( diff --git a/setup.py b/setup.py index 09cdddc..86c9e4a 100644 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ if __name__ == "__main__": setup( - version="2.0", + version="2.1", name="pyinfra-docker", description="Install & configure Docker with `pyinfra`.", long_description=readme,