Add support for configuring additional architectures for heat-based installs
In this case an additional architecture is any architecture that is NOT the same as the one running the install. Blueprint: multiarch-support Change-Id: Idbf9d52515bddf598792bf4db71c56084c36075c
This commit is contained in:
parent
351633e4a3
commit
a93e3399b7
|
@ -294,6 +294,14 @@ class UndercloudConfig(StandaloneConfig):
|
||||||
'Whether to enable Swift encryption at-rest or '
|
'Whether to enable Swift encryption at-rest or '
|
||||||
'not.'
|
'not.'
|
||||||
)),
|
)),
|
||||||
|
cfg.ListOpt('additional_architectures',
|
||||||
|
default=[],
|
||||||
|
help=(_(
|
||||||
|
'List of additional architectures enabled in '
|
||||||
|
'your cloud environment. The list of supported '
|
||||||
|
'values is: %s') %
|
||||||
|
' '.join(constants.ADDITIONAL_ARCHITECTURES))
|
||||||
|
),
|
||||||
]
|
]
|
||||||
return self.sort_opts(_base_opts + _opts)
|
return self.sort_opts(_base_opts + _opts)
|
||||||
|
|
||||||
|
|
|
@ -72,3 +72,5 @@ CEPH_UPGRADE_PREPARE_ENV = "environments/lifecycle/ceph-upgrade-prepare.yaml"
|
||||||
ENABLE_SSH_ADMIN_TIMEOUT = 300
|
ENABLE_SSH_ADMIN_TIMEOUT = 300
|
||||||
ENABLE_SSH_ADMIN_STATUS_INTERVAL = 5
|
ENABLE_SSH_ADMIN_STATUS_INTERVAL = 5
|
||||||
ENABLE_SSH_ADMIN_SSH_PORT_TIMEOUT = 300
|
ENABLE_SSH_ADMIN_SSH_PORT_TIMEOUT = 300
|
||||||
|
|
||||||
|
ADDITIONAL_ARCHITECTURES = ['ppc64le']
|
||||||
|
|
|
@ -25,7 +25,8 @@ class TestUndercloudConfig(base.TestCase):
|
||||||
|
|
||||||
def test_get_base_opts(self):
|
def test_get_base_opts(self):
|
||||||
ret = self.config.get_base_opts()
|
ret = self.config.get_base_opts()
|
||||||
expected = ['certificate_generation_ca',
|
expected = ['additional_architectures',
|
||||||
|
'certificate_generation_ca',
|
||||||
'clean_nodes',
|
'clean_nodes',
|
||||||
'cleanup',
|
'cleanup',
|
||||||
'container_images_file',
|
'container_images_file',
|
||||||
|
@ -74,7 +75,8 @@ class TestUndercloudConfig(base.TestCase):
|
||||||
|
|
||||||
def test_get_opts(self):
|
def test_get_opts(self):
|
||||||
ret = self.config.get_opts()
|
ret = self.config.get_opts()
|
||||||
expected = ['certificate_generation_ca',
|
expected = ['additional_architectures',
|
||||||
|
'certificate_generation_ca',
|
||||||
'clean_nodes',
|
'clean_nodes',
|
||||||
'cleanup',
|
'cleanup',
|
||||||
'container_images_file',
|
'container_images_file',
|
||||||
|
|
|
@ -316,6 +316,10 @@ def prepare_undercloud_deploy(upgrade=False, no_validations=False,
|
||||||
# This parameter the IP address used to bind the local container registry
|
# This parameter the IP address used to bind the local container registry
|
||||||
env_data['LocalContainerRegistry'] = CONF['local_ip'].split('/')[0]
|
env_data['LocalContainerRegistry'] = CONF['local_ip'].split('/')[0]
|
||||||
|
|
||||||
|
if CONF['additional_architectures']:
|
||||||
|
for arch in CONF['additional_architectures']:
|
||||||
|
env_data['EnableArchitecture%s' % arch.upper()] = True
|
||||||
|
|
||||||
if CONF.get('local_ip', None):
|
if CONF.get('local_ip', None):
|
||||||
deploy_args.append('--local-ip=%s' % CONF['local_ip'])
|
deploy_args.append('--local-ip=%s' % CONF['local_ip'])
|
||||||
|
|
||||||
|
|
|
@ -429,6 +429,32 @@ def _run_yum_update(instack_env):
|
||||||
LOG.info(_('yum-update completed successfully'))
|
LOG.info(_('yum-update completed successfully'))
|
||||||
|
|
||||||
|
|
||||||
|
def _validate_architecure_options():
|
||||||
|
def error_handler(message):
|
||||||
|
LOG.error(_('Undercloud configuration validation failed: %s'), message)
|
||||||
|
raise FailedValidation(message)
|
||||||
|
|
||||||
|
def _validate_ppc64le_exclusive_opts(error_callback):
|
||||||
|
if 'ipxe_enabled' in CONF and CONF['ipxe_enabled']:
|
||||||
|
error_callback(_('Currently iPXE boot isn\'t supported with '
|
||||||
|
'ppc64le systems but is enabled'))
|
||||||
|
|
||||||
|
def _validate_additional_architectures(error_callback):
|
||||||
|
for arch in CONF['additional_architectures']:
|
||||||
|
if arch not in constants.ADDITIONAL_ARCHITECTURES:
|
||||||
|
params = {'architecture': arch,
|
||||||
|
'all_architectures':
|
||||||
|
' '.join(constants.ADDITIONAL_ARCHITECTURES)
|
||||||
|
}
|
||||||
|
error_callback(_('additional_architectures "%(architecture)s" '
|
||||||
|
'must be in the supported architecture list: '
|
||||||
|
'%(all_architectures)s') % params)
|
||||||
|
|
||||||
|
_validate_additional_architectures(error_handler)
|
||||||
|
if 'ppc64le' in CONF['additional_architectures']:
|
||||||
|
_validate_ppc64le_exclusive_opts(error_handler)
|
||||||
|
|
||||||
|
|
||||||
def check(verbose_level):
|
def check(verbose_level):
|
||||||
# Fetch configuration and use its log file param to add logging to a file
|
# Fetch configuration and use its log file param to add logging to a file
|
||||||
utils.load_config(CONF, constants.UNDERCLOUD_CONF_PATH)
|
utils.load_config(CONF, constants.UNDERCLOUD_CONF_PATH)
|
||||||
|
@ -455,6 +481,7 @@ def check(verbose_level):
|
||||||
_validate_ips()
|
_validate_ips()
|
||||||
_validate_interface_exists()
|
_validate_interface_exists()
|
||||||
_validate_no_ip_change()
|
_validate_no_ip_change()
|
||||||
|
_validate_architecure_options()
|
||||||
except KeyError as e:
|
except KeyError as e:
|
||||||
LOG.error(_('Key error in configuration: {error}\n'
|
LOG.error(_('Key error in configuration: {error}\n'
|
||||||
'Value is missing in configuration.').format(error=e))
|
'Value is missing in configuration.').format(error=e))
|
||||||
|
|
Loading…
Reference in New Issue