in src/hpc/autoscale/node/constraints.py [0:0]
def satisfied_by_node(self, node: "Node") -> SatisfiedResult:
if node._is_example_node():
node_str = "Bucket[array={} vm_size={} attr={}]".format(
node.nodearray, node.vm_size, self.attr
)
else:
node_str = "Node[name={} attr={}]".format(node.name, self.attr)
if self.attr not in node.available:
# TODO log
msg = "Resource[name={}] is not defined for {}".format(self.attr, node_str)
return SatisfiedResult(
"UndefinedResource",
self,
node,
[msg],
)
try:
target = node.available[self.attr]
assert isinstance(target, (int, float, ht.Size)), "%s => %s" % (
target,
type(target),
)
if target >= self.value:
return SatisfiedResult(
"success",
self,
node,
)
except TypeError as e:
logging.warning(
"For attribute %s: Could not evaluate %s >= %s because they are different types: %s",
self.attr,
node.available[self.attr],
self.value,
e,
)
if node._is_example_node():
msg = "Resource[name={} value={}] > Bucket[array={} vm_size={} value={}]".format(
self.attr,
repr(self.value),
node.nodearray,
node.vm_size,
repr(node.available[self.attr]),
)
else:
msg = "Resource[name={} value={}] > Node[name={} value={}]".format(
self.attr,
repr(self.value),
node.name,
repr(node.available[self.attr]),
)
return SatisfiedResult(
"InsufficientResource",
self,
node,
reasons=[msg],
)