def abort_if_container_doesnt_exist(container_id): for item in ContainerStatus.get_all_status(): if len(container_id) >= 12 and item['id'].startswith(container_id): return item['id'] abort(404, message= json.dumps( {'errno':1000, 'errMsg' : "Container {} doesn't exist".format(container_id)}) )
def test_add_container_status(self): add_containers = [ { "gateway": "192.168.159.1", "eths": [["testDockerflyv10", "eth0", "192.168.159.31/24"]], "image_name": "172.16.11.13:5000/brain/centos:centos6_sshd", "run_cmd": "/usr/sbin/sshd -D", "id": 3, "status": "running", "last_modify_time": 1418176930.012, } ] add_status(add_containers) self._containers.extend(add_containers) self.assertEqual(get_all_status(), self._containers)
def test_update_container_status(self): update_containers = [ { "gateway": "192.168.159.1", "eths": [["testDockerflyv10", "eth0", "192.168.159.11/24"]], "image_name": "172.16.11.13:5000/brain/centos:centos6_sshd", "run_cmd": "/usr/sbin/sshd -D", "id": 1, "status": "stop", "last_modify_time": 1418176930.012, } ] update_status(update_containers) self._containers.pop(0) self._containers.insert(0, update_containers[0]) self.assertEqual(get_all_status(), self._containers)
def test_add_container_status(self): add_containers = [{ "gateway": "192.168.159.1", "eths": [["testDockerflyv10", "eth0", "192.168.159.31/24"]], "image_name": "172.16.11.13:5000/brain/centos:centos6_sshd", "run_cmd": "/usr/sbin/sshd -D", 'id': 3, 'status': 'running', 'last_modify_time': 1418176930.012 }] add_status(add_containers) self._containers.extend(add_containers) self.assertEqual(get_all_status(), self._containers)
def test_update_container_status(self): update_containers = [{ "gateway": "192.168.159.1", "eths": [["testDockerflyv10", "eth0", "192.168.159.11/24"]], "image_name": "172.16.11.13:5000/brain/centos:centos6_sshd", "run_cmd": "/usr/sbin/sshd -D", 'id': 1, 'status': 'stop', 'last_modify_time': 1418176930.012 }] update_status(update_containers) self._containers.pop(0) self._containers.insert(0, update_containers[0]) self.assertEqual(get_all_status(), self._containers)
def get(self): return ContainerStatus.get_all_status()
def test_remove_container_status(self): remove_container_ids = [1] remove_status(remove_container_ids) self._containers.pop(0) self.assertEqual(get_all_status(), self._containers)
def test_create_container_status(self): self.assertEqual(self._containers, get_all_status())
def abort_if_container_doesnt_exist(container_id): for item in ContainerStatus.get_all_status(): if len(container_id) >= 12 and item["id"].startswith(container_id): return item["id"] abort(404, message=json.dumps({"errno": 1000, "errMsg": "Container {} doesn't exist".format(container_id)}))
def test_remove_container_status_by_uuid(self): remove_container_uuids = (['aa-bb-cc-dd']) remove_status(remove_container_uuids, key='uuid') self._containers.pop(0) self.assertEqual(get_all_status(), self._containers)
def test_remove_container_status(self): remove_container_ids = ([1]) remove_status(remove_container_ids) self._containers.pop(0) self.assertEqual(get_all_status(), self._containers)
def main(): arguments = docopt(__doc__, version=dockerfly_version) docker_cli = dockerpy.Client(base_url='unix://var/run/docker.sock') container_json_exp = [{ 'image_name': 'centos:centos6', 'run_cmd': '/bin/sleep 300', 'eths': [ ('testDockerflyv0', 'eth0', '192.168.159.10/24'), ('testDockerflyv1', 'eth0', '192.168.159.11/24'), ], 'gateway': '192.168.159.2', 'container_name': None, 'status': 'stopped', 'last_modify_time': 0, 'id': 0, 'pid': 0, }] if arguments['ps']: print docker('ps') if arguments['gen']: with open(arguments['<config_json>'], 'w') as config: json.dump(container_json_exp, config, indent=4, encoding='utf-8') if arguments['run']: with open(arguments['<config_json>'], 'r') as config: container_json = json.load(config, encoding='utf-8') for container in container_json: container_id = Container.run(container['image_name'], container['run_cmd'], container['eths'], container['gateway']) print "Container running:ContainerId(%s) Pid(%s)" % ( container_id, docker_cli.inspect_container(container_id)['State']['Pid']) if arguments['sync']: containers = [] for container in docker_cli.containers(all=True): db_container = {} inspect_status = docker_cli.inspect_container(container['Id']) db_container['id'] = inspect_status['Id'] db_container['pid'] = inspect_status['State']['Pid'] db_container['image_name'] = inspect_status['Config']['Image'] db_container['container_name'] = inspect_status['Name'].strip('/') db_container['run_cmd'] = ' '.join(inspect_status['Args']) db_container['status'] = 'running' if inspect_status['State'][ 'Running'] else 'stopped' containers.append(db_container) #remove no exist container for container in ContainerStatus.get_all_status(): if container['id'] not in [co['id'] for co in containers]: ContainerStatus.remove_status([container['id']]) print "remove:=====================" print container #update or remove container status for container in containers: try: modify_container = ContainerStatus.get_status(container['id']) if container['status'] != modify_container['status']: modify_container['status'] = container['status'] ContainerStatus.update_status([modify_container]) print "update:=====================" print modify_container except LookupError: ContainerStatus.add_status([container]) print "add:=====================" print container if arguments['rm']: Container.remove(arguments['<container_id>']) if arguments['resize']: Container.resize(arguments['<container_id>'], arguments['<new_size>']) if arguments['getpid']: print docker_cli.inspect_container( arguments['<container_id>'])['State']['Pid'] if arguments['getpid']: print docker_cli.inspect_container( arguments['<container_id>'])['State']['Pid'] print "run dockerflyd server %s:%s" % (arguments['<ip>'], arguments['<port>']) rundaemon(arguments['<ip>'], arguments['<port>'])