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
@ -12,15 +12,14 @@ from six import ensure_str
from six import ensure_text
from six import string_types
from sysinv.common import constants
from sysinv.common import exception
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