当前位置: 首页>>代码示例>>Python>>正文


Python CLBNode.from_node_json方法代码示例

本文整理汇总了Python中otter.convergence.model.CLBNode.from_node_json方法的典型用法代码示例。如果您正苦于以下问题:Python CLBNode.from_node_json方法的具体用法?Python CLBNode.from_node_json怎么用?Python CLBNode.from_node_json使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在otter.convergence.model.CLBNode的用法示例。


在下文中一共展示了CLBNode.from_node_json方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。

示例1: test_from_node_json_with_weight

# 需要导入模块: from otter.convergence.model import CLBNode [as 别名]
# 或者: from otter.convergence.model.CLBNode import from_node_json [as 别名]
 def test_from_node_json_with_weight(self):
     """
     A node's JSON representation can be parsed to a :obj:`CLBNode` object
     with a `CLBDescription`. When weight is not specified it defaults to 1.
     """
     node_json = {
         "id": "node1",
         "address": "1.2.3.4",
         "port": 20,
         "condition": "DRAINING",
         "type": "SECONDARY",
         "weight": 50,
     }
     node = CLBNode.from_node_json(123, node_json)
     self.assertEqual(
         node,
         CLBNode(
             node_id="node1",
             address="1.2.3.4",
             connections=None,
             drained_at=0.0,
             description=CLBDescription(
                 lb_id="123", port=20, weight=50, condition=CLBNodeCondition.DRAINING, type=CLBNodeType.SECONDARY
             ),
         ),
     )
开发者ID:pratikmallya,项目名称:otter,代码行数:28,代码来源:test_model.py

示例2: get_clb_contents

# 需要导入模块: from otter.convergence.model import CLBNode [as 别名]
# 或者: from otter.convergence.model.CLBNode import from_node_json [as 别名]
def get_clb_contents():
    """
    Get Rackspace Cloud Load Balancer contents as list of `CLBNode`. CLB
    health monitor information is also returned as a pmap of :obj:`CLB` objects
    mapped on LB ID.

    :return: Effect of (``list`` of :obj:`CLBNode`, `pmap` of :obj:`CLB`)
    :rtype: :obj:`Effect`
    """
    # If we get a CLBNotFoundError while fetching feeds, we should throw away
    # all nodes related to that load balancer, because we don't want to act on
    # data that we know is invalid/outdated (for example, if we can't fetch a
    # feed because CLB was deleted, we don't want to say that we have a node in
    # DRAINING with draining time of 0; we should just say that the node is
    # gone).

    def gone(r):
        return catch(CLBNotFoundError, lambda exc: r)

    lb_ids = [lb['id'] for lb in (yield _retry(get_clbs()))]
    node_reqs = [_retry(get_clb_nodes(lb_id).on(error=gone([])))
                 for lb_id in lb_ids]
    healthmon_reqs = [
        _retry(get_clb_health_monitor(lb_id).on(error=gone(None)))
        for lb_id in lb_ids]
    all_nodes_hms = yield parallel(node_reqs + healthmon_reqs)
    all_nodes, hms = all_nodes_hms[:len(lb_ids)], all_nodes_hms[len(lb_ids):]
    lb_nodes = {
        lb_id: [CLBNode.from_node_json(lb_id, node)
                for node in nodes]
        for lb_id, nodes in zip(lb_ids, all_nodes)}
    clbs = {
        str(lb_id): CLB(bool(health_mon))
        for lb_id, health_mon in zip(lb_ids, hms) if health_mon is not None}
    draining = [n for n in concat(lb_nodes.values())
                if n.description.condition == CLBNodeCondition.DRAINING]
    feeds = yield parallel(
        [_retry(get_clb_node_feed(n.description.lb_id, n.node_id).on(
            error=gone(None)))
         for n in draining]
    )
    nodes_to_feeds = dict(zip(draining, feeds))
    deleted_lbs = set([
        node.description.lb_id
        for (node, feed) in nodes_to_feeds.items() if feed is None])

    def update_drained_at(node):
        feed = nodes_to_feeds.get(node)
        if node.description.lb_id in deleted_lbs:
            return None
        if feed is not None:
            node.drained_at = extract_clb_drained_at(feed)
        return node

    nodes = map(update_drained_at, concat(lb_nodes.values()))
    yield do_return((
        list(filter(bool, nodes)),
        pmap(keyfilter(lambda k: k not in deleted_lbs, clbs))))
开发者ID:rackerlabs,项目名称:otter,代码行数:60,代码来源:gathering.py

示例3: test_success

# 需要导入模块: from otter.convergence.model import CLBNode [as 别名]
# 或者: from otter.convergence.model.CLBNode import from_node_json [as 别名]
 def test_success(self):
     """
     Gets LB contents with drained_at correctly
     """
     node11 = node("11", "a11", condition="DRAINING")
     node12 = node("12", "a12")
     node21 = node("21", "a21", weight=3)
     node22 = node("22", "a22", weight=None, condition="DRAINING")
     seq = [
         lb_req("loadbalancers", True, {"loadBalancers": [{"id": 1}, {"id": 2}]}),
         parallel_sequence([[nodes_req(1, [node11, node12])], [nodes_req(2, [node21, node22])]]),
         parallel_sequence([[node_feed_req(1, "11", "11feed")], [node_feed_req(2, "22", "22feed")]]),
     ]
     eff = get_clb_contents()
     self.assertEqual(
         perform_sequence(seq, eff),
         [
             assoc_obj(CLBNode.from_node_json(1, node11), drained_at=1.0),
             CLBNode.from_node_json(1, node12),
             CLBNode.from_node_json(2, node21),
             assoc_obj(CLBNode.from_node_json(2, node22), drained_at=2.0),
         ],
     )
