diff --git a/slapos/container/prepare.py b/slapos/container/prepare.py index 0f8b50b58bf761023396b1ec6906edf65ef74148..944b77648ca2dfb7c7c2bef4800692b67bed4c48 100644 --- a/slapos/container/prepare.py +++ b/slapos/container/prepare.py @@ -17,6 +17,7 @@ class SlapContainerError(Exception): def main(sr_directory, partition_list, bridge_name): + started_containers = set() for partition_path in partition_list: slapcontainer_filename = os.path.join(partition_path, '.slapcontainer') @@ -37,6 +38,9 @@ def main(sr_directory, partition_list, bridge_name): slapcontainer_conf) == 'stopped': start(sr_directory, partition_path, slapcontainer_conf) + started_containers.add( + slapcontainer_conf.get('requested', 'name') + ) else: if status(sr_directory, partition_path, slapcontainer_conf) == 'started': @@ -47,6 +51,26 @@ def main(sr_directory, partition_list, bridge_name): finally: lock.release() + try: + active_containers = set(call( + [os.path.join(sr_directory, 'parts/lxc/bin/lxc-ls'), + '--active'] + ).split('\n')) + except SlapContainerError: + active_containers = set() + + to_stop = active_containers - started_containers + + for container in to_stop: + try: + call( + [os.path.join(sr_directory, 'parts/lxc/bin/lxc-stop'), + '-n', container + ] + ) + except SlapContainerError: + pass # TODO : put some log + def start(sr_directory, partition_path, conf): @@ -107,12 +131,6 @@ def create(sr_directory, partition_path, conf, bridge_name): -def destroy(partition_path): - # TODO: Destroy container - pass - - - def status(sr_directory, partition_path, conf): lxc_info = call([os.path.join(sr_directory, 'parts/lxc/bin/lxc-info'), '-n', conf.get('requested', 'name')])