def main(): args = parse_args() docker_client = get_docker_client() running_mesos_task_ids = [task["id"] for task in mesos_tools.filter_running_tasks( mesos_tools.get_running_tasks_from_active_frameworks(''))] running_mesos_docker_containers = get_running_mesos_docker_containers() orphaned_containers = [] for container in running_mesos_docker_containers: mesos_task_id = mesos_tools.get_mesos_id_from_container( container=container, client=docker_client) if mesos_task_id not in running_mesos_task_ids: orphaned_containers.append((container["Names"][0].strip("/"), mesos_task_id)) if orphaned_containers: print "CRIT: Docker containers are orphaned: %s%s" % (", ".join( "%s (%s)" % (container_name, mesos_task_id) for container_name, mesos_task_id in orphaned_containers ), " and will be killed" if args.force else "") if args.force: for container_name, mesos_task_id in orphaned_containers: docker_client.kill(container_name) sys.exit(1) else: print "OK: All mesos task IDs accounted for" sys.exit(0)
async def main(): args = parse_args() docker_client = get_docker_client() running_mesos_task_ids = [task["id"] for task in mesos_tools.filter_running_tasks( await mesos_tools.get_running_tasks_from_frameworks(''), )] running_mesos_docker_containers = get_running_mesos_docker_containers() orphaned_containers = [] for container in running_mesos_docker_containers: mesos_task_id = mesos_tools.get_mesos_id_from_container( container=container, client=docker_client, ) if mesos_task_id not in running_mesos_task_ids: orphaned_containers.append((container["Names"][0].strip("/"), mesos_task_id)) if orphaned_containers: paasta_print("CRIT: Docker containers are orphaned: {}{}".format( ", ".join( f"{container_name} ({mesos_task_id})" for container_name, mesos_task_id in orphaned_containers ), " and will be killed" if args.force else "", )) if args.force: for container_name, mesos_task_id in orphaned_containers: docker_client.kill(container_name) sys.exit(1) else: paasta_print("OK: All mesos task IDs accounted for") sys.exit(0)
def services_running_here(): """Generator helper that yields (service, instance, mac address) of both marathon and chronos tasks. """ for container in get_running_mesos_docker_containers(): if container['HostConfig']['NetworkMode'] != 'bridge': continue service = container['Labels'].get('paasta_service') instance = container['Labels'].get('paasta_instance') if service is None or instance is None: continue mac = container['NetworkSettings']['Networks']['bridge']['MacAddress'] yield service, instance, mac
def services_running_here(): """Generator helper that yields (service, instance, mac address) of both marathon tasks. """ for container in get_running_mesos_docker_containers(): if container["HostConfig"]["NetworkMode"] != "bridge": continue service = container["Labels"].get("paasta_service") instance = container["Labels"].get("paasta_instance") if service is None or instance is None: continue network_info = container["NetworkSettings"]["Networks"]["bridge"] mac = network_info["MacAddress"] ip = network_info["IPAddress"] yield service, instance, mac, ip
def test_get_running_mesos_docker_containers(): fake_container_data = [ { "Status": "Up 2 hours", "Names": [u'/mesos-legit.e1ad42eb-3ed7-4c9b-8711-aff017ef55a5'], "Id": "05698f4156c4f30c8dcd747f7724b14c9af7771c9a4b96fdd6aa37d6419a12a3" }, { "Status": "Up 3 days", "Names": [u'/definitely_not_meeeeesos-.6d2fb3aa-2fef-4f98-8fed-df291481e91f'], "Id": u"ae66e2c3fe3c4b2a7444212592afea5cc6a4d8ca70ee595036b19949e00a257c" } ] with mock.patch("paasta_tools.utils.get_docker_client") as mock_docker: docker_client = mock_docker.return_value docker_client.containers.return_value = fake_container_data assert len(utils.get_running_mesos_docker_containers()) == 1
def test_get_running_mesos_docker_containers(): fake_container_data = [ { "Status": "Up 2 hours", "Names": [u'/mesos-legit.e1ad42eb-3ed7-4c9b-8711-aff017ef55a5'], "Id": "05698f4156c4f30c8dcd747f7724b14c9af7771c9a4b96fdd6aa37d6419a12a3" }, { "Status": "Up 3 days", "Names": [u'/definitely_not_meeeeesos-.6d2fb3aa-2fef-4f98-8fed-df291481e91f'], "Id": u"ae66e2c3fe3c4b2a7444212592afea5cc6a4d8ca70ee595036b19949e00a257c" } ] with mock.patch("paasta_tools.utils.get_docker_client") as mock_docker: docker_client = mock_docker.return_value docker_client.containers.return_value = fake_container_data assert len(utils.get_running_mesos_docker_containers()) == 1