Improve legacy network and volume detection

Signed-off-by: Joffrey F <joffrey@docker.com>
This commit is contained in:
Joffrey F 2018-04-24 15:48:02 -07:00
parent 4dece7fcb2
commit c1657dc46a
2 changed files with 29 additions and 22 deletions

View File

@ -42,7 +42,7 @@ class Network(object):
self.enable_ipv6 = enable_ipv6
self.labels = labels
self.custom_name = custom_name
self.legacy = False
self.legacy = None
def ensure(self):
if self.external:
@ -68,25 +68,17 @@ class Network(object):
)
return
self._set_legacy_flag()
try:
data = self.inspect()
data = self.inspect(legacy=self.legacy)
check_remote_network_config(data, self)
except NotFound:
try:
data = self.inspect(legacy=True)
self.legacy = True
check_remote_network_config(data, self)
return
except NotFound:
pass
driver_name = 'the default driver'
if self.driver:
driver_name = 'driver "{}"'.format(self.driver)
log.info(
'Creating network "{}" with {}'
.format(self.full_name, driver_name)
'Creating network "{}" with {}'.format(self.full_name, driver_name)
)
self.client.create_network(
@ -133,6 +125,7 @@ class Network(object):
@property
def true_name(self):
self._set_legacy_flag()
if self.legacy:
return self.legacy_full_name
return self.full_name
@ -149,6 +142,15 @@ class Network(object):
})
return labels
def _set_legacy_flag(self):
if self.legacy is not None:
return
try:
data = self.inspect(legacy=True)
self.legacy = data is not None
except NotFound:
self.legacy = False
def create_ipam_config_from_dict(ipam_dict):
if not ipam_dict:

View File

@ -29,7 +29,7 @@ class Volume(object):
self.external = external
self.labels = labels
self.custom_name = custom_name
self.legacy = False
self.legacy = None
def create(self):
return self.client.create_volume(
@ -46,21 +46,16 @@ class Volume(object):
except NotFound:
self.client.remove_volume(self.legacy_full_name)
def inspect(self, legacy=False):
def inspect(self, legacy=None):
if legacy:
return self.client.inspect_volume(self.legacy_full_name)
return self.client.inspect_volume(self.full_name)
def exists(self):
self._set_legacy_flag()
try:
self.inspect()
self.inspect(legacy=self.legacy)
except NotFound:
try:
self.inspect(legacy=True)
self.legacy = True
return True
except NotFound:
pass
return False
return True
@ -80,6 +75,7 @@ class Volume(object):
@property
def true_name(self):
self._set_legacy_flag()
if self.legacy:
return self.legacy_full_name
return self.full_name
@ -96,6 +92,15 @@ class Volume(object):
})
return labels
def _set_legacy_flag(self):
if self.legacy is not None:
return
try:
data = self.inspect(legacy=True)
self.legacy = data is not None
except NotFound:
self.legacy = False
class ProjectVolumes(object):
@ -155,7 +160,7 @@ class ProjectVolumes(object):
)
volume.create()
else:
check_remote_volume_config(volume.inspect(), volume)
check_remote_volume_config(volume.inspect(legacy=volume.legacy), volume)
except NotFound:
raise ConfigurationError(
'Volume %s specifies nonexistent driver %s' % (volume.name, volume.driver)