in ambari-server/src/main/resources/common-services/AMBARI_METRICS/3.0.0/package/scripts/ams.py [0:0]
def ams(name=None, action=None):
import params
if name == "collector":
Directory(
params.ams_collector_conf_dir,
owner=params.ams_user,
group=params.user_group,
create_parents=True,
recursive_ownership=True,
)
Directory(
params.ams_checkpoint_dir,
owner=params.ams_user,
group=params.user_group,
cd_access="a",
create_parents=True,
recursive_ownership=True,
)
new_ams_site = {}
new_ams_site.update(params.config["configurations"]["ams-site"])
if params.clusterHostInfoDict:
master_components = []
slave_components = []
components = dict(params.clusterHostInfoDict).keys()
known_slave_components = [
"nodemanager",
"metrics_monitor",
"datanode",
"hbase_regionserver",
]
for component in components:
if component and component.endswith("_hosts"):
component_name = component[:-6]
elif component and component.endswith("_host"):
component_name = component[:-5]
else:
continue
if component_name in known_slave_components:
slave_components.insert(0, component_name)
else:
master_components.insert(0, component_name)
if slave_components:
new_ams_site["timeline.metrics.initial.configured.slave.components"] = ",".join(
slave_components
)
if master_components:
if "ambari_server" not in master_components:
master_components.insert(0, "ambari_server")
master_components = sorted(master_components)
new_ams_site["timeline.metrics.initial.configured.master.components"] = (
",".join(master_components)
)
hbase_total_heapsize_with_trailing_m = params.hbase_heapsize
hbase_total_heapsize = int(hbase_total_heapsize_with_trailing_m[:-1]) * 1024 * 1024
new_ams_site["hbase_total_heapsize"] = hbase_total_heapsize
XmlConfig(
"ams-site.xml",
conf_dir=params.ams_collector_conf_dir,
configurations=new_ams_site,
configuration_attributes=params.config["configurationAttributes"]["ams-site"],
owner=params.ams_user,
group=params.user_group,
)
XmlConfig(
"ssl-server.xml",
conf_dir=params.ams_collector_conf_dir,
configurations=params.config["configurations"]["ams-ssl-server"],
configuration_attributes=params.config["configurationAttributes"][
"ams-ssl-server"
],
owner=params.ams_user,
group=params.user_group,
)
merged_ams_hbase_site = {}
merged_ams_hbase_site.update(params.config["configurations"]["ams-hbase-site"])
if params.security_enabled:
merged_ams_hbase_site.update(
params.config["configurations"]["ams-hbase-security-site"]
)
# Add phoenix client side overrides
merged_ams_hbase_site["phoenix.query.maxGlobalMemoryPercentage"] = str(
params.phoenix_max_global_mem_percent
)
merged_ams_hbase_site["phoenix.spool.directory"] = params.phoenix_client_spool_dir
XmlConfig(
"hbase-site.xml",
conf_dir=params.ams_collector_conf_dir,
configurations=merged_ams_hbase_site,
configuration_attributes=params.config["configurationAttributes"][
"ams-hbase-site"
],
owner=params.ams_user,
group=params.user_group,
)
if params.security_enabled:
TemplateConfig(
os.path.join(params.hbase_conf_dir, "ams_collector_jaas.conf"),
owner=params.ams_user,
template_tag=None,
)
if params.log4j_props != None:
File(
format("{params.ams_collector_conf_dir}/log4j.properties"),
mode=0o644,
group=params.user_group,
owner=params.ams_user,
content=InlineTemplate(params.log4j_props),
)
File(
format("{ams_collector_conf_dir}/ams-env.sh"),
owner=params.ams_user,
content=InlineTemplate(params.ams_env_sh_template),
)
Directory(
params.ams_collector_log_dir,
owner=params.ams_user,
group=params.user_group,
cd_access="a",
create_parents=True,
mode=0o755,
)
Directory(
params.ams_collector_pid_dir,
owner=params.ams_user,
group=params.user_group,
cd_access="a",
create_parents=True,
mode=0o755,
)
# Hack to allow native HBase libs to be included for embedded hbase
File(
os.path.join(params.ams_hbase_home_dir, "bin", "hadoop"),
owner=params.ams_user,
mode=0o755,
)
# On some OS this folder could be not exists, so we will create it before pushing there files
Directory(params.limits_conf_dir, create_parents=True, owner="root", group="root")
# Setting up security limits
File(
os.path.join(params.limits_conf_dir, "ams.conf"),
owner="root",
group="root",
mode=0o644,
content=Template("ams.conf.j2"),
)
# Phoenix spool file dir if not /tmp
if not os.path.exists(params.phoenix_client_spool_dir):
Directory(
params.phoenix_client_spool_dir,
owner=params.ams_user,
mode=0o755,
group=params.user_group,
cd_access="a",
create_parents=True,
)
pass
if not params.is_local_fs_rootdir and params.is_ams_distributed:
# Configuration needed to support NN HA
XmlConfig(
"hdfs-site.xml",
conf_dir=params.ams_collector_conf_dir,
configurations=params.config["configurations"]["hdfs-site"],
configuration_attributes=params.config["configurationAttributes"]["hdfs-site"],
owner=params.ams_user,
group=params.user_group,
mode=0o644,
)
XmlConfig(
"hdfs-site.xml",
conf_dir=params.hbase_conf_dir,
configurations=params.config["configurations"]["hdfs-site"],
configuration_attributes=params.config["configurationAttributes"]["hdfs-site"],
owner=params.ams_user,
group=params.user_group,
mode=0o644,
)
# Remove spnego configs from core-site if platform does not have python-kerberos library
truncated_core_site = {}
truncated_core_site.update(params.config["configurations"]["core-site"])
if is_spnego_enabled(params):
truncated_core_site.pop("hadoop.http.authentication.type")
truncated_core_site.pop("hadoop.http.filter.initializers")
XmlConfig(
"core-site.xml",
conf_dir=params.ams_collector_conf_dir,
configurations=truncated_core_site,
configuration_attributes=params.config["configurationAttributes"]["core-site"],
owner=params.ams_user,
group=params.user_group,
mode=0o644,
)
XmlConfig(
"core-site.xml",
conf_dir=params.hbase_conf_dir,
configurations=truncated_core_site,
configuration_attributes=params.config["configurationAttributes"]["core-site"],
owner=params.ams_user,
group=params.user_group,
mode=0o644,
)
if params.metric_collector_https_enabled:
export_ca_certs(params.ams_collector_conf_dir)
pass
elif name == "monitor":
# TODO Uncomment when SPNEGO support has been added to AMS service check and Grafana.
if is_spnego_enabled(params) and is_redhat_centos_6_plus():
try:
import kerberos
except ImportError:
raise ImportError(
"python-kerberos package need to be installed to run AMS in SPNEGO mode"
)
Directory(
params.ams_monitor_conf_dir,
owner=params.ams_user,
group=params.user_group,
create_parents=True,
)
Directory(
params.ams_monitor_log_dir,
owner=params.ams_user,
group=params.user_group,
mode=0o755,
create_parents=True,
)
if params.host_in_memory_aggregation and params.log4j_props is not None:
File(
format("{params.ams_monitor_conf_dir}/log4j.properties"),
mode=0o644,
group=params.user_group,
owner=params.ams_user,
content=InlineTemplate(params.log4j_props),
)
XmlConfig(
"ams-site.xml",
conf_dir=params.ams_monitor_conf_dir,
configurations=params.config["configurations"]["ams-site"],
configuration_attributes=params.config["configurationAttributes"]["ams-site"],
owner=params.ams_user,
group=params.user_group,
)
XmlConfig(
"ssl-server.xml",
conf_dir=params.ams_monitor_conf_dir,
configurations=params.config["configurations"]["ams-ssl-server"],
configuration_attributes=params.config["configurationAttributes"][
"ams-ssl-server"
],
owner=params.ams_user,
group=params.user_group,
)
pass
Execute(format("{sudo} chown -R {ams_user}:{user_group} {ams_monitor_log_dir}"))
Directory(
params.ams_monitor_pid_dir,
owner=params.ams_user,
group=params.user_group,
cd_access="a",
mode=0o755,
create_parents=True,
)
Directory(
format("{ams_monitor_dir}/psutil/build"),
owner=params.ams_user,
group=params.user_group,
cd_access="a",
mode=0o755,
create_parents=True,
)
Execute(format("{sudo} chown -R {ams_user}:{user_group} {ams_monitor_dir}"))
TemplateConfig(
format("{ams_monitor_conf_dir}/metric_monitor.ini"),
owner=params.ams_user,
group=params.user_group,
template_tag=None,
)
TemplateConfig(
format("{ams_monitor_conf_dir}/metric_groups.conf"),
owner=params.ams_user,
group=params.user_group,
template_tag=None,
)
File(
format("{ams_monitor_conf_dir}/ams-env.sh"),
owner=params.ams_user,
content=InlineTemplate(params.ams_env_sh_template),
)
if params.metric_collector_https_enabled or params.is_aggregation_https_enabled:
export_ca_certs(params.ams_monitor_conf_dir)
# On some OS this folder could be not exists, so we will create it before pushing there files
Directory(params.limits_conf_dir, create_parents=True, owner="root", group="root")
# Setting up security limits
File(
os.path.join(params.limits_conf_dir, "ams.conf"),
owner="root",
group="root",
mode=0o644,
content=Template("ams.conf.j2"),
)
pass
elif name == "grafana":
ams_grafana_directories = [
params.ams_grafana_conf_dir,
params.ams_grafana_log_dir,
params.ams_grafana_data_dir,
params.ams_grafana_pid_dir,
]
for ams_grafana_directory in ams_grafana_directories:
Directory(
ams_grafana_directory,
owner=params.ams_user,
group=params.user_group,
mode=0o755,
create_parents=True,
recursive_ownership=True,
)
File(
format("{ams_grafana_conf_dir}/ams-grafana-env.sh"),
owner=params.ams_user,
group=params.user_group,
content=InlineTemplate(params.ams_grafana_env_sh_template),
)
File(
format("{ams_grafana_conf_dir}/ams-grafana.ini"),
owner=params.ams_user,
group=params.user_group,
content=InlineTemplate(params.ams_grafana_ini_template),
mode=0o600,
)
if action != "stop":
for dir in ams_grafana_directories:
Execute(("chown", "-R", params.ams_user, dir), sudo=True)
if params.metric_collector_https_enabled:
export_ca_certs(params.ams_grafana_conf_dir)
pass