Files
distcloud/distributedcloud/dcmanager/tests/utils.py
Enzo Candotti cad82a879b Add "error_description" field on subclouds table
In order to improve the error reporting on subcloud deployment and
upgrading, this changes adds a new field to the subclouds table called
"error_description", which is being filled with the error details
gathered during these stages.

As a first step, a function was added in:
https://review.opendev.org/c/starlingx/distcloud/+/855528

This review will store the log error from that review in the new
error_description field on the subclouds table.

Test Plan:
PASS: Bring up a DC system using an ISO containing these changes.
      Verify that the error_description field is added in the
      database.
PASS: Upgrade the system controller to the load containing these
      changes. Verify that the error_description field is added
      in the database.
PASS: Deploy subclouds generating playbook errors:
      - wrong local registries.
      - invalid SSL certificate.
      Verify that the error_description field is filled with the
      log error that was gathered during deploy.
PASS: Verify that if the error is shorter than 2048 characters, the
      entire string is stored. Otherwise the first 2048 characters
      are stored.

Story: 2010271
Task: 46293

Signed-off-by: Enzo Candotti <enzo.candotti@windriver.com>
Change-Id: Ia686b631f0e2bd4ebb7c41de2f7e7ecf036dda67
2022-10-06 00:51:41 +00:00

97 lines
3.1 KiB
Python

# Copyright (c) 2015 Ericsson AB
# Copyright (c) 2017-2022 Wind River Systems, Inc.
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
import eventlet
import random
import string
import uuid
from dcmanager.common import context
from dcmanager.db import api as db_api
get_engine = db_api.get_engine
class UUIDStub(object):
def __init__(self, value):
self.value = value
def __enter__(self):
self.uuid4 = uuid.uuid4
uuid_stub = lambda: self.value
uuid.uuid4 = uuid_stub
def __exit__(self, *exc_info):
uuid.uuid4 = self.uuid4
UUIDs = (UUID1, UUID2, UUID3, UUID4, UUID5) = sorted([str(uuid.uuid4())
for x in range(5)])
def random_name():
return ''.join(random.choice(string.ascii_uppercase)
for x in range(10))
def dummy_context(user='test_username', tenant='test_project_id',
region_name=None):
return context.RequestContext.from_dict({
'auth_token': 'abcd1234',
'user': user,
'project': tenant,
'is_admin': True,
'region_name': region_name
})
def wait_until_true(predicate, timeout=60, sleep=1, exception=None):
with eventlet.timeout.Timeout(timeout, exception):
while not predicate():
eventlet.sleep(sleep)
def create_subcloud_dict(data_list):
return {'id': data_list[0],
'name': data_list[1],
'description': data_list[2],
'location': data_list[3],
'software-version': data_list[4],
'management-state': data_list[5],
'availability-status': data_list[6],
'management_subnet': data_list[7],
'management_gateway_address': data_list[8],
'management_start_address': data_list[9],
'management_end_address': data_list[10],
'systemcontroller_gateway_address': data_list[11],
'audit-fail-count': data_list[12],
'reserved-1': data_list[13],
'reserved-2': data_list[14],
'created-at': data_list[15],
'updated-at': data_list[16],
'deleted-at': data_list[17],
'deleted': data_list[18],
'external_oam_subnet': data_list[19],
'external_oam_gateway_address': data_list[20],
'external_oam_floating_address': data_list[21],
'sysadmin_password': data_list[22],
'group_id': data_list[23],
'deploy_status': data_list[24],
'error_description': data_list[25],
'data_install': data_list[26]}