Improve to obtain db url for fm

Obtain db url for fm without through puppet.
So that we could remove dependency with puppet.

Story: 2008132
Task: 42101
Signed-off-by: Takamasa Takenaka <takamasa.takenaka@windriver.com>
Change-Id: I51028de89a39b7e8baa3b5f5c71ff0bb7b5874b5
This commit is contained in:
Takamasa Takenaka 2021-03-23 15:58:53 -03:00
parent e7fc57ed4c
commit e3be280131

View File

@ -4,7 +4,7 @@
# SPDX-License-Identifier: Apache-2.0
#
import keyring
from k8sapp_snmp.common import constants as app_constants
from os import uname
@ -16,11 +16,10 @@ from sysinv.common import exception
from sysinv.db import api
from sysinv.helm import base
from sysinv.helm import common
from sysinv.puppet import openstack
class SnmpHelm(base.BaseHelm, openstack.OpenstackBasePuppet):
class SnmpHelm(base.BaseHelm):
"""Class to encapsulate helm operations for the SNMP chart"""
SUPPORTED_NAMESPACES = base.BaseHelm.SUPPORTED_NAMESPACES + \
@ -35,6 +34,7 @@ class SnmpHelm(base.BaseHelm, openstack.OpenstackBasePuppet):
SERVICE_NAME = 'snmp'
SERVICE_FM_NAME = 'fm'
SERVICE_FM_PORT = 18002
DB_FM_ADMIN = 'admin-fm'
UNDEFINED_CONF_VALUE = '?'
KERNEL_RELEASE_IDX = 2
@ -52,6 +52,24 @@ class SnmpHelm(base.BaseHelm, openstack.OpenstackBasePuppet):
#If data is NoneType
return ensure_str(self.UNDEFINED_CONF_VALUE)
def _get_keyring_password(self, service, user):
password = keyring.get_password(service, user)
if not password:
raise Exception('Failed to obtain password for fm database')
# get_password() returns in unicode format, which leads to YAML
# that Armada doesn't like. Converting to UTF-8 is safe because
# we generated the password originally.
return password.encode('utf8', 'strict')
def _get_database_connection(self):
host_url = self._format_url_address(self._get_management_address())
auth_password = self._get_keyring_password(
self.SERVICE_FM_NAME, 'database')
connection = "postgresql://%s:%s@%s/%s" %\
(self.DB_FM_ADMIN, auth_password,
host_url, self.SERVICE_FM_NAME)
return connection
def get_namespaces(self):
return self.SUPPORTED_NAMESPACES
@ -64,19 +82,12 @@ class SnmpHelm(base.BaseHelm, openstack.OpenstackBasePuppet):
def get_admin_url(self):
return self._format_admin_endpoint(self.SERVICE_FM_PORT)
def get_secure_system_config(self):
config = {
'fm::database_connection':
self._format_database_connection(self.SERVICE_FM_NAME),
}
return config
def get_system_info(self):
return uname()[self.KERNEL_RELEASE_IDX]
def get_overrides(self, namespace=None):
db_url = self.get_secure_system_config()['fm::database_connection']
db_url = self._get_database_connection()
dbapi = api.get_instance()
# Get the contact, location, name and desciption info