From 248d3b3921024bc4cb6ad5234b34a9c2edf11599 Mon Sep 17 00:00:00 2001 From: Stefan Dinescu Date: Fri, 19 Apr 2019 16:44:32 +0300 Subject: [PATCH] Integrate openstack clients helm chart in armada Add sysinv override support for openstack clients helm chart. Change-Id: I58a5d511cf54dacc018bfb88848899b92a774087 Signed-off-by: Stefan Dinescu Depends-on: I4dea49301fd778db9a9ddf900a752831bd455fda Story: 2005312 Task: 30558 --- .../manifests/manifest.yaml | 57 +++++++++++++++++++ sysinv/sysinv/sysinv/setup.cfg | 1 + .../sysinv/sysinv/sysinv/common/constants.py | 1 + sysinv/sysinv/sysinv/sysinv/helm/openstack.py | 15 +++++ .../sysinv/sysinv/helm/openstackclients.py | 49 ++++++++++++++++ 5 files changed, 123 insertions(+) create mode 100644 sysinv/sysinv/sysinv/sysinv/helm/openstackclients.py diff --git a/kubernetes/applications/stx-openstack/stx-openstack-helm/stx-openstack-helm/manifests/manifest.yaml b/kubernetes/applications/stx-openstack/stx-openstack-helm/stx-openstack-helm/manifests/manifest.yaml index 7a8fbfc6fc..277627f037 100644 --- a/kubernetes/applications/stx-openstack/stx-openstack-helm/stx-openstack-helm/manifests/manifest.yaml +++ b/kubernetes/applications/stx-openstack/stx-openstack-helm/stx-openstack-helm/manifests/manifest.yaml @@ -3011,6 +3011,52 @@ data: dependencies: - helm-toolkit --- +schema: armada/Chart/v1 +metadata: + schema: metadata/Document/v1 + name: openstack-clients +data: + chart_name: clients + release: openstack-clients + namespace: openstack + wait: + timeout: 600 + labels: + app: openstack-clients + install: + no_hooks: false + upgrade: + no_hooks: false + pre: + delete: + - type: job + labels: + app: openstack-clients + values: + endpoints: + identity: + name: keystone + namespace: openstack + labels: + node_selector_key: openstack-control-plane + node_selector_value: enabled + global: + cloud_name: openstack_helm + replicas: 1 + keep_running: true + volume: + size: 20Gi + images: + tags: + openstackclients: docker.io/starlingx/stx-openstackclients:master-centos-stable-latest + source: + type: tar + location: http://172.17.0.1/helm_charts/starlingx/clients-0.1.0.tgz + subpath: clients + reference: master + dependencies: + - helm-toolkit +--- schema: armada/ChartGroup/v1 metadata: schema: metadata/Document/v1 @@ -3169,6 +3215,16 @@ data: - openstack-panko - openstack-ceilometer --- +schema: armada/ChartGroup/v1 +metadata: + schema: metadata/Document/v1 + name: openstack-clients +data: + description: "Deploy clients" + sequenced: false + chart_group: + - openstack-clients +--- schema: armada/Manifest/v1 metadata: schema: metadata/Document/v1 @@ -3182,6 +3238,7 @@ data: - openstack-memcached - openstack-rabbitmq - openstack-keystone + - openstack-clients - openstack-barbican - openstack-glance - openstack-ceph-rgw diff --git a/sysinv/sysinv/sysinv/setup.cfg b/sysinv/sysinv/sysinv/setup.cfg index 01d487e563..0e51d40068 100644 --- a/sysinv/sysinv/sysinv/setup.cfg +++ b/sysinv/sysinv/sysinv/setup.cfg @@ -106,6 +106,7 @@ systemconfig.helm_plugins.stx_openstack = 022_keystone-api-proxy = sysinv.helm.keystone_api_proxy:KeystoneApiProxyHelm 023_ceph-rgw = sysinv.helm.swift:SwiftHelm 024_ironic = sysinv.helm.ironic:IronicHelm + 025_clients = sysinv.helm.openstackclients:OpenstackClientsHelm sysinv.agent.lldp.drivers = lldpd = sysinv.agent.lldp.drivers.lldpd.driver:SysinvLldpdAgentDriver diff --git a/sysinv/sysinv/sysinv/sysinv/common/constants.py b/sysinv/sysinv/sysinv/sysinv/common/constants.py index f119bf8ac4..c7b3b2e20b 100644 --- a/sysinv/sysinv/sysinv/sysinv/common/constants.py +++ b/sysinv/sysinv/sysinv/sysinv/common/constants.py @@ -1428,6 +1428,7 @@ HELM_CHART_AODH = 'aodh' HELM_CHART_BARBICAN = 'barbican' HELM_CHART_CEILOMETER = 'ceilometer' HELM_CHART_CINDER = 'cinder' +HELM_CHART_CLIENTS = 'clients' HELM_CHART_GARBD = 'garbd' HELM_CHART_GLANCE = 'glance' HELM_CHART_GNOCCHI = 'gnocchi' diff --git a/sysinv/sysinv/sysinv/sysinv/helm/openstack.py b/sysinv/sysinv/sysinv/sysinv/helm/openstack.py index 334faa6dcb..cf90259729 100644 --- a/sysinv/sysinv/sysinv/sysinv/helm/openstack.py +++ b/sysinv/sysinv/sysinv/sysinv/helm/openstack.py @@ -73,6 +73,21 @@ class OpenstackBaseHelm(base.BaseHelm): constants.HELM_CHART_KEYSTONE] return keystone_operator.get_admin_user_name() + def _get_admin_project_name(self): + keystone_operator = self._operator.chart_operators[ + constants.HELM_CHART_KEYSTONE] + return keystone_operator.get_admin_project_name() + + def _get_admin_project_domain(self): + keystone_operator = self._operator.chart_operators[ + constants.HELM_CHART_KEYSTONE] + return keystone_operator.get_admin_project_domain() + + def _get_admin_user_domain(self): + keystone_operator = self._operator.chart_operators[ + constants.HELM_CHART_KEYSTONE] + return keystone_operator.get_admin_user_domain() + def _get_identity_password(self, service, user): passwords = self.context.setdefault('_service_passwords', {}) if service not in passwords: diff --git a/sysinv/sysinv/sysinv/sysinv/helm/openstackclients.py b/sysinv/sysinv/sysinv/sysinv/helm/openstackclients.py new file mode 100644 index 0000000000..8ecd166ad8 --- /dev/null +++ b/sysinv/sysinv/sysinv/sysinv/helm/openstackclients.py @@ -0,0 +1,49 @@ +# +# Copyright (c) 2019 Wind River Systems, Inc. +# +# SPDX-License-Identifier: Apache-2.0 +# + +from sysinv.common import constants +from sysinv.common import exception +from sysinv.helm import common +from sysinv.openstack.common import log as logging +from sysinv.helm import openstack + +LOG = logging.getLogger(__name__) + + +class OpenstackClientsHelm(openstack.OpenstackBaseHelm): + + CHART = constants.HELM_CHART_CLIENTS + SERVICE_NAME = constants.HELM_CHART_CLIENTS + + def get_overrides(self, namespace=None): + + overrides = { + common.HELM_NS_OPENSTACK: { + "endpoints": self._get_endpoints_overrides() + } + } + + if namespace in self.SUPPORTED_NAMESPACES: + return overrides[namespace] + elif namespace: + raise exception.InvalidHelmNamespace(chart=self.CHART, + namespace=namespace) + else: + return overrides + + def _get_endpoints_overrides(self): + overrides = self._get_common_users_overrides( + common.SERVICE_ADMIN) + overrides['admin'].update({ + 'project_name': self._get_admin_project_name(), + 'project_domain_name': self._get_admin_project_domain(), + 'user_domain_name': self._get_admin_user_domain(), + }) + return { + 'identity': { + 'auth': overrides + }, + }