config/sysinv/sysinv/sysinv/sysinv/cmd/helm.py

124 lines
4.2 KiB
Python

#!/usr/bin/env python
#
# Copyright (c) 2021 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
"""
System Inventory Helm Utility.
"""
import sys
from oslo_config import cfg
from oslo_log import log
from sysinv.common import constants
from sysinv.common import exception
from sysinv.common import service
from sysinv.conductor import kube_app
from sysinv.db import api
from sysinv.helm import helm
CONF = cfg.CONF
LOG = log.getLogger(__name__)
def create_app_overrides_action(path, app_name=None, namespace=None):
dbapi = api.get_instance()
try:
db_app = dbapi.kube_app_get(app_name)
except exception.KubeAppNotFound:
LOG.info("Application %s not found" % app_name)
return
helm_operator = helm.HelmOperator(dbapi=dbapi)
app_operator = kube_app.AppOperator(dbapi, helm_operator, {})
if not app_operator.app_has_system_plugins(db_app):
LOG.info("Overrides generation for application %s is "
"not supported via this command." % app_name)
else:
if db_app.status == constants.APP_UPLOAD_SUCCESS:
app_operator.activate_app_plugins(db_app)
helm_operator.generate_helm_application_overrides(
path, app_name, mode=None, cnamespace=namespace)
app_operator.deactivate_app_plugins(db_app)
else:
helm_operator.generate_helm_application_overrides(
path, app_name, mode=None, cnamespace=namespace)
def create_armada_app_overrides_action(path, app_name=None, namespace=None):
dbapi = api.get_instance()
try:
db_app = dbapi.kube_app_get(app_name)
except exception.KubeAppNotFound:
LOG.info("Application %s not found" % app_name)
return
helm_operator = helm.HelmOperator(dbapi=dbapi)
app_operator = kube_app.AppOperator(dbapi, helm_operator, {})
if not app_operator.app_has_system_plugins(db_app):
LOG.info("Overrides generation for application %s is "
"not supported via this command." % app_name)
else:
if db_app.status == constants.APP_UPLOAD_SUCCESS:
app_operator.activate_app_plugins(db_app)
helm_operator.generate_helm_application_overrides(
path, app_name, mode=None, cnamespace=namespace,
armada_format=True, armada_chart_info=None, combined=False)
app_operator.deactivate_app_plugins(db_app)
else:
helm_operator.generate_helm_application_overrides(
path, app_name, mode=None, cnamespace=namespace,
armada_format=True, armada_chart_info=None, combined=False)
def add_action_parsers(subparsers):
parser = subparsers.add_parser('create-app-overrides')
parser.set_defaults(func=create_app_overrides_action)
parser.add_argument('path', nargs='?')
parser.add_argument('app_name', nargs='?')
parser.add_argument('namespace', nargs='?')
parser = subparsers.add_parser('create-armada-app-overrides')
parser.set_defaults(func=create_armada_app_overrides_action)
parser.add_argument('path', nargs='?')
parser.add_argument('app_name', nargs='?')
parser.add_argument('namespace', nargs='?')
CONF.register_cli_opt(
cfg.SubCommandOpt('action',
title='actions',
help='Perform helm override operation',
handler=add_action_parsers))
def main():
service.prepare_service(sys.argv)
if CONF.action.name == 'create-app-overrides':
if not CONF.action.path:
LOG.error("overrides path is required")
elif not CONF.action.app_name:
LOG.error("application name is required")
else:
CONF.action.func(CONF.action.path,
CONF.action.app_name,
CONF.action.namespace)
elif CONF.action.name == 'create-armada-app-overrides':
if not CONF.action.path:
LOG.error("overrides path is required")
elif not CONF.action.app_name:
LOG.error("application name is required")
else:
CONF.action.func(CONF.action.path,
CONF.action.app_name,
CONF.action.namespace)