From 80b565e6b693492bc7529335f9f092b559bba6a3 Mon Sep 17 00:00:00 2001 From: Ryan McCorry Date: Mon, 6 Feb 2023 17:16:56 +0000 Subject: [PATCH 1/4] v2.1 Add ability to version installations of docker-ce and docker-ce-cli --- pyinfra_docker/docker.py | 31 +++++++++++++++++++++++++------ setup.py | 2 +- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/pyinfra_docker/docker.py b/pyinfra_docker/docker.py index 0d9abfe..f952657 100644 --- a/pyinfra_docker/docker.py +++ b/pyinfra_docker/docker.py @@ -11,7 +11,23 @@ from pyinfra.operations import apt, dnf, files, yum -def _apt_install(): +def get_pkgs_to_install(version): + docker_packages = [ + "docker-ce", + "docker-ce-cli" + ] + if not version: + return docker_packages + + versioned_packages = [] + for pkg in docker_packages: + versioned_packages.append(f"{pkg}={version}") + + return versioned_packages + + + +def _apt_install(packages): apt.packages( name="Install apt requirements to use HTTPS", packages=["apt-transport-https", "ca-certificates"], @@ -40,12 +56,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,13 +77,13 @@ 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") -def deploy_docker(config=None): +def deploy_docker(config=None, version=None): """ Install Docker on the target machine. @@ -74,11 +91,13 @@ def deploy_docker(config=None): config: filename or dict of JSON data """ + packages = get_pkgs_to_install(version) if host.get_fact(DebPackages): - _apt_install() + _apt_install(packages) elif host.get_fact(RpmPackages): _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, From ca6493442debcb943e72d5101d85fb2b15f607e8 Mon Sep 17 00:00:00 2001 From: Ryan McCorry Date: Tue, 7 Feb 2023 15:22:40 +0000 Subject: [PATCH 2/4] Update README and move versioning to global inventory data --- README.md | 2 ++ pyinfra_docker/docker.py | 24 +++++++++++++----------- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index d24c4dd..e24663c 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 your inventory data file 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 f952657..5368bd2 100644 --- a/pyinfra_docker/docker.py +++ b/pyinfra_docker/docker.py @@ -11,19 +11,21 @@ from pyinfra.operations import apt, dnf, files, yum -def get_pkgs_to_install(version): +DEFAULTS = { + "docker_version": None, +} + + +def get_pkgs_to_install(): docker_packages = [ "docker-ce", - "docker-ce-cli" + "docker-ce-cli", + "docker-ce-rootless-extras", ] - if not version: + if not host.data.docker_version: return docker_packages - versioned_packages = [] - for pkg in docker_packages: - versioned_packages.append(f"{pkg}={version}") - - return versioned_packages + return [f"{pkg}={host.data.docker_version}" for pkg in docker_packages] @@ -82,8 +84,8 @@ def _yum_or_dnf_install(yum_or_dnf, packages): ) -@deploy("Deploy Docker") -def deploy_docker(config=None, version=None): +@deploy("Deploy Docker", data_defaults=DEFAULTS) +def deploy_docker(config=None): """ Install Docker on the target machine. @@ -91,7 +93,7 @@ def deploy_docker(config=None, version=None): config: filename or dict of JSON data """ - packages = get_pkgs_to_install(version) + packages = get_pkgs_to_install() if host.get_fact(DebPackages): _apt_install(packages) elif host.get_fact(RpmPackages): From a355b193a639963977c7fad6dfe0491e3e1b1157 Mon Sep 17 00:00:00 2001 From: Ryan McCorry Date: Mon, 13 Mar 2023 12:21:11 +0000 Subject: [PATCH 3/4] Specify version operation for apt/yum --- pyinfra_docker/docker.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pyinfra_docker/docker.py b/pyinfra_docker/docker.py index 5368bd2..059908c 100644 --- a/pyinfra_docker/docker.py +++ b/pyinfra_docker/docker.py @@ -16,7 +16,7 @@ } -def get_pkgs_to_install(): +def get_pkgs_to_install(operator): docker_packages = [ "docker-ce", "docker-ce-cli", @@ -25,7 +25,7 @@ def get_pkgs_to_install(): if not host.data.docker_version: return docker_packages - return [f"{pkg}={host.data.docker_version}" for pkg in docker_packages] + return [f"{pkg}{operator}{host.data.docker_version}" for pkg in docker_packages] @@ -93,10 +93,11 @@ def deploy_docker(config=None): config: filename or dict of JSON data """ - packages = get_pkgs_to_install() if host.get_fact(DebPackages): + 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, From 276073c6c0755bb253bcef968e84aa1aa469a7b9 Mon Sep 17 00:00:00 2001 From: Ryan Date: Mon, 13 Mar 2023 12:22:34 +0000 Subject: [PATCH 4/4] Update README.md Co-authored-by: Germain Chazot --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e24663c..87075f5 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ 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 your inventory data file and it will install that version for all `docker-ce` packages. +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