本文整理汇总了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
),
),
)
示例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))))
示例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),
],
)
示例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)))
示例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)])
示例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)))