Hello community, here is the log from the commit of package python-docker for openSUSE:Factory checked in at 2020-07-13 09:06:19 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-docker (Old) and /work/SRC/openSUSE:Factory/.python-docker.new.3060 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-docker" Mon Jul 13 09:06:19 2020 rev:19 rq:819986 version:4.2.2 Changes: -------- --- /work/SRC/openSUSE:Factory/python-docker/python-docker.changes 2020-06-15 20:28:48.066019001 +0200 +++ /work/SRC/openSUSE:Factory/.python-docker.new.3060/python-docker.changes 2020-07-13 09:06:33.176247377 +0200 @@ -1,0 +2,6 @@ +Fri Jul 10 12:15:50 UTC 2020 - Dirk Mueller <[email protected]> + +- update to 4.2.2: + - Fix context load for non-docker endpoints + +------------------------------------------------------------------- Old: ---- 4.2.1.tar.gz New: ---- 4.2.2.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-docker.spec ++++++ --- /var/tmp/diff_new_pack.uWgawc/_old 2020-07-13 09:06:34.332250283 +0200 +++ /var/tmp/diff_new_pack.uWgawc/_new 2020-07-13 09:06:34.332250283 +0200 @@ -19,7 +19,7 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} %define oldpython python Name: python-docker -Version: 4.2.1 +Version: 4.2.2 Release: 0 Summary: Docker API Client License: Apache-2.0 ++++++ 4.2.1.tar.gz -> 4.2.2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-py-4.2.1/Jenkinsfile new/docker-py-4.2.2/Jenkinsfile --- old/docker-py-4.2.1/Jenkinsfile 2020-06-02 16:15:59.000000000 +0200 +++ new/docker-py-4.2.2/Jenkinsfile 2020-06-30 18:16:22.000000000 +0200 @@ -17,7 +17,7 @@ } def buildImages = { -> - wrappedNode(label: "ubuntu && !zfs && amd64", cleanWorkspace: true) { + wrappedNode(label: "amd64 && ubuntu-1804 && overlay2", cleanWorkspace: true) { stage("build image") { checkout(scm) @@ -32,7 +32,7 @@ def getDockerVersions = { -> def dockerVersions = ["19.03.5"] - wrappedNode(label: "ubuntu && !zfs && amd64") { + wrappedNode(label: "amd64 && ubuntu-1804 && overlay2") { def result = sh(script: """docker run --rm \\ --entrypoint=python \\ ${imageNamePy3} \\ @@ -73,7 +73,7 @@ } { -> - wrappedNode(label: "ubuntu && !zfs && amd64", cleanWorkspace: true) { + wrappedNode(label: "amd64 && ubuntu-1804 && overlay2", cleanWorkspace: true) { stage("test python=${pythonVersion} / docker=${dockerVersion}") { checkout(scm) def dindContainerName = "dpy-dind-\$BUILD_NUMBER-\$EXECUTOR_NUMBER-${pythonVersion}-${dockerVersion}" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-py-4.2.1/docker/context/context.py new/docker-py-4.2.2/docker/context/context.py --- old/docker-py-4.2.1/docker/context/context.py 2020-06-02 16:15:59.000000000 +0200 +++ new/docker-py-4.2.2/docker/context/context.py 2020-06-30 18:16:22.000000000 +0200 @@ -16,30 +16,42 @@ if not name: raise Exception("Name not provided") self.name = name + self.context_type = None self.orchestrator = orchestrator + self.endpoints = {} + self.tls_cfg = {} + self.meta_path = "IN MEMORY" + self.tls_path = "IN MEMORY" + if not endpoints: + # set default docker endpoint if no endpoint is set default_endpoint = "docker" if ( not orchestrator or orchestrator == "swarm" ) else orchestrator + self.endpoints = { default_endpoint: { "Host": get_context_host(host, tls), "SkipTLSVerify": not tls } } - else: - for k, v in endpoints.items(): - ekeys = v.keys() - for param in ["Host", "SkipTLSVerify"]: - if param not in ekeys: - raise ContextException( - "Missing parameter {} from endpoint {}".format( - param, k)) - self.endpoints = endpoints + return - self.tls_cfg = {} - self.meta_path = "IN MEMORY" - self.tls_path = "IN MEMORY" + # check docker endpoints + for k, v in endpoints.items(): + if not isinstance(v, dict): + # unknown format + raise ContextException("""Unknown endpoint format for + context {}: {}""".format(name, v)) + + self.endpoints[k] = v + if k != "docker": + continue + + self.endpoints[k]["Host"] = v.get("Host", get_context_host( + host, tls)) + self.endpoints[k]["SkipTLSVerify"] = bool(v.get( + "SkipTLSVerify", not tls)) def set_endpoint( self, name="docker", host=None, tls_cfg=None, @@ -59,9 +71,13 @@ @classmethod def load_context(cls, name): - name, orchestrator, endpoints = Context._load_meta(name) - if name: - instance = cls(name, orchestrator, endpoints=endpoints) + meta = Context._load_meta(name) + if meta: + instance = cls( + meta["Name"], + orchestrator=meta["Metadata"].get("StackOrchestrator", None), + endpoints=meta.get("Endpoints", None)) + instance.context_type = meta["Metadata"].get("Type", None) instance._load_certs() instance.meta_path = get_meta_dir(name) return instance @@ -69,26 +85,30 @@ @classmethod def _load_meta(cls, name): - metadata = {} meta_file = get_meta_file(name) - if os.path.isfile(meta_file): + if not os.path.isfile(meta_file): + return None + + metadata = {} + try: with open(meta_file) as f: - try: - with open(meta_file) as f: - metadata = json.load(f) - for k, v in metadata["Endpoints"].items(): - metadata["Endpoints"][k]["SkipTLSVerify"] = bool( - v["SkipTLSVerify"]) - except (IOError, KeyError, ValueError) as e: - # unknown format - raise Exception("""Detected corrupted meta file for - context {} : {}""".format(name, e)) - - return ( - metadata["Name"], - metadata["Metadata"].get("StackOrchestrator", None), - metadata["Endpoints"]) - return None, None, None + metadata = json.load(f) + except (IOError, KeyError, ValueError) as e: + # unknown format + raise Exception("""Detected corrupted meta file for + context {} : {}""".format(name, e)) + + # for docker endpoints, set defaults for + # Host and SkipTLSVerify fields + for k, v in metadata["Endpoints"].items(): + if k != "docker": + continue + metadata["Endpoints"][k]["Host"] = v.get( + "Host", get_context_host(None, False)) + metadata["Endpoints"][k]["SkipTLSVerify"] = bool( + v.get("SkipTLSVerify", True)) + + return metadata def _load_certs(self): certs = {} @@ -157,6 +177,9 @@ result.update(self.Storage) return result + def is_docker_host(self): + return self.context_type is None + @property def Name(self): return self.name @@ -164,8 +187,12 @@ @property def Host(self): if not self.orchestrator or self.orchestrator == "swarm": - return self.endpoints["docker"]["Host"] - return self.endpoints[self.orchestrator]["Host"] + endpoint = self.endpoints.get("docker", None) + if endpoint: + return endpoint.get("Host", None) + return None + + return self.endpoints[self.orchestrator].get("Host", None) @property def Orchestrator(self): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-py-4.2.1/docker/version.py new/docker-py-4.2.2/docker/version.py --- old/docker-py-4.2.1/docker/version.py 2020-06-02 16:15:59.000000000 +0200 +++ new/docker-py-4.2.2/docker/version.py 2020-06-30 18:16:22.000000000 +0200 @@ -1,2 +1,2 @@ -version = "4.2.1" +version = "4.2.2" version_info = tuple([int(d) for d in version.split("-")[0].split(".")]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-py-4.2.1/docs/change-log.md new/docker-py-4.2.2/docs/change-log.md --- old/docker-py-4.2.1/docs/change-log.md 2020-06-02 16:15:59.000000000 +0200 +++ new/docker-py-4.2.2/docs/change-log.md 2020-06-30 18:16:22.000000000 +0200 @@ -1,6 +1,15 @@ Change log ========== +4.2.2 +----- + +[List of PRs / issues for this release](https://github.com/docker/docker-py/milestone/66?closed=1) + +### Bugfixes + +- Fix context load for non-docker endpoints + 4.2.1 -----
