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)
Example #3
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
Example #5
0
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