Merge "Add check for deploy files alternate location"
This commit is contained in:
commit
843d564469
|
@ -394,3 +394,15 @@ CERT_NAMESPACE_PLATFORM_CA_CERTS = 'cert-manager'
|
||||||
# The ansible playbook base directories
|
# The ansible playbook base directories
|
||||||
ANSIBLE_CURRENT_VERSION_BASE_PATH = '/usr/share/ansible/stx-ansible/playbooks'
|
ANSIBLE_CURRENT_VERSION_BASE_PATH = '/usr/share/ansible/stx-ansible/playbooks'
|
||||||
ANSIBLE_PREVIOUS_VERSION_BASE_PATH = '/opt/dc-vault/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'
|
||||||
|
|
|
@ -747,6 +747,33 @@ def upload_config_file(file_item, config_file, config_type):
|
||||||
pecan.abort(400, msg)
|
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):
|
def get_common_deploy_files(payload, software_version):
|
||||||
missing_deploy_files = []
|
missing_deploy_files = []
|
||||||
for f in consts.DEPLOY_COMMON_FILE_OPTIONS:
|
for f in consts.DEPLOY_COMMON_FILE_OPTIONS:
|
||||||
|
@ -762,9 +789,14 @@ def get_common_deploy_files(payload, software_version):
|
||||||
else:
|
else:
|
||||||
payload.update({f: os.path.join(dir_path, filename)})
|
payload.update({f: os.path.join(dir_path, filename)})
|
||||||
if missing_deploy_files:
|
if missing_deploy_files:
|
||||||
missing_deploy_files_str = ', '.join(missing_deploy_files)
|
if check_deploy_files_in_alternate_location(payload):
|
||||||
msg = _("Missing required deploy files: %s" % missing_deploy_files_str)
|
payload.update({'user_uploaded_artifacts': False})
|
||||||
pecan.abort(400, msg)
|
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):
|
def validate_subcloud_name_availability(context, subcloud_name):
|
||||||
|
|
|
@ -1967,6 +1967,8 @@ class SubcloudManager(manager.Manager):
|
||||||
payload[consts.DEPLOY_CHART]
|
payload[consts.DEPLOY_CHART]
|
||||||
payload['deploy_values']['deployment_manager_overrides'] = \
|
payload['deploy_values']['deployment_manager_overrides'] = \
|
||||||
payload[consts.DEPLOY_OVERRIDES]
|
payload[consts.DEPLOY_OVERRIDES]
|
||||||
|
payload['deploy_values']['user_uploaded_artifacts'] = \
|
||||||
|
payload["user_uploaded_artifacts"]
|
||||||
self._write_deploy_files(payload, subcloud_name)
|
self._write_deploy_files(payload, subcloud_name)
|
||||||
|
|
||||||
def _delete_subcloud_routes(self, keystone_client, subcloud):
|
def _delete_subcloud_routes(self, keystone_client, subcloud):
|
||||||
|
|
|
@ -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)
|
|
@ -725,7 +725,8 @@ class TestSubcloudManager(base.DCManagerTestCase):
|
||||||
"deploy_playbook": "test_playbook.yaml",
|
"deploy_playbook": "test_playbook.yaml",
|
||||||
"deploy_overrides": "test_overrides.yaml",
|
"deploy_overrides": "test_overrides.yaml",
|
||||||
"deploy_chart": "test_chart.yaml",
|
"deploy_chart": "test_chart.yaml",
|
||||||
"deploy_config": "subcloud1.yaml"}
|
"deploy_config": "subcloud1.yaml",
|
||||||
|
"user_uploaded_artifacts": True}
|
||||||
|
|
||||||
# Create subcloud in DB
|
# Create subcloud in DB
|
||||||
subcloud = self.create_subcloud_static(self.ctx, name=payload['name'])
|
subcloud = self.create_subcloud_static(self.ctx, name=payload['name'])
|
||||||
|
|
Loading…
Reference in New Issue