config/sysinv/sysinv/sysinv/sysinv/helm/manifest_monitor.py

124 lines
4.7 KiB
Python

# vim: tabstop=4 shiftwidth=4 softtabstop=4
#
# Copyright (c) 2019 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
# All Rights Reserved.
#
""" System inventory Armada monitor manifest operator."""
from oslo_log import log
from sysinv.common import constants
from sysinv.common import exception
from sysinv.helm import common
from sysinv.helm import manifest_base as base
from sysinv.helm.logstash import LogstashHelm
from sysinv.helm.kibana import KibanaHelm
from sysinv.helm.elasticsearch_master import ElasticsearchMasterHelm
from sysinv.helm.elasticsearch_client import ElasticsearchClientHelm
from sysinv.helm.elasticsearch_curator import ElasticsearchCuratorHelm
from sysinv.helm.elasticsearch_data import ElasticsearchDataHelm
from sysinv.helm.filebeat import FilebeatHelm
from sysinv.helm.metricbeat import MetricbeatHelm
from sysinv.helm.nginx_ingress import NginxIngressHelm
from sysinv.helm.kube_state_metrics import KubeStateMetricsHelm
LOG = log.getLogger('object')
class MonitorArmadaManifestOperator(base.ArmadaManifestOperator):
APP = constants.HELM_APP_MONITOR
ARMADA_MANIFEST = 'monitor-armada-manifest'
CHART_GROUP_NGINX = 'nginx-ingress'
CHART_GROUP_KIBANA = 'kibana'
CHART_GROUP_ELASTICSEARCH = 'elasticsearch'
CHART_GROUP_ELASTICSEARCH_CURATOR = 'elasticsearch-curator'
CHART_GROUP_LOGSTASH = 'logstash'
CHART_GROUP_FILEBEAT = 'filebeat'
CHART_GROUP_METRICBEAT = 'metricbeat'
CHART_GROUP_KUBESTATEMETRICS = 'kube-state-metrics'
CHART_GROUPS_LUT = {
NginxIngressHelm.CHART: CHART_GROUP_NGINX,
KibanaHelm.CHART: CHART_GROUP_KIBANA,
ElasticsearchMasterHelm.CHART: CHART_GROUP_ELASTICSEARCH,
ElasticsearchClientHelm.CHART: CHART_GROUP_ELASTICSEARCH,
ElasticsearchDataHelm.CHART: CHART_GROUP_ELASTICSEARCH,
ElasticsearchCuratorHelm.CHART: CHART_GROUP_ELASTICSEARCH_CURATOR,
LogstashHelm.CHART: CHART_GROUP_LOGSTASH,
FilebeatHelm.CHART: CHART_GROUP_FILEBEAT,
MetricbeatHelm.CHART: CHART_GROUP_METRICBEAT,
KubeStateMetricsHelm.CHART: CHART_GROUP_KUBESTATEMETRICS
}
CHARTS_LUT = {
NginxIngressHelm.CHART: 'nginx-ingress',
KibanaHelm.CHART: 'kibana',
ElasticsearchMasterHelm.CHART: 'elasticsearch-master',
ElasticsearchClientHelm.CHART: 'elasticsearch-client',
ElasticsearchDataHelm.CHART: 'elasticsearch-data',
ElasticsearchCuratorHelm.CHART: 'elasticsearch-curator',
LogstashHelm.CHART: 'logstash',
FilebeatHelm.CHART: 'filebeat',
MetricbeatHelm.CHART: 'metricbeat',
KubeStateMetricsHelm.CHART: 'kube-state-metrics'
}
def manifest_chart_groups_disable(self, dbapi, namespace, chart_group):
""" Disable charts in chart group
:param dbapi: DB api object
:param namespace: cgroup namespace
:param chart_group: the manifest chart group
"""
charts = []
for k, v in self.CHART_GROUPS_LUT.items():
if v == chart_group:
charts.append(k)
app_id = dbapi.kube_app_get(self.APP).id
for chart in charts:
db_helm_override = dbapi.helm_override_get(
app_id, chart, namespace)
db_helm_override.system_overrides.update({'enabled': False})
dbapi.helm_override_update(
app_id, chart, namespace,
{'system_overrides': db_helm_override.system_overrides})
def chart_group_remove(self, dbapi, namespace, chart_group):
self.manifest_chart_groups_delete(self.ARMADA_MANIFEST, chart_group)
self.manifest_chart_groups_disable(dbapi, namespace, chart_group)
def platform_mode_manifest_updates(self, dbapi, mode):
""" Update the application manifest based on the platform
:param dbapi: DB api object
:param mode: mode to control how to apply the application manifest
"""
try:
system = dbapi.isystem_get_one()
except exception.NotFound:
LOG.exception("System %s not found.")
raise
if (system.distributed_cloud_role ==
constants.DISTRIBUTED_CLOUD_ROLE_SUBCLOUD):
# remove the chart_groups not needed in this configuration
self.chart_group_remove(dbapi,
common.HELM_NS_MONITOR,
self.CHART_GROUP_KIBANA)
self.chart_group_remove(dbapi,
common.HELM_NS_MONITOR,
self.CHART_GROUP_ELASTICSEARCH)
self.chart_group_remove(dbapi,
common.HELM_NS_MONITOR,
self.CHART_GROUP_ELASTICSEARCH_CURATOR)