示例#1
0
 def _init_new_host_object(cls):
     return Host(
         folder=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(
            Host(
                Folder.current(),
                self._host.name(),
                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 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(
                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),
                )