diff --git a/AppImage/scripts/docker_app_discovery.py b/AppImage/scripts/docker_app_discovery.py index a61d43b3..d619ebc3 100644 --- a/AppImage/scripts/docker_app_discovery.py +++ b/AppImage/scripts/docker_app_discovery.py @@ -281,7 +281,7 @@ def cached_web_links(vmid, lookup): result.append({**endpoint, 'container_name': record['name'], 'service_name': meta['name'], 'service_slug': meta['slug'], 'image': record['image'], 'web_path': '/', 'logo_url': meta['logo_url']}) - return result + return sorted(result, key=lambda item: (item["service_name"].lower(), item["host_port"])) def filter_candidates(result, suggestions, apps): diff --git a/AppImage/scripts/tests/test_docker_app_discovery.py b/AppImage/scripts/tests/test_docker_app_discovery.py index 876cfba2..eff1390e 100644 --- a/AppImage/scripts/tests/test_docker_app_discovery.py +++ b/AppImage/scripts/tests/test_docker_app_discovery.py @@ -202,6 +202,19 @@ class Cache(unittest.TestCase): self.assertEqual(lxc_apps._probe_docker_web_links(101)[0]['host_port'], 8080) execute.assert_not_called() + def test_shared_links_keep_existing_name_then_port_order(self): + value = copy.deepcopy(self.value) + value['_containers'][0]['name'] = 'z-last' + second = copy.deepcopy(value['_containers'][0]); second['name'] = 'a-first' + second['endpoints'] = [{'host_port':9090,'container_port':8080,'scheme':'http'}, + {'host_port':8080,'container_port':8080,'scheme':'http'}] + value['_containers'].append(second) + lookup = lambda service,name,image: {'slug':None,'name':name,'logo_url':None} + with patch.object(docker,'scan',return_value=value): docker.discover(101) + links = docker.cached_web_links(101,lookup) + self.assertEqual([(x['service_name'],x['host_port']) for x in links], + [('a-first',8080),('a-first',9090),('z-last',8080)]) + def test_registered_container_image_app_or_existing_port_is_not_duplicated(self): item = self.value['candidates'][0] for app in [{'discovery_id': item['discovery_id']}, {'container_name': item['container_name']},