From 962af3cf013a5e2b32649afcac0d188dd9cd8451 Mon Sep 17 00:00:00 2001 From: Angie Wang Date: Thu, 29 Nov 2018 16:01:32 -0500 Subject: [PATCH] Load the helm plugins dynamically through stevedore Update in sysinv to use stevedore dynamically load the helm plugins instead of listing them statically in helm code. Tested on AIO-SX: - fresh install + config_controller with kubernetes - stx-openstack application installed successfully through "system application-apply" command. - all pods are running after the subsequent lock/unlock Change-Id: I4efba886b796bda87984d3fd8838478ce7a8f1bf Story: 2003909 Task: 28187 Signed-off-by: Angie Wang --- sysinv/sysinv/sysinv/setup.cfg | 25 +++++++++ sysinv/sysinv/sysinv/sysinv/helm/helm.py | 69 ++++-------------------- 2 files changed, 35 insertions(+), 59 deletions(-) diff --git a/sysinv/sysinv/sysinv/setup.cfg b/sysinv/sysinv/sysinv/setup.cfg index 7901bdf9e1..2991099568 100644 --- a/sysinv/sysinv/sysinv/setup.cfg +++ b/sysinv/sysinv/sysinv/setup.cfg @@ -72,6 +72,31 @@ systemconfig.puppet_plugins = 032_swift = sysinv.puppet.swift:SwiftPuppet 033_service_parameter = sysinv.puppet.service_parameter:ServiceParamPuppet +systemconfig.helm_plugins = + aodh = sysinv.helm.aodh:AodhHelm + barbican = sysinv.helm.barbican:BarbicanHelm + ceilometer = sysinv.helm.ceilometer:CeilometerHelm + cinder = sysinv.helm.cinder:CinderHelm + glance = sysinv.helm.glance:GlanceHelm + gnocchi = sysinv.helm.gnocchi:GnocchiHelm + heat = sysinv.helm.heat:HeatHelm + horizon = sysinv.helm.horizon:HorizonHelm + ingress = sysinv.helm.ingress:IngressHelm + ironic = sysinv.helm.ironic:IronicHelm + keystone = sysinv.helm.keystone:KeystoneHelm + libvirt = sysinv.helm.libvirt:LibvirtHelm + magnum = sysinv.helm.magnum:MagnumHelm + mariadb = sysinv.helm.mariadb:MariadbHelm + memcached = sysinv.helm.memcached:MemcachedHelm + neutron = sysinv.helm.neutron:NeutronHelm + nfs-provisioner = sysinv.helm.nfs_provisioner:NfsProvisionerHelm + nova = sysinv.helm.nova:NovaHelm + nova-api-proxy = sysinv.helm.nova_api_proxy:NovaApiProxyHelm + openvswitch = sysinv.helm.openvswitch:OpenvswitchHelm + panko = sysinv.helm.panko:PankoHelm + rabbitmq = sysinv.helm.rabbitmq:RabbitmqHelm + rbd-provisioner = sysinv.helm.rbd_provisioner:RbdProvisionerHelm + sysinv.agent.lldp.drivers = lldpd = sysinv.agent.lldp.drivers.lldpd.driver:SysinvLldpdAgentDriver ovs = sysinv.agent.lldp.drivers.ovs.driver:SysinvOVSAgentDriver diff --git a/sysinv/sysinv/sysinv/sysinv/helm/helm.py b/sysinv/sysinv/sysinv/sysinv/helm/helm.py index 6613b1e27f..4d1aa0286b 100644 --- a/sysinv/sysinv/sysinv/sysinv/helm/helm.py +++ b/sysinv/sysinv/sysinv/sysinv/helm/helm.py @@ -16,41 +16,12 @@ import tempfile import yaml from six import iteritems +from stevedore import extension from sysinv.common import constants from sysinv.common import exception from sysinv.openstack.common import log as logging from . import common -# Import Chart Override Helpers: -# Chart source: https://github.com/openstack/openstack-helm.git -from . import aodh -from . import barbican -from . import ceilometer -from . import cinder -from . import glance -from . import gnocchi -from . import heat -from . import horizon -from . import ironic -from . import keystone -from . import magnum -from . import neutron -from . import nova - -# Chart source: https://github.com/openstack/openstack-helm-infra.git -from . import ingress -from . import libvirt -from . import nfs_provisioner -from . import mariadb -from . import memcached -from . import openvswitch -from . import panko -from . import rabbitmq - -# Chart source: Custom -from . import rbd_provisioner -from . import nova_api_proxy - LOG = logging.getLogger(__name__) @@ -90,35 +61,15 @@ class HelmOperator(object): self.docker_repo_source = docker_repository # register chart operators for lookup - self.chart_operators = { - constants.HELM_CHART_AODH: aodh.AodhHelm(self), - constants.HELM_CHART_BARBICAN: barbican.BarbicanHelm(self), - constants.HELM_CHART_CEILOMETER: ceilometer.CeilometerHelm(self), - constants.HELM_CHART_CINDER: cinder.CinderHelm(self), - constants.HELM_CHART_GLANCE: glance.GlanceHelm(self), - constants.HELM_CHART_GNOCCHI: gnocchi.GnocchiHelm(self), - constants.HELM_CHART_HEAT: heat.HeatHelm(self), - constants.HELM_CHART_HORIZON: horizon.HorizonHelm(self), - constants.HELM_CHART_INGRESS: ingress.IngressHelm(self), - constants.HELM_CHART_IRONIC: ironic.IronicHelm(self), - constants.HELM_CHART_KEYSTONE: keystone.KeystoneHelm(self), - constants.HELM_CHART_LIBVIRT: libvirt.LibvirtHelm(self), - constants.HELM_CHART_MAGNUM: magnum.MagnumHelm(self), - constants.HELM_CHART_MARIADB: mariadb.MariadbHelm(self), - constants.HELM_CHART_MEMCACHED: memcached.MemcachedHelm(self), - constants.HELM_CHART_NEUTRON: neutron.NeutronHelm(self), - constants.HELM_CHART_NFS_PROVISIONER: - nfs_provisioner.NfsProvisionerHelm(self), - constants.HELM_CHART_NOVA: nova.NovaHelm(self), - constants.HELM_CHART_NOVA_API_PROXY: - nova_api_proxy.NovaApiProxyHelm(self), - constants.HELM_CHART_OPENVSWITCH: - openvswitch.OpenvswitchHelm(self), - constants.HELM_CHART_PANKO: panko.PankoHelm(self), - constants.HELM_CHART_RABBITMQ: rabbitmq.RabbitmqHelm(self), - constants.HELM_CHART_RBD_PROVISIONER: - rbd_provisioner.RbdProvisionerHelm(self) - } + self.chart_operators = {} + + helm_plugins = extension.ExtensionManager( + namespace='systemconfig.helm_plugins', + invoke_on_load=True, invoke_args=(self,)) + + for plugin in helm_plugins.extensions: + self.chart_operators.update({plugin.name: plugin.obj}) + LOG.debug("Loaded helm plugin %s" % plugin.name) # build the list of registered supported charts self.implemented_charts = []