cli.py 文件源码

python
阅读 19 收藏 0 点赞 0 评论 0

项目:proxenos 作者: darvid 项目源码 文件源码
def cmd_select(ctx,                  # type: click.Context
               backend,              # type: str
               host,                 # type: str
               port,                 # type: int
               filter_address,       # type: str
               filter_service_name,  # type: str
               filter_service_tags,  # type: str
               hash_method,          # type: proxenos.rendezvous.HashMethod
               key,                  # type: str
               ):
    # type: (...) -> None
    """Selects a node from a cluster."""
    if port is None:
        port = DEFAULT_PORTS[backend]
    driver_manager = stevedore.driver.DriverManager(
        namespace=proxenos.mappers.NAMESPACE,
        name=backend,
        invoke_on_load=False)
    try:
        mapper = driver_manager.driver(host=host, port=port)
    except proxenos.errors.ServiceDiscoveryConnectionError as err:
        click.secho(str(err), fg='red')
        ctx.exit(proxenos.const.ExitCode.CONNECTION_FAILURE)
    mapper.update()
    cluster = mapper.cluster.copy()
    # TODO(darvid): Add filtering support in the mapper API itself
    if filter_service_tags:
        pattern = re.compile(filter_service_tags)
        cluster = {service for service in cluster
                   if all(pattern.match(tag) for tag in service.tags)}
    if filter_service_name:
        pattern = re.compile(filter_service_name)
        cluster = {service for service in cluster
                   if pattern.match(service.name)}
    if filter_address:
        pattern = re.compile(filter_address)
        cluster = {service for service in cluster
                   if pattern.match(str(service.socket_address))}
    service = proxenos.rendezvous.select_node(
        cluster, key, hash_method=hash_method)
    if service is None:
        ctx.exit(proxenos.const.ExitCode.SERVICES_NOT_FOUND)
    click.echo(str(service.socket_address))
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号