Skip to content

Commit 7f11cd4

Browse files
author
Ulysses Souza
authored
Merge pull request #2608 from ulyssessouza/4.2.2-release
Bump 4.2.2 release
2 parents b22095f + 3f1cb9e commit 7f11cd4

File tree

4 files changed

+75
-39
lines changed

4 files changed

+75
-39
lines changed

Jenkinsfile

+3-3
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ def buildImage = { name, buildargs, pyTag ->
1717
}
1818

1919
def buildImages = { ->
20-
wrappedNode(label: "ubuntu && !zfs && amd64", cleanWorkspace: true) {
20+
wrappedNode(label: "amd64 && ubuntu-1804 && overlay2", cleanWorkspace: true) {
2121
stage("build image") {
2222
checkout(scm)
2323

@@ -32,7 +32,7 @@ def buildImages = { ->
3232

3333
def getDockerVersions = { ->
3434
def dockerVersions = ["19.03.5"]
35-
wrappedNode(label: "ubuntu && !zfs && amd64") {
35+
wrappedNode(label: "amd64 && ubuntu-1804 && overlay2") {
3636
def result = sh(script: """docker run --rm \\
3737
--entrypoint=python \\
3838
${imageNamePy3} \\
@@ -73,7 +73,7 @@ def runTests = { Map settings ->
7373
}
7474

7575
{ ->
76-
wrappedNode(label: "ubuntu && !zfs && amd64", cleanWorkspace: true) {
76+
wrappedNode(label: "amd64 && ubuntu-1804 && overlay2", cleanWorkspace: true) {
7777
stage("test python=${pythonVersion} / docker=${dockerVersion}") {
7878
checkout(scm)
7979
def dindContainerName = "dpy-dind-\$BUILD_NUMBER-\$EXECUTOR_NUMBER-${pythonVersion}-${dockerVersion}"

docker/context/context.py

+62-35
Original file line numberDiff line numberDiff line change
@@ -16,30 +16,42 @@ def __init__(self, name, orchestrator=None, host=None, endpoints=None,
1616
if not name:
1717
raise Exception("Name not provided")
1818
self.name = name
19+
self.context_type = None
1920
self.orchestrator = orchestrator
21+
self.endpoints = {}
22+
self.tls_cfg = {}
23+
self.meta_path = "IN MEMORY"
24+
self.tls_path = "IN MEMORY"
25+
2026
if not endpoints:
27+
# set default docker endpoint if no endpoint is set
2128
default_endpoint = "docker" if (
2229
not orchestrator or orchestrator == "swarm"
2330
) else orchestrator
31+
2432
self.endpoints = {
2533
default_endpoint: {
2634
"Host": get_context_host(host, tls),
2735
"SkipTLSVerify": not tls
2836
}
2937
}
30-
else:
31-
for k, v in endpoints.items():
32-
ekeys = v.keys()
33-
for param in ["Host", "SkipTLSVerify"]:
34-
if param not in ekeys:
35-
raise ContextException(
36-
"Missing parameter {} from endpoint {}".format(
37-
param, k))
38-
self.endpoints = endpoints
38+
return
3939

40-
self.tls_cfg = {}
41-
self.meta_path = "IN MEMORY"
42-
self.tls_path = "IN MEMORY"
40+
# check docker endpoints
41+
for k, v in endpoints.items():
42+
if not isinstance(v, dict):
43+
# unknown format
44+
raise ContextException("""Unknown endpoint format for
45+
context {}: {}""".format(name, v))
46+
47+
self.endpoints[k] = v
48+
if k != "docker":
49+
continue
50+
51+
self.endpoints[k]["Host"] = v.get("Host", get_context_host(
52+
host, tls))
53+
self.endpoints[k]["SkipTLSVerify"] = bool(v.get(
54+
"SkipTLSVerify", not tls))
4355

4456
def set_endpoint(
4557
self, name="docker", host=None, tls_cfg=None,
@@ -59,36 +71,44 @@ def inspect(self):
5971

6072
@classmethod
6173
def load_context(cls, name):
62-
name, orchestrator, endpoints = Context._load_meta(name)
63-
if name:
64-
instance = cls(name, orchestrator, endpoints=endpoints)
74+
meta = Context._load_meta(name)
75+
if meta:
76+
instance = cls(
77+
meta["Name"],
78+
orchestrator=meta["Metadata"].get("StackOrchestrator", None),
79+
endpoints=meta.get("Endpoints", None))
80+
instance.context_type = meta["Metadata"].get("Type", None)
6581
instance._load_certs()
6682
instance.meta_path = get_meta_dir(name)
6783
return instance
6884
return None
6985

7086
@classmethod
7187
def _load_meta(cls, name):
72-
metadata = {}
7388
meta_file = get_meta_file(name)
74-
if os.path.isfile(meta_file):
89+
if not os.path.isfile(meta_file):
90+
return None
91+
92+
metadata = {}
93+
try:
7594
with open(meta_file) as f:
76-
try:
77-
with open(meta_file) as f:
78-
metadata = json.load(f)
79-
for k, v in metadata["Endpoints"].items():
80-
metadata["Endpoints"][k]["SkipTLSVerify"] = bool(
81-
v["SkipTLSVerify"])
82-
except (IOError, KeyError, ValueError) as e:
83-
# unknown format
84-
raise Exception("""Detected corrupted meta file for
85-
context {} : {}""".format(name, e))
86-
87-
return (
88-
metadata["Name"],
89-
metadata["Metadata"].get("StackOrchestrator", None),
90-
metadata["Endpoints"])
91-
return None, None, None
95+
metadata = json.load(f)
96+
except (IOError, KeyError, ValueError) as e:
97+
# unknown format
98+
raise Exception("""Detected corrupted meta file for
99+
context {} : {}""".format(name, e))
100+
101+
# for docker endpoints, set defaults for
102+
# Host and SkipTLSVerify fields
103+
for k, v in metadata["Endpoints"].items():
104+
if k != "docker":
105+
continue
106+
metadata["Endpoints"][k]["Host"] = v.get(
107+
"Host", get_context_host(None, False))
108+
metadata["Endpoints"][k]["SkipTLSVerify"] = bool(
109+
v.get("SkipTLSVerify", True))
110+
111+
return metadata
92112

93113
def _load_certs(self):
94114
certs = {}
@@ -157,15 +177,22 @@ def __call__(self):
157177
result.update(self.Storage)
158178
return result
159179

180+
def is_docker_host(self):
181+
return self.context_type is None
182+
160183
@property
161184
def Name(self):
162185
return self.name
163186

164187
@property
165188
def Host(self):
166189
if not self.orchestrator or self.orchestrator == "swarm":
167-
return self.endpoints["docker"]["Host"]
168-
return self.endpoints[self.orchestrator]["Host"]
190+
endpoint = self.endpoints.get("docker", None)
191+
if endpoint:
192+
return endpoint.get("Host", None)
193+
return None
194+
195+
return self.endpoints[self.orchestrator].get("Host", None)
169196

170197
@property
171198
def Orchestrator(self):

docker/version.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
version = "4.2.1"
1+
version = "4.2.2"
22
version_info = tuple([int(d) for d in version.split("-")[0].split(".")])

docs/change-log.md

+9
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
11
Change log
22
==========
33

4+
4.2.2
5+
-----
6+
7+
[List of PRs / issues for this release](https://github.com/docker/docker-py/milestone/66?closed=1)
8+
9+
### Bugfixes
10+
11+
- Fix context load for non-docker endpoints
12+
413
4.2.1
514
-----
615

0 commit comments

Comments
 (0)