Merge "Add check for deploy files alternate location"

This commit is contained in:
Zuul 2023-08-02 13:13:03 +00:00 committed by Gerrit Code Review
commit 843d564469
5 changed files with 104 additions and 4 deletions

View File

@ -394,3 +394,15 @@ CERT_NAMESPACE_PLATFORM_CA_CERTS = 'cert-manager'
# The ansible playbook base directories
ANSIBLE_CURRENT_VERSION_BASE_PATH = '/usr/share/ansible/stx-ansible/playbooks'
ANSIBLE_PREVIOUS_VERSION_BASE_PATH = '/opt/dc-vault/playbooks'
# The deployment manager artifacts usr directories
ALTERNATE_DEPLOY_FILES_DIR = '/usr/local/share/applications'
ALTERNATE_HELM_CHART_OVERRIDES_DIR = ALTERNATE_DEPLOY_FILES_DIR + '/overrides'
HELM_CHART_OVERRIDES_POSTFIX = '-overrides-subcloud.yaml'
ALTERNATE_HELM_CHART_DIR = ALTERNATE_DEPLOY_FILES_DIR + '/helm'
HELM_CHART_POSTFIX = 'deployment-manager'
ALTERNATE_DEPLOY_PLAYBOOK_DIR = ALTERNATE_DEPLOY_FILES_DIR + '/playbooks'
DEPLOY_PLAYBOOK_POSTFIX = 'deployment-manager.yaml'

View File

@ -747,6 +747,33 @@ def upload_config_file(file_item, config_file, config_type):
pecan.abort(400, msg)
def check_deploy_files_in_alternate_location(payload):
for f in os.listdir(consts.ALTERNATE_DEPLOY_PLAYBOOK_DIR):
if f.endswith(consts.DEPLOY_PLAYBOOK_POSTFIX):
filename = os.path.join(consts.ALTERNATE_DEPLOY_PLAYBOOK_DIR, f)
payload.update({consts.DEPLOY_PLAYBOOK: filename})
break
else:
return False
for f in os.listdir(consts.ALTERNATE_HELM_CHART_OVERRIDES_DIR):
if f.endswith(consts.HELM_CHART_OVERRIDES_POSTFIX):
filename = os.path.join(consts.ALTERNATE_HELM_CHART_OVERRIDES_DIR, f)
payload.update({consts.DEPLOY_OVERRIDES: filename})
break
else:
return False
for f in os.listdir(consts.ALTERNATE_HELM_CHART_DIR):
if consts.HELM_CHART_POSTFIX in str(f):
filename = os.path.join(consts.ALTERNATE_HELM_CHART_DIR, f)
payload.update({consts.DEPLOY_CHART: filename})
break
else:
return False
return True
def get_common_deploy_files(payload, software_version):
missing_deploy_files = []
for f in consts.DEPLOY_COMMON_FILE_OPTIONS:
@ -762,9 +789,14 @@ def get_common_deploy_files(payload, software_version):
else:
payload.update({f: os.path.join(dir_path, filename)})
if missing_deploy_files:
missing_deploy_files_str = ', '.join(missing_deploy_files)
msg = _("Missing required deploy files: %s" % missing_deploy_files_str)
pecan.abort(400, msg)
if check_deploy_files_in_alternate_location(payload):
payload.update({'user_uploaded_artifacts': False})
else:
missing_deploy_files_str = ', '.join(missing_deploy_files)
msg = _("Missing required deploy files: %s" % missing_deploy_files_str)
pecan.abort(400, msg)
else:
payload.update({'user_uploaded_artifacts': True})
def validate_subcloud_name_availability(context, subcloud_name):

View File

@ -1967,6 +1967,8 @@ class SubcloudManager(manager.Manager):
payload[consts.DEPLOY_CHART]
payload['deploy_values']['deployment_manager_overrides'] = \
payload[consts.DEPLOY_OVERRIDES]
payload['deploy_values']['user_uploaded_artifacts'] = \
payload["user_uploaded_artifacts"]
self._write_deploy_files(payload, subcloud_name)
def _delete_subcloud_routes(self, keystone_client, subcloud):

View File

@ -0,0 +1,53 @@
#
# Copyright (c) 2023 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
import mock
import os
@mock.patch.object(os, 'listdir')
def test_check_deploy_files_in_alternate_location_with_all_file_exists(self, mock_os_isdir, mock_os_listdir):
payload = {}
mock_os_isdir.return_value = True
mock_os_listdir.return_value = ['deploy-chart-fake-deployment-manager.tgz',
'deploy-overrides-fake-overrides-subcloud.yaml',
'deploy-playbook-fake-deployment-manager.yaml']
response = self.check_deploy_files_in_alternate_location(payload)
self.assertEqual(response, True)
def test_check_deploy_files_in_alternate_location_with_deploy_chart_not_exists(self, mock_os_isdir, mock_os_listdir):
payload = {}
mock_os_isdir.return_value = True
mock_os_listdir.return_value = ['deploy-chart-fake.tgz',
'deploy-overrides-fake-overrides-subcloud.yaml',
'deploy-playbook-fake-deployment-manager.yaml']
response = self.check_deploy_files_in_alternate_location(payload)
self.assertEqual(response, False)
def test_check_deploy_files_in_alternate_location_with_deploy_overrides_not_exists(self, mock_os_isdir, mock_os_listdir):
payload = {}
mock_os_isdir.return_value = True
mock_os_listdir.return_value = ['deploy-chart-fake-deployment-manager.tgz',
'deploy-overrides.yaml',
'deploy-playbook-fake-deployment-manager.yaml']
response = self.check_deploy_files_in_alternate_location(payload)
self.assertEqual(response, False)
def test_check_deploy_files_in_alternate_location_with_deploy_playbook_not_exists(self, mock_os_isdir, mock_os_listdir):
payload = {}
mock_os_isdir.return_value = True
mock_os_listdir.return_value = ['deploy-chart-fake-deployment-manager.tgz',
'deploy-overrides-fake-overrides-subcloud.yaml',
'deploy-playbook.yaml']
response = self.check_deploy_files_in_alternate_location(payload)
self.assertEqual(response, False)

View File

@ -725,7 +725,8 @@ class TestSubcloudManager(base.DCManagerTestCase):
"deploy_playbook": "test_playbook.yaml",
"deploy_overrides": "test_overrides.yaml",
"deploy_chart": "test_chart.yaml",
"deploy_config": "subcloud1.yaml"}
"deploy_config": "subcloud1.yaml",
"user_uploaded_artifacts": True}
# Create subcloud in DB
subcloud = self.create_subcloud_static(self.ctx, name=payload['name'])