开发者ID:pratikmallya,项目名称:otter,代码行数:25,代码来源:test_gathering.py

示例4: test_from_node_json_no_weight

# 需要导入模块: from otter.convergence.model import CLBNode [as 别名]
# 或者: from otter.convergence.model.CLBNode import from_node_json [as 别名]
 def test_from_node_json_no_weight(self):
     """
     A node's JSON representation can be parsed to a :obj:`CLBNode` object
     with a `CLBDescription`. When weight is not specified it defaults to 1.
     """
     node_json = {'id': 'node1', 'address': '1.2.3.4', 'port': 20,
                  'condition': 'DRAINING', 'type': 'SECONDARY'}
     node = CLBNode.from_node_json(123, node_json)
     self.assertEqual(
         node,
         CLBNode(node_id='node1', address='1.2.3.4',
                 connections=None, drained_at=0.0,
                 description=CLBDescription(
                     lb_id='123', port=20,
                     weight=1,
                     condition=CLBNodeCondition.DRAINING,
                     type=CLBNodeType.SECONDARY)))
开发者ID:stanzikratel,项目名称:otter,代码行数:19,代码来源:test_model.py

示例5: test_lb_disappeared_during_feed_fetch

# 需要导入模块: from otter.convergence.model import CLBNode [as 别名]
# 或者: from otter.convergence.model.CLBNode import from_node_json [as 别名]
 def test_lb_disappeared_during_feed_fetch(self):
     """
     If a load balancer gets deleted while fetching feeds, no nodes will be
     returned for it.
     """
     node21 = node("21", "a21", condition="DRAINING", weight=None)
     seq = [
         lb_req("loadbalancers", True, {"loadBalancers": [{"id": 1}, {"id": 2}]}),
         parallel_sequence(
             [[nodes_req(1, [node("11", "a11", condition="DRAINING"), node("12", "a12")])], [nodes_req(2, [node21])]]
         ),
         parallel_sequence(
             [[node_feed_req(1, "11", CLBNotFoundError(lb_id=u"1"))], [node_feed_req(2, "21", "22feed")]]
         ),
     ]
     eff = get_clb_contents()
     self.assertEqual(perform_sequence(seq, eff), [assoc_obj(CLBNode.from_node_json(2, node21), drained_at=2.0)])
开发者ID:pratikmallya,项目名称:otter,代码行数:19,代码来源:test_gathering.py

示例6: get_clb_contents

# 需要导入模块: from otter.convergence.model import CLBNode [as 别名]
# 或者: from otter.convergence.model.CLBNode import from_node_json [as 别名]
def get_clb_contents():
    """Get Rackspace Cloud Load Balancer contents as list of `CLBNode`."""
    # If we get a CLBNotFoundError while fetching feeds, we should throw away
    # all nodes related to that load balancer, because we don't want to act on
    # data that we know is invalid/outdated (for example, if we can't fetch a
    # feed because CLB was deleted, we don't want to say that we have a node in
    # DRAINING with draining time of 0; we should just say that the node is
    # gone).

    def gone(r):
        return catch(CLBNotFoundError, lambda exc: r)
    lb_ids = [lb['id'] for lb in (yield _retry(get_clbs()))]
    node_reqs = [_retry(get_clb_nodes(lb_id).on(error=gone([])))
                 for lb_id in lb_ids]
    all_nodes = yield parallel(node_reqs)
    lb_nodes = {lb_id: [CLBNode.from_node_json(lb_id, node) for node in nodes]
                for lb_id, nodes in zip(lb_ids, all_nodes)}
    draining = [n for n in concat(lb_nodes.values())
                if n.description.condition == CLBNodeCondition.DRAINING]
    feeds = yield parallel(
        [_retry(get_clb_node_feed(n.description.lb_id, n.node_id).on(
            error=gone(None)))
         for n in draining]
    )
    nodes_to_feeds = dict(zip(draining, feeds))
    deleted_lbs = set([
        node.description.lb_id
        for (node, feed) in nodes_to_feeds.items() if feed is None])

    def update_drained_at(node):
        feed = nodes_to_feeds.get(node)
        if node.description.lb_id in deleted_lbs:
            return None
        if feed is not None:
            return assoc_obj(node, drained_at=extract_CLB_drained_at(feed))
        else:
            return node
    nodes = map(update_drained_at, concat(lb_nodes.values()))
    yield do_return(list(filter(bool, nodes)))
开发者ID:pratikmallya,项目名称:otter,代码行数:41,代码来源:gathering.py


注:本文中的otter.convergence.model.CLBNode.from_node_json方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。