Skip to content

Commit 3311ff7

Browse files
committed
[CE-437] Unable to find orderer service url
Currently, the orderer service URL wasn't updated correctly after the cluster was created, this patch is meant to fix this, with this patch was merged, user dashboard could connect cluster hosted by kubernetes agent, but it still can't install chaincode on it, due to the mismatch of certificates. CE-437 #done Change-Id: I30601cf57bdc306bf56d3ec825d930955ede8aa7 Signed-off-by: luke <jiahaochen1993@gmail.com>
1 parent d16f929 commit 3311ff7

File tree

1 file changed

+61
-25
lines changed

1 file changed

+61
-25
lines changed

src/agent/k8s/cluster_operations.py

Lines changed: 61 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,10 @@ def _get_node_ip(self, node_name):
160160
for addr in i.status.addresses:
161161
if addr.type == "ExternalIP":
162162
ip = addr.address
163+
elif addr.type == "InternalIP":
164+
ip = addr.address
165+
else:
166+
continue
163167
return ip
164168

165169
def _get_node_ip_of_service(self, service_name):
@@ -173,21 +177,57 @@ def _get_node_ip_of_service(self, service_name):
173177
if i.metadata.name.startswith(service_name):
174178
return self._get_node_ip(i.spec.node_name)
175179

176-
def _get_service_external_port(self, service_name):
180+
def _get_service_external_port(self, namespace, ip):
177181
ret = self.corev1client.list_service_for_all_namespaces(watch=False)
182+
results = {}
183+
# result template
184+
r_template = ip + ":" + "{}"
178185
for i in ret.items:
179-
if i.metadata.name == service_name:
180-
external_port = ""
186+
if i.metadata.namespace == namespace:
187+
tmp_name = i.metadata.name.replace("-", "_")
181188
if i.metadata.name.startswith("peer"):
182189
for port in i.spec.ports:
190+
# transfer port name which can be recognized.
183191
if port.name == "externale-listen-endpoint":
184192
external_port = port.node_port
185-
else:
193+
name = tmp_name + "_grpc"
194+
value = r_template.format(external_port)
195+
196+
elif port.name == "listen":
197+
event_port = port.node_port
198+
name = tmp_name + "_event"
199+
value = r_template.format(event_port)
200+
201+
else:
202+
continue
203+
204+
results[name] = value
205+
206+
elif i.metadata.name.startswith("ca"):
207+
name = tmp_name + "_ecap"
186208
for port in i.spec.ports:
187-
# these services only have one port
188-
external_port = port.node_port
209+
_port = port.node_port
210+
value = r_template.format(_port)
211+
results[name] = value
189212

190-
return external_port
213+
elif i.metadata.name.startswith("orderer"):
214+
name = "orderer"
215+
for port in i.spec.ports:
216+
_port = port.node_port
217+
value = r_template.format(_port)
218+
results[name] = value
219+
220+
elif i.metadata.name.startswith("fabric-explorer"):
221+
name = "dashboard"
222+
for port in i.spec.ports:
223+
_port = port.node_port
224+
value = r_template.format(_port)
225+
results[name] = value
226+
227+
else:
228+
continue
229+
230+
return results
191231

192232
def _create_deployment(self, namespace, data, **kwargs):
193233
try:
@@ -377,20 +417,16 @@ def _setup_cluster(self, cluster_name):
377417

378418
def get_services_urls(self, cluster_name):
379419
ret = self.corev1client.list_service_for_all_namespaces(watch=False)
380-
service_url = {}
381-
value = ""
420+
service = ""
382421
for i in ret.items:
383422
if i.metadata.namespace == cluster_name:
384-
service_name = i.metadata.name
385-
value = self._get_node_ip_of_service(service_name) + ":" + \
386-
str(self._get_service_external_port(service_name))
387-
service_url[service_name] = value
388-
389-
# Use fabric-explorer as dashboard
390-
if "fabric-explorer" in service_name:
391-
service_url["dashboard"] = value
423+
service = i.metadata.name
424+
break
392425

393-
return service_url
426+
service_ip = self._get_node_ip_of_service(service)
427+
service_urls = self._get_service_external_port(cluster_name,
428+
service_ip)
429+
return service_urls
394430

395431
def _get_cluster_ports(self, ports_index):
396432
logger.debug("Current exsiting cluster ports= {}".format(ports_index))
@@ -402,19 +438,19 @@ def _get_cluster_ports(self, ports_index):
402438
current_path = os.path.dirname(__file__)
403439
templates_path = os.path.join(current_path, "templates")
404440
for (dir_path, dir_name, file_list) in os.walk(templates_path):
405-
for file in file_list:
406-
# pvc and namespace files do not have port mapping
407-
if ("pvc" not in file and "namespace" not in file and
408-
"cli" not in file):
409-
if "peer" in file:
441+
for f in file_list:
442+
# pvc and namespace fs do not have port mapping
443+
if ("pvc" not in f and "namespace" not in f and
444+
"cli" not in f):
445+
if "peer" in f:
410446
peers_ports = {}
411447
peers_ports["externalPort"] = str(current_port)
412448
peers_ports["chaincodePort"] = str(current_port + 1)
413449
peers_ports["nodePort"] = str(current_port + 2)
414450
current_port = current_port + 3
415-
cluster_ports[file] = peers_ports
451+
cluster_ports[f] = peers_ports
416452
else:
417-
cluster_ports[file] = str(current_port)
453+
cluster_ports[f] = str(current_port)
418454
current_port = current_port + 1
419455
logger.debug("return generated cluster ports= {}"
420456
.format(cluster_ports))

0 commit comments

Comments
 (0)