in metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/METRON/CURRENT/service_advisor.py [0:0]
def getServiceComponentLayoutValidations(self, services, hosts):
componentsListList = [service["components"] for service in services["services"]]
componentsList = [item["StackServiceComponents"] for sublist in componentsListList for item in sublist]
metronParsersHost = self.getHosts(componentsList, "METRON_PARSERS")[0]
metronEnrichmentMaster = self.getHosts(componentsList, "METRON_ENRICHMENT_MASTER")[0]
metronProfilerHost = self.getHosts(componentsList, "METRON_PROFILER")[0]
metronPcapHost = self.getHosts(componentsList, "METRON_PCAP")[0]
metronIndexingHost = self.getHosts(componentsList, "METRON_INDEXING")[0]
metronRESTHost = self.getHosts(componentsList, "METRON_REST")[0]
metronManagementUIHost = self.getHosts(componentsList, "METRON_MANAGEMENT_UI")[0]
metronAlertsUIHost = self.getHosts(componentsList, "METRON_ALERTS_UI")[0]
hbaseClientHosts = self.getHosts(componentsList, "HBASE_CLIENT")
hdfsClientHosts = self.getHosts(componentsList, "HDFS_CLIENT")
zookeeperClientHosts = self.getHosts(componentsList, "ZOOKEEPER_CLIENT")
kafkaBrokers = self.getHosts(componentsList, "KAFKA_BROKER")
stormSupervisors = self.getHosts(componentsList, "SUPERVISOR")
items = []
# Metron Must Co-locate with KAFKA_BROKER and STORM_SUPERVISOR
if metronParsersHost not in kafkaBrokers:
message = "Metron must be colocated with an instance of KAFKA BROKER"
items.append({ "type": 'host-component', "level": 'ERROR', "message": message, "component-name": 'METRON_PARSERS', "host": metronParsersHost })
if metronParsersHost not in stormSupervisors:
message = "Metron must be colocated with an instance of STORM SUPERVISOR"
items.append({ "type": 'host-component', "level": 'WARN', "message": message, "component-name": 'METRON_PARSERS', "host": metronParsersHost })
if metronRESTHost not in stormSupervisors:
message = "Metron REST must be colocated with an instance of STORM SUPERVISOR"
items.append({ "type": 'host-component', "level": 'WARN', "message": message, "component-name": 'METRON_REST', "host": metronRESTHost })
if metronParsersHost != metronRESTHost:
message = "Metron REST must be co-located with Metron Parsers on {0}".format(metronParsersHost)
items.append({ "type": 'host-component', "level": 'WARN', "message": message, "component-name": 'METRON_REST', "host": metronRESTHost })
if metronParsersHost != metronEnrichmentMaster:
message = "Metron Enrichment Master must be co-located with Metron Parsers on {0}".format(metronParsersHost)
items.append({ "type": 'host-component', "level": 'ERROR', "message": message, "component-name": 'METRON_ENRICHMENT_MASTER', "host": metronEnrichmentMaster })
if metronParsersHost != metronIndexingHost:
message = "Metron Indexing must be co-located with Metron Parsers on {0}".format(metronParsersHost)
items.append({ "type": 'host-component', "level": 'ERROR', "message": message, "component-name": 'METRON_INDEXING', "host": metronIndexingHost })
if metronParsersHost != metronPcapHost:
message = "Metron PCAP must be co-located with Metron Parsers on {0}".format(metronParsersHost)
items.append({ "type": 'host-component', "level": 'ERROR', "message": message, "component-name": 'METRON_PCAP', "host": metronPcapHost })
if metronParsersHost != metronProfilerHost:
message = "Metron Profiler must be co-located with Metron Parsers on {0}".format(metronParsersHost)
items.append({ "type": 'host-component', "level": 'ERROR', "message": message, "component-name": 'METRON_PROFILER', "host": metronProfilerHost })
# Enrichment Master also needs ZK Client, but this is already guaranteed by being colocated with Parsers Master
if metronParsersHost not in zookeeperClientHosts:
message = "Metron must be co-located with an instance of Zookeeper Client"
items.append({ "type": 'host-component', "level": 'WARN', "message": message, "component-name": 'METRON_PARSERS', "host": metronParsersHost })
# Enrichment Master also needs HDFS clients, but this is already guaranteed by being colocated with Parsers Master
if metronParsersHost not in hdfsClientHosts:
message = "Metron must be co-located with an instance of HDFS Client"
items.append({ "type": 'host-component', "level": 'WARN', "message": message, "component-name": 'METRON_PARSERS', "host": metronParsersHost })
if metronEnrichmentMaster not in hbaseClientHosts:
message = "Metron Enrichment Master must be co-located with an instance of HBase Client"
items.append({ "type": 'host-component', "level": 'WARN', "message": message, "component-name": 'METRON_ENRICHMENT_MASTER', "host": metronEnrichmentMaster })
if metronManagementUIHost != metronAlertsUIHost:
message = "Metron Alerts UI must be co-located with Metron Management UI on {0}".format(metronManagementUIHost)
items.append({ "type": 'host-component', "level": 'ERROR', "message": message, "component-name": 'METRON_ALERTS_UI', "host": metronAlertsUIHost })
return items