6a4deba966
Change-Id: I43e0beec6508f93a436a150749bfa23571986b9d
224 lines
9.2 KiB
Python
224 lines
9.2 KiB
Python
# Copyright (c) 2015 Mirantis Inc.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
# implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
|
|
from sahara.plugins import conductor
|
|
from sahara.plugins import context
|
|
from sahara.plugins import exceptions as ex
|
|
from sahara.plugins import utils
|
|
from sahara_plugin_ambari.i18n import _
|
|
from sahara_plugin_ambari.plugins.ambari import common
|
|
|
|
|
|
def validate(cluster_id):
|
|
ctx = context.ctx()
|
|
cluster = conductor.cluster_get(ctx, cluster_id)
|
|
_check_ambari(cluster)
|
|
_check_hdfs(cluster)
|
|
_check_yarn(cluster)
|
|
_check_oozie(cluster)
|
|
_check_hive(cluster)
|
|
_check_hbase(cluster)
|
|
_check_spark(cluster)
|
|
_check_ranger(cluster)
|
|
_check_storm(cluster)
|
|
|
|
|
|
def _check_ambari(cluster):
|
|
am_count = utils.get_instances_count(cluster, common.AMBARI_SERVER)
|
|
zk_count = utils.get_instances_count(cluster, common.ZOOKEEPER_SERVER)
|
|
if am_count != 1:
|
|
raise ex.InvalidComponentCountException(common.AMBARI_SERVER, 1,
|
|
am_count)
|
|
if zk_count == 0:
|
|
raise ex.InvalidComponentCountException(common.ZOOKEEPER_SERVER,
|
|
_("1 or more"), zk_count)
|
|
|
|
|
|
def _check_hdfs(cluster):
|
|
nn_count = utils.get_instances_count(cluster, common.NAMENODE)
|
|
dn_count = utils.get_instances_count(cluster, common.DATANODE)
|
|
snn_count = utils.get_instances_count(cluster, common.SECONDARY_NAMENODE)
|
|
|
|
if cluster.cluster_configs.get("general", {}).get(common.NAMENODE_HA):
|
|
_check_zk_ha(cluster)
|
|
_check_jn_ha(cluster)
|
|
|
|
if nn_count != 2:
|
|
raise ex.InvalidComponentCountException(common.NAMENODE, 2,
|
|
nn_count)
|
|
else:
|
|
if nn_count != 1:
|
|
raise ex.InvalidComponentCountException(common.NAMENODE, 1,
|
|
nn_count)
|
|
|
|
if snn_count != 1:
|
|
raise ex.InvalidComponentCountException(common.SECONDARY_NAMENODE,
|
|
1, snn_count)
|
|
|
|
if dn_count == 0:
|
|
raise ex.InvalidComponentCountException(
|
|
common.DATANODE, _("1 or more"), dn_count)
|
|
|
|
|
|
def _check_yarn(cluster):
|
|
rm_count = utils.get_instances_count(cluster, common.RESOURCEMANAGER)
|
|
nm_count = utils.get_instances_count(cluster, common.NODEMANAGER)
|
|
hs_count = utils.get_instances_count(cluster, common.HISTORYSERVER)
|
|
at_count = utils.get_instances_count(cluster, common.APP_TIMELINE_SERVER)
|
|
|
|
if cluster.cluster_configs.get("general", {}).get(
|
|
common.RESOURCEMANAGER_HA):
|
|
_check_zk_ha(cluster)
|
|
|
|
if rm_count != 2:
|
|
raise ex.InvalidComponentCountException(common.RESOURCEMANAGER, 2,
|
|
rm_count)
|
|
else:
|
|
if rm_count != 1:
|
|
raise ex.InvalidComponentCountException(common.RESOURCEMANAGER, 1,
|
|
rm_count)
|
|
|
|
if hs_count != 1:
|
|
raise ex.InvalidComponentCountException(common.HISTORYSERVER, 1,
|
|
hs_count)
|
|
if at_count != 1:
|
|
raise ex.InvalidComponentCountException(common.APP_TIMELINE_SERVER, 1,
|
|
at_count)
|
|
if nm_count == 0:
|
|
raise ex.InvalidComponentCountException(common.NODEMANAGER,
|
|
_("1 or more"), nm_count)
|
|
|
|
|
|
def _check_zk_ha(cluster):
|
|
zk_count = utils.get_instances_count(cluster, common.ZOOKEEPER_SERVER)
|
|
if zk_count < 3:
|
|
raise ex.InvalidComponentCountException(
|
|
common.ZOOKEEPER_SERVER,
|
|
_("3 or more. Odd number"),
|
|
zk_count, _("At least 3 ZooKeepers are required for HA"))
|
|
if zk_count % 2 != 1:
|
|
raise ex.InvalidComponentCountException(
|
|
common.ZOOKEEPER_SERVER,
|
|
_("Odd number"),
|
|
zk_count, _("Odd number of ZooKeepers are required for HA"))
|
|
|
|
|
|
def _check_jn_ha(cluster):
|
|
jn_count = utils.get_instances_count(cluster, common.JOURNAL_NODE)
|
|
if jn_count < 3:
|
|
raise ex.InvalidComponentCountException(
|
|
common.JOURNAL_NODE,
|
|
_("3 or more. Odd number"),
|
|
jn_count, _("At least 3 JournalNodes are required for HA"))
|
|
if jn_count % 2 != 1:
|
|
raise ex.InvalidComponentCountException(
|
|
common.JOURNAL_NODE,
|
|
_("Odd number"),
|
|
jn_count, _("Odd number of JournalNodes are required for HA"))
|
|
|
|
|
|
def _check_oozie(cluster):
|
|
count = utils.get_instances_count(cluster, common.OOZIE_SERVER)
|
|
if count > 1:
|
|
raise ex.InvalidComponentCountException(common.OOZIE_SERVER,
|
|
_("0 or 1"), count)
|
|
|
|
|
|
def _check_hive(cluster):
|
|
hs_count = utils.get_instances_count(cluster, common.HIVE_SERVER)
|
|
hm_count = utils.get_instances_count(cluster, common.HIVE_METASTORE)
|
|
if hs_count > 1:
|
|
raise ex.InvalidComponentCountException(common.HIVE_SERVER,
|
|
_("0 or 1"), hs_count)
|
|
if hm_count > 1:
|
|
raise ex.InvalidComponentCountException(common.HIVE_METASTORE,
|
|
_("0 or 1"), hm_count)
|
|
if hs_count == 0 and hm_count == 1:
|
|
raise ex.RequiredServiceMissingException(
|
|
common.HIVE_SERVER, required_by=common.HIVE_METASTORE)
|
|
if hs_count == 1 and hm_count == 0:
|
|
raise ex.RequiredServiceMissingException(
|
|
common.HIVE_METASTORE, required_by=common.HIVE_SERVER)
|
|
|
|
|
|
def _check_hbase(cluster):
|
|
hm_count = utils.get_instances_count(cluster, common.HBASE_MASTER)
|
|
hr_count = utils.get_instances_count(cluster, common.HBASE_REGIONSERVER)
|
|
if hm_count > 1:
|
|
raise ex.InvalidComponentCountException(common.HBASE_MASTER,
|
|
_("0 or 1"), hm_count)
|
|
if hm_count == 1 and hr_count == 0:
|
|
raise ex.RequiredServiceMissingException(
|
|
common.HBASE_REGIONSERVER, required_by=common.HBASE_MASTER)
|
|
if hr_count > 0 and hm_count == 0:
|
|
raise ex.RequiredServiceMissingException(
|
|
common.HBASE_MASTER, required_by=common.HBASE_REGIONSERVER)
|
|
|
|
|
|
def _check_spark(cluster):
|
|
count = utils.get_instances_count(cluster, common.SPARK_JOBHISTORYSERVER)
|
|
if count > 1:
|
|
raise ex.InvalidComponentCountException(common.SPARK_JOBHISTORYSERVER,
|
|
_("0 or 1"), count)
|
|
|
|
|
|
def _check_ranger(cluster):
|
|
ra_count = utils.get_instances_count(cluster, common.RANGER_ADMIN)
|
|
ru_count = utils.get_instances_count(cluster, common.RANGER_USERSYNC)
|
|
if ra_count > 1:
|
|
raise ex.InvalidComponentCountException(common.RANGER_ADMIN,
|
|
_("0 or 1"), ra_count)
|
|
if ru_count > 1:
|
|
raise ex.InvalidComponentCountException(common.RANGER_USERSYNC,
|
|
_("0 or 1"), ru_count)
|
|
if ra_count == 1 and ru_count == 0:
|
|
raise ex.RequiredServiceMissingException(
|
|
common.RANGER_USERSYNC, required_by=common.RANGER_ADMIN)
|
|
if ra_count == 0 and ru_count == 1:
|
|
raise ex.RequiredServiceMissingException(
|
|
common.RANGER_ADMIN, required_by=common.RANGER_USERSYNC)
|
|
|
|
|
|
def _check_storm(cluster):
|
|
dr_count = utils.get_instances_count(cluster, common.DRPC_SERVER)
|
|
ni_count = utils.get_instances_count(cluster, common.NIMBUS)
|
|
su_count = utils.get_instances_count(cluster, common.STORM_UI_SERVER)
|
|
sv_count = utils.get_instances_count(cluster, common.SUPERVISOR)
|
|
if dr_count > 1:
|
|
raise ex.InvalidComponentCountException(common.DRPC_SERVER,
|
|
_("0 or 1"), dr_count)
|
|
if ni_count > 1:
|
|
raise ex.InvalidComponentCountException(common.NIMBUS,
|
|
_("0 or 1"), ni_count)
|
|
if su_count > 1:
|
|
raise ex.InvalidComponentCountException(common.STORM_UI_SERVER,
|
|
_("0 or 1"), su_count)
|
|
if dr_count == 0 and ni_count == 1:
|
|
raise ex.RequiredServiceMissingException(
|
|
common.DRPC_SERVER, required_by=common.NIMBUS)
|
|
if dr_count == 1 and ni_count == 0:
|
|
raise ex.RequiredServiceMissingException(
|
|
common.NIMBUS, required_by=common.DRPC_SERVER)
|
|
if su_count == 1 and (dr_count == 0 or ni_count == 0):
|
|
raise ex.RequiredServiceMissingException(
|
|
common.NIMBUS, required_by=common.STORM_UI_SERVER)
|
|
if dr_count == 1 and sv_count == 0:
|
|
raise ex.RequiredServiceMissingException(
|
|
common.SUPERVISOR, required_by=common.DRPC_SERVER)
|
|
if sv_count > 0 and dr_count == 0:
|
|
raise ex.RequiredServiceMissingException(
|
|
common.DRPC_SERVER, required_by=common.SUPERVISOR)
|