mirror of
https://github.com/Red5d/docker-autocompose
synced 2026-01-03 07:08:01 +00:00
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:
@@ -27,8 +27,16 @@ def main():
|
|||||||
cfile, c_networks, c_volumes = generate(cname)
|
cfile, c_networks, c_volumes = generate(cname)
|
||||||
|
|
||||||
struct.update(cfile)
|
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)
|
render(struct, args, networks, volumes)
|
||||||
|
|
||||||
@@ -38,7 +46,15 @@ def render(struct, args, networks, volumes):
|
|||||||
if args.version == 1:
|
if args.version == 1:
|
||||||
pyaml.p(OrderedDict(struct))
|
pyaml.p(OrderedDict(struct))
|
||||||
else:
|
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):
|
def is_date_or_time(s: str):
|
||||||
@@ -73,6 +89,8 @@ def generate(cname):
|
|||||||
cfile[cattrs['Name'][1:]] = {}
|
cfile[cattrs['Name'][1:]] = {}
|
||||||
ct = cfile[cattrs['Name'][1:]]
|
ct = cfile[cattrs['Name'][1:]]
|
||||||
|
|
||||||
|
default_networks = ['bridge', 'host', 'none']
|
||||||
|
|
||||||
values = {
|
values = {
|
||||||
'cap_add': cattrs['HostConfig']['CapAdd'],
|
'cap_add': cattrs['HostConfig']['CapAdd'],
|
||||||
'cap_drop': cattrs['HostConfig']['CapDrop'],
|
'cap_drop': cattrs['HostConfig']['CapDrop'],
|
||||||
@@ -89,10 +107,10 @@ def generate(cname):
|
|||||||
#'log_driver': cattrs['HostConfig']['LogConfig']['Type'],
|
#'log_driver': cattrs['HostConfig']['LogConfig']['Type'],
|
||||||
#'log_opt': cattrs['HostConfig']['LogConfig']['Config'],
|
#'log_opt': cattrs['HostConfig']['LogConfig']['Config'],
|
||||||
'logging': {'driver': cattrs['HostConfig']['LogConfig']['Type'], 'options': 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'],
|
'security_opt': cattrs['HostConfig']['SecurityOpt'],
|
||||||
'ulimits': cattrs['HostConfig']['Ulimits'],
|
'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'],
|
'volume_driver': cattrs['HostConfig']['VolumeDriver'],
|
||||||
'volumes_from': cattrs['HostConfig']['VolumesFrom'],
|
'volumes_from': cattrs['HostConfig']['VolumesFrom'],
|
||||||
'entrypoint': cattrs['Config']['Entrypoint'],
|
'entrypoint': cattrs['Config']['Entrypoint'],
|
||||||
@@ -112,10 +130,13 @@ def generate(cname):
|
|||||||
# Populate devices key if device values are present
|
# Populate devices key if device values are present
|
||||||
if cattrs['HostConfig']['Devices']:
|
if cattrs['HostConfig']['Devices']:
|
||||||
values['devices'] = [x['PathOnHost']+':'+x['PathInContainer'] for x in cattrs['HostConfig']['Devices']]
|
values['devices'] = [x['PathOnHost']+':'+x['PathInContainer'] for x in cattrs['HostConfig']['Devices']]
|
||||||
|
|
||||||
networks = {}
|
networks = {}
|
||||||
if values['networks'] == set():
|
if values['networks'] == set():
|
||||||
del values['networks']
|
del values['networks']
|
||||||
|
assumed_default_network = list(cattrs['NetworkSettings']['Networks'].keys())[0]
|
||||||
|
values['network_mode'] = assumed_default_network
|
||||||
|
networks = None
|
||||||
else:
|
else:
|
||||||
networklist = c.networks.list()
|
networklist = c.networks.list()
|
||||||
for network in networklist:
|
for network in networklist:
|
||||||
@@ -124,9 +145,12 @@ def generate(cname):
|
|||||||
'name': network.attrs['Name']}
|
'name': network.attrs['Name']}
|
||||||
|
|
||||||
volumes = {}
|
volumes = {}
|
||||||
for volume in values['volumes']:
|
if values['volumes'] is not None:
|
||||||
volume_name = volume.split(':')[0]
|
for volume in values['volumes']:
|
||||||
volumes[volume_name] = {'external': True}
|
volume_name = volume.split(':')[0]
|
||||||
|
volumes[volume_name] = {'external': True}
|
||||||
|
else:
|
||||||
|
volumes = None
|
||||||
|
|
||||||
# Check for command and add it if present.
|
# Check for command and add it if present.
|
||||||
if cattrs['Config']['Cmd'] is not None:
|
if cattrs['Config']['Cmd'] is not None:
|
||||||
|
|||||||
Reference in New Issue
Block a user