better handling for default networks (#42)

* better handling for default networks

* fix for issues/43

* check for none explictly rather than allowing truthy/falsy conversion

* update to read volume data from mounts, rather than host config binds

Co-authored-by: Adam Doussan <acdoussan@Adams-MacBook-Pro.local>
This commit is contained in:
acdoussan
2022-08-14 16:54:43 -05:00
committed by GitHub
parent 0c4ff4fb25
commit 357fef9782

View File

@@ -27,8 +27,16 @@ def main():
cfile, c_networks, c_volumes = generate(cname)
struct.update(cfile)
networks.update(c_networks)
volumes.update(c_volumes)
if c_networks is None:
networks = None
else:
networks.update(c_networks)
if c_volumes is None:
volumes = None
else:
volumes.update(c_volumes)
render(struct, args, networks, volumes)
@@ -38,7 +46,15 @@ def render(struct, args, networks, volumes):
if args.version == 1:
pyaml.p(OrderedDict(struct))
else:
pyaml.p(OrderedDict({'version': '"3"', 'services': struct, 'networks': networks, 'volumes': volumes}))
ans = {'version': '"3"', 'services': struct}
if networks is not None:
ans['networks'] = networks
if volumes is not None:
ans['volumes'] = volumes
pyaml.p(OrderedDict(ans))
def is_date_or_time(s: str):
@@ -73,6 +89,8 @@ def generate(cname):
cfile[cattrs['Name'][1:]] = {}
ct = cfile[cattrs['Name'][1:]]
default_networks = ['bridge', 'host', 'none']
values = {
'cap_add': cattrs['HostConfig']['CapAdd'],
'cap_drop': cattrs['HostConfig']['CapDrop'],
@@ -89,10 +107,10 @@ def generate(cname):
#'log_driver': cattrs['HostConfig']['LogConfig']['Type'],
#'log_opt': cattrs['HostConfig']['LogConfig']['Config'],
'logging': {'driver': cattrs['HostConfig']['LogConfig']['Type'], 'options': cattrs['HostConfig']['LogConfig']['Config']},
'networks': {x for x in cattrs['NetworkSettings']['Networks'].keys() if x != 'bridge'},
'networks': {x for x in cattrs['NetworkSettings']['Networks'].keys() if x not in default_networks},
'security_opt': cattrs['HostConfig']['SecurityOpt'],
'ulimits': cattrs['HostConfig']['Ulimits'],
'volumes': cattrs['HostConfig']['Binds'],
'volumes': [f'{m["Name"]}:{m["Destination"]}' for m in cattrs['Mounts'] if m['Type'] == 'volume'],
'volume_driver': cattrs['HostConfig']['VolumeDriver'],
'volumes_from': cattrs['HostConfig']['VolumesFrom'],
'entrypoint': cattrs['Config']['Entrypoint'],
@@ -116,6 +134,9 @@ def generate(cname):
networks = {}
if values['networks'] == set():
del values['networks']
assumed_default_network = list(cattrs['NetworkSettings']['Networks'].keys())[0]
values['network_mode'] = assumed_default_network
networks = None
else:
networklist = c.networks.list()
for network in networklist:
@@ -124,9 +145,12 @@ def generate(cname):
'name': network.attrs['Name']}
volumes = {}
for volume in values['volumes']:
volume_name = volume.split(':')[0]
volumes[volume_name] = {'external': True}
if values['volumes'] is not None:
for volume in values['volumes']:
volume_name = volume.split(':')[0]
volumes[volume_name] = {'external': True}
else:
volumes = None
# Check for command and add it if present.
if cattrs['Config']['Cmd'] is not None: