def _init_new_host_object(cls): return Host( folder=Folder.current(), host_name=request.var("host"), attributes={}, cluster_nodes=[], )
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), )