Skip to content

Commit 02d0051

Browse files
aiordacheulyssessouza
authored andcommitted
Skip parsing non-docker endpoints
Signed-off-by: aiordache <[email protected]>
1 parent 2c54188 commit 02d0051

File tree

1 file changed

+62
-35
lines changed

1 file changed

+62
-35
lines changed

docker/context/context.py

Lines changed: 62 additions & 35 deletions
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):

0 commit comments

Comments
 (0)