enforce valid ipv4 configuration

This commit is contained in:
clore 2024-03-26 02:30:42 +00:00
parent ea6403258b
commit 884c9d8428
1 changed files with 12 additions and 6 deletions

View File

@ -3,6 +3,7 @@ from lib import logging as logging_lib
from lib import docker_interface
from lib import get_specs
import docker
from docker.types import EndpointConfig, NetworkingConfig
import os
client = docker_interface.client
@ -76,11 +77,8 @@ def deploy(validated_containers):
if "network" in validated_container:
container_options["network_mode"]=validated_container["network"]
if "ip" in validated_container:
container_options["networking_config"]=client.api.create_networking_config({
'clore-br0': client.api.create_endpoint_config(
ipv4_address=validated_container["ip"]
)
})
del container_options["network_mode"]
if "gpus" in validated_container and type(validated_container["gpus"])==bool:
container_options["runtime"]="nvidia"
container_options["device_requests"].append(docker.types.DeviceRequest(count=-1, capabilities=[['gpu']]))
@ -121,6 +119,9 @@ def deploy(validated_containers):
if not validated_container["name"] in created_container_names and image_ready:
container = client.containers.create(**container_options)
if "ip" in validated_container:
client.networks.get(validated_container["network"] if "network" in validated_container else "clore-br0").connect(container, ipv4_address=validated_container["ip"])
client.networks.get("bridge").disconnect(container)
if not "paused" in validated_container:
container.start()
except Exception as e:
@ -138,7 +139,12 @@ def deploy(validated_containers):
all_stopped_container_names.append(container.name)
if container.name in needed_running_names and container.status != 'running':
try:
container.start()
attached_networks = container.attrs['NetworkSettings']['Networks']
if "bridge" in attached_networks.keys() or len(attached_networks.keys())==0: # Ip was not attached, remove container
container.stop()
container.remove()
else:
container.start()
except Exception as e:
pass
elif container.name in paused_names and container.status == 'running':