예제 #1
0
 def _init_new_host_object(cls):
     return watolib.Host(
         folder=watolib.Folder.current(),
         host_name=request.var("host"),
         attributes={},
         cluster_nodes=[],
     )
예제 #2
0
    def _get_cluster_nodes(self):
        if not self._is_cluster():
            return None

        cluster_nodes = self._vs_cluster_nodes().from_html_vars("nodes")
        self._vs_cluster_nodes().validate_value(cluster_nodes, "nodes")
        if len(cluster_nodes) < 1:
            raise MKUserError("nodes_0", _("The cluster must have at least one node"))

        # Fake a cluster host in order to get calculated tag groups via effective attributes...
        cluster_computed_datasources = cmk.utils.tags.compute_datasources(
            watolib.Host(
                watolib.Folder.current(),
                self._host.name(),
                watolib.collect_attributes("cluster", new=False),
                [],
            ).tag_groups()
        )

        for nr, cluster_node in enumerate(cluster_nodes):
            if cluster_node == self._host.name():
                raise MKUserError("nodes_%d" % nr, _("The cluster can not be a node of it's own"))

            if not watolib.Host.host_exists(cluster_node):
                raise MKUserError(
                    "nodes_%d" % nr,
                    _(
                        "The node <b>%s</b> does not exist "
                        " (must be a host that is configured with WATO)"
                    )
                    % cluster_node,
                )

            node_computed_datasources = cmk.utils.tags.compute_datasources(
                watolib.Host.load_host(cluster_node).tag_groups()
            )

            if datasource_differences := cluster_computed_datasources.get_differences_to(
                node_computed_datasources
            ):
                raise MKUserError(
                    "nodes_%d" % nr,
                    _("Cluster and nodes must have the same datasource. ")
                    + self._format_datasource_differences(cluster_node, datasource_differences),
                )