Add a new fig command for retrieving the locally bound port of a service.

Signed-off-by: Daniel Nephin <dnephin@gmail.com>
This commit is contained in:
Daniel Nephin 2014-08-08 09:41:52 -07:00 committed by Daniel Nephin
commit c48ee5caef
9 changed files with 164 additions and 51 deletions

View file

@ -1,6 +1,8 @@
from __future__ import unicode_literals
from __future__ import absolute_import
from fig.packages import six
class Container(object):
"""
@ -63,17 +65,20 @@ class Container(object):
return None
@property
def human_readable_ports(self):
def ports(self):
self.inspect_if_not_inspected()
if not self.dictionary['NetworkSettings']['Ports']:
return ''
ports = []
for private, public in list(self.dictionary['NetworkSettings']['Ports'].items()):
if public:
ports.append('%s->%s' % (public[0]['HostPort'], private))
else:
ports.append(private)
return ', '.join(ports)
return self.dictionary['NetworkSettings']['Ports'] or {}
@property
def human_readable_ports(self):
def format_port(private, public):
if not public:
return private
return '{HostIp}:{HostPort}->{private}'.format(
private=private, **public[0])
return ', '.join(format_port(*item)
for item in sorted(six.iteritems(self.ports)))
@property
def human_readable_state(self):
@ -105,6 +110,10 @@ class Container(object):
self.inspect_if_not_inspected()
return self.dictionary['State']['Running']
def get_local_port(self, port, protocol='tcp'):
port = self.ports.get("%s/%s" % (port, protocol))
return "{HostIp}:{HostPort}".format(**port[0]) if port else None
def start(self, **options):
return self.client.start(self.id, **options)