Skip to content

Commit cbd3ca0

Browse files
committed
Handle Swarm-style prefixed names in Container.from_ps()
Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
1 parent edb6b24 commit cbd3ca0

3 files changed

Lines changed: 26 additions & 16 deletions

File tree

fig/container.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,8 @@ def from_ps(cls, client, dictionary, **kwargs):
2222
new_dictionary = {
2323
'Id': dictionary['Id'],
2424
'Image': dictionary['Image'],
25+
'Name': '/' + get_container_name(dictionary),
2526
}
26-
for name in dictionary.get('Names', []):
27-
if len(name.split('/')) == 2:
28-
new_dictionary['Name'] = name
2927
return cls(client, new_dictionary, **kwargs)
3028

3129
@classmethod
@@ -170,3 +168,14 @@ def __eq__(self, other):
170168
if type(self) != type(other):
171169
return False
172170
return self.id == other.id
171+
172+
173+
def get_container_name(container):
174+
if not container.get('Name') and not container.get('Names'):
175+
return None
176+
# inspect
177+
if 'Name' in container:
178+
return container['Name']
179+
# ps
180+
shortest_name = min(container['Names'], key=lambda n: len(n.split('/')))
181+
return shortest_name.split('/')[-1]

fig/service.py

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
from docker.errors import APIError
1111

12-
from .container import Container
12+
from .container import Container, get_container_name
1313
from .progress_stream import stream_output, StreamOutputError
1414

1515
log = logging.getLogger(__name__)
@@ -538,17 +538,6 @@ def parse_name(name):
538538
return ServiceName(project, service_name, int(suffix))
539539

540540

541-
def get_container_name(container):
542-
if not container.get('Name') and not container.get('Names'):
543-
return None
544-
# inspect
545-
if 'Name' in container:
546-
return container['Name']
547-
# ps
548-
shortest_name = min(container['Names'], key=lambda n: len(n.split('/')))
549-
return shortest_name.split('/')[-1]
550-
551-
552541
def parse_restart_spec(restart_config):
553542
if not restart_config:
554543
return None

tests/unit/container_test.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def setUp(self):
2020
"Ports": None,
2121
"SizeRw": 0,
2222
"SizeRootFs": 0,
23-
"Names": ["/figtest_db_1"],
23+
"Names": ["/figtest_db_1", "/figtest_web_1/db"],
2424
"NetworkSettings": {
2525
"Ports": {},
2626
},
@@ -36,6 +36,18 @@ def test_from_ps(self):
3636
"Name": "/figtest_db_1",
3737
})
3838

39+
def test_from_ps_prefixed(self):
40+
self.container_dict['Names'] = ['/swarm-host-1' + n for n in self.container_dict['Names']]
41+
42+
container = Container.from_ps(None,
43+
self.container_dict,
44+
has_been_inspected=True)
45+
self.assertEqual(container.dictionary, {
46+
"Id": "abc",
47+
"Image":"busybox:latest",
48+
"Name": "/figtest_db_1",
49+
})
50+
3951
def test_environment(self):
4052
container = Container(None, {
4153
'Id': 'abc',

0 commit comments

Comments
 (0)