Migrate dcmanager database on upgrade
Perform the database migration for dcmanager database on upgrade by setting up configuration file and performing the database migration. Tests: Perform upgrade and verify upgrade database migrations Verify ability to add data_install data via subcloud update Change-Id: Ia9079b27e77aea1924ca13d7a2c586b90293948d Partial-bug: 1885328 Signed-off-by: John Kung <john.kung@windriver.com>
This commit is contained in:
parent
d61f35f900
commit
2a6d43d669
|
@ -64,9 +64,10 @@ def gethostaddress(hostname):
|
|||
return socket.getaddrinfo(hostname, None)[0][4][0]
|
||||
|
||||
|
||||
def get_db_credentials(shared_services, from_release):
|
||||
def get_db_credentials(shared_services, from_release, role=None):
|
||||
"""
|
||||
Returns the database credentials using the provided shared services.
|
||||
Returns the database credentials using the provided shared services,
|
||||
from_release and role.
|
||||
"""
|
||||
db_credential_keys = \
|
||||
{'barbican': {'hiera_user_key': 'barbican::db::postgresql::user',
|
||||
|
@ -84,6 +85,12 @@ def get_db_credentials(shared_services, from_release):
|
|||
'keyring_password_key': 'keystone',
|
||||
}})
|
||||
|
||||
if role == sysinv_constants.DISTRIBUTED_CLOUD_ROLE_SYSTEMCONTROLLER:
|
||||
db_credential_keys.update(
|
||||
{'dcmanager': {'hiera_user_key': 'dcmanager::db::postgresql::user',
|
||||
'keyring_password_key': 'dcmanager',
|
||||
}})
|
||||
|
||||
# Get the hiera data for the from release
|
||||
hiera_path = os.path.join(PLATFORM_PATH, "puppet", from_release,
|
||||
"hieradata")
|
||||
|
@ -101,6 +108,22 @@ def get_db_credentials(shared_services, from_release):
|
|||
return db_credentials
|
||||
|
||||
|
||||
def get_system_role():
|
||||
""" Get the system role from the sysinv database"""
|
||||
|
||||
conn = psycopg2.connect("dbname=sysinv user=postgres")
|
||||
cur = conn.cursor()
|
||||
cur.execute("select distributed_cloud_role from i_system;")
|
||||
row = cur.fetchone()
|
||||
if row is None:
|
||||
LOG.error("Failed to fetch i_system data")
|
||||
raise psycopg2.ProgrammingError("Failed to fetch i_system data")
|
||||
|
||||
role = row[0]
|
||||
|
||||
return role
|
||||
|
||||
|
||||
def get_shared_services():
|
||||
""" Get the list of shared services from the sysinv database"""
|
||||
|
||||
|
@ -533,7 +556,7 @@ def migrate_sysinv_database():
|
|||
|
||||
|
||||
def migrate_databases(from_release, shared_services, db_credentials,
|
||||
simplex=False):
|
||||
simplex=False, role=None):
|
||||
""" Migrates databases. """
|
||||
|
||||
devnull = open(os.devnull, 'w')
|
||||
|
@ -583,6 +606,18 @@ def migrate_databases(from_release, shared_services, db_credentials,
|
|||
'/etc/keystone/keystone-dbsync.conf db_sync')
|
||||
]
|
||||
|
||||
if role == sysinv_constants.DISTRIBUTED_CLOUD_ROLE_SYSTEMCONTROLLER:
|
||||
# append the migrate command for dcmanager db
|
||||
# todo(jkung): append the migrate command for dcorch
|
||||
with open("/etc/dcmanager/dcmanager.conf", "w") as f:
|
||||
f.write("[database]\n")
|
||||
f.write(get_connection_string(db_credentials, 'dcmanager'))
|
||||
|
||||
migrate_commands += [
|
||||
('dcmanager',
|
||||
'dcmanager-manage db_sync')
|
||||
]
|
||||
|
||||
# Execute migrate commands
|
||||
for cmd in migrate_commands:
|
||||
try:
|
||||
|
@ -775,6 +810,7 @@ def upgrade_controller(from_release, to_release):
|
|||
print("Importing databases...")
|
||||
import_databases(from_release, to_release)
|
||||
|
||||
role = get_system_role()
|
||||
shared_services = get_shared_services()
|
||||
|
||||
# Create /tmp/python_keyring - used by keystone manifest.
|
||||
|
@ -803,7 +839,8 @@ def upgrade_controller(from_release, to_release):
|
|||
utils.add_upgrade_entries_to_hiera_data(from_release)
|
||||
|
||||
# Get database credentials
|
||||
db_credentials = get_db_credentials(shared_services, from_release)
|
||||
db_credentials = get_db_credentials(
|
||||
shared_services, from_release, role=role)
|
||||
|
||||
# Create any new databases
|
||||
print("Creating new databases...")
|
||||
|
@ -814,7 +851,7 @@ def upgrade_controller(from_release, to_release):
|
|||
migrate_sysinv_database()
|
||||
|
||||
# Migrate databases
|
||||
migrate_databases(from_release, shared_services, db_credentials)
|
||||
migrate_databases(from_release, shared_services, db_credentials, role=role)
|
||||
|
||||
print("Applying configuration...")
|
||||
|
||||
|
|
Loading…
Reference in New Issue