def apply_default()

in src/hpc/autoscale/node/nodemanager.py [0:0]


    def apply_default(self, node: Node) -> None:

        # obviously we don't want to override anything
        if node.resources.get(self.resource_name) is not None:
            return

        for criteria in self.selection:
            if not criteria.satisfied_by_node(node):
                return

        # it met all of our criteria, so set the default
        default_value = self.default_value_function(node)

        if default_value is None and not self.allow_none:
            logging.fine(
                "Ignoring default value None for resource %s", self.resource_name
            )
            return

        if self.modifier and default_value is not None:
            if not isinstance(default_value, (float, int, ht.Memory)):
                raise RuntimeError(
                    "Can't modify a default resource if the value is not an int, float or memory expression."
                    + "select={} name={} value={} {}={}".format(
                        self.selection,
                        self.resource_name,
                        default_value,
                        self.modifier,
                        self.modifier_magnitude,
                    )
                )
            assert self.modifier_magnitude
            try:
                if self.modifier == "add":
                    default_value = default_value + self.modifier_magnitude  # type: ignore
                elif self.modifier == "subtract":
                    default_value = default_value - self.modifier_magnitude  # type: ignore
                elif self.modifier == "multiply":
                    default_value = default_value * self.modifier_magnitude  # type: ignore
                elif self.modifier == "divide":
                    default_value = default_value / self.modifier_magnitude  # type: ignore
                elif self.modifier == "divide_floor":
                    default_value = default_value // self.modifier_magnitude  # type: ignore
                else:
                    raise RuntimeError("Unsupported modifier {}".format(self))
            except Exception as e:
                logging.error(
                    "Could not modify default value: 'Error={}' select={} name={} value={} {}={}".format(
                        e,
                        self.selection,
                        self.resource_name,
                        default_value,
                        self.modifier,
                        self.modifier_magnitude,
                    )
                )
                return

        node._resources[self.resource_name] = default_value
        node.available[self.resource_name] = default_value