python-tripleoclient/tripleoclient/config/minion.py
James Slagle ecafbae4ee Use a consistent working directory for tripleo deploy
When
https://review.opendev.org/c/openstack/python-tripleoclient/+/775302
merged, it changed the function signature of
utils.archive_deploy_artifacts, but the tripleo deploy code was not
updated to pass the right arguments. This caused the templates directory
to be considered the working directory and the artifact tarball was
generated in that directory, and then promptly deleted during the
cleanup phase.

This patch updates tripleo deploy to pass the right arguments to
archive_deploy_artifacts, and also use a consistent working directory
based on the stack name under ~/tripleo-deploy instead of defaulting to
the home dir. This is a cleaner approach than just leaving all the files
in the home dir, especially given that tripleo deploy can deploy
multiple stacks, and if the same directory was used as the default,
there would be file collisions.

Closes-Bug: #1921975
Signed-off-by: James Slagle <jslagle@redhat.com>
Change-Id: Idded7faba1ff6c811b94503c559029aeeaca6a06
2021-04-09 09:04:55 -04:00

159 lines
6.8 KiB
Python

# Copyright 2019 Red Hat, Inc.
#
# 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 copy
from osc_lib.i18n import _
from oslo_config import cfg
from tripleoclient import constants
from tripleoclient.config.standalone import StandaloneConfig
CONF = cfg.CONF
class MinionConfig(StandaloneConfig):
def get_minion_service_opts(self, heat_engine=True,
ironic_conductor=False):
_opts = [
cfg.BoolOpt('enable_heat_engine',
default=heat_engine,
help=_(
'Whether to install the Heat Engine service.')),
cfg.BoolOpt('enable_ironic_conductor',
default=ironic_conductor,
help=_(
'Whether to install the Ironic Conductor service. '
'This is currently disabled by default.')),
]
return self.sort_opts(_opts)
def get_base_opts(self):
_base_opts = super(MinionConfig, self).get_base_opts()
_opts = [
cfg.StrOpt('minion_log_file',
default=constants.MINION_LOG_FILE,
help=_(
'The path to a log file to store the '
'install/upgrade logs.'),
),
cfg.StrOpt('minion_hostname',
help=_(
'Fully qualified hostname (including domain) to '
'set on the Undercloud Minion. If left unset, the '
'current hostname will be used, but the user is '
'responsible for configuring all system hostname '
'settings appropriately. If set, the Undercloud '
'Minion install will configure all system hostname '
'settings.'),
),
cfg.StrOpt('minion_local_ip',
default='192.168.24.50/24',
help=_(
'IP information for the interface on the '
'Undercloud Minion. The IP portion '
'of the value will be assigned to the network '
'interface defined by local_interface, with the '
'netmask defined by the prefix portion of the '
'value.')
),
cfg.ListOpt('minion_nameservers',
default=[],
help=_(
'DNS nameserver(s) to configure on the Undercloud '
'Minion.')
),
cfg.ListOpt('minion_ntp_servers',
default=['0.pool.ntp.org', '1.pool.ntp.org',
'2.pool.ntp.org', '3.pool.ntp.org'],
help=_('List of ntp servers to use.')),
cfg.StrOpt('minion_timezone', default=None,
help=_('Host timezone to be used. If no timezone is '
'specified, the existing timezone configuration '
'is used.')),
cfg.StrOpt('minion_service_certificate',
default='',
help=_(
'TODO: '
'Certificate file to use for OpenStack service SSL '
'connections. Setting this enables SSL for the '
'OpenStack API endpoints, leaving it unset '
'disables SSL.')
),
cfg.StrOpt('minion_password_file',
default='tripleo-undercloud-passwords.yaml',
help=_(
'The name of the file to look for the passwords '
'used to connect to the Undercloud. We assume '
'this file is in output_dir if a fully qualified '
'path is not provided.')
),
cfg.StrOpt('minion_undercloud_output_file',
default='tripleo-undercloud-outputs.yaml',
help=_(
'The name of the file to look for the Undercloud '
'output file that contains configuration '
'information. We assume this file is in the folder '
'where the command is executed if a fully '
'qualified path is not provided.')
),
cfg.StrOpt('minion_local_interface',
default='eth1',
help=_('Network interface on the Undercloud Minion '
'that will be used for the services.')
),
cfg.IntOpt('minion_local_mtu',
default=1500,
help=_('MTU to use for the local_interface.')
),
cfg.BoolOpt('minion_debug',
default=True,
help=_(
'Whether to enable the debug log level for '
'OpenStack services and Container Image Prepare '
'step.')
),
cfg.BoolOpt('minion_enable_selinux',
default=True,
help=_('Enable or disable SELinux during the '
'deployment.')),
cfg.BoolOpt('minion_enable_validations',
default=True,
help=_(
'Run pre-flight checks when installing or '
'upgrading.')
),
]
return self.sort_opts(_base_opts + _opts)
def get_opts(self):
_base_opts = self.get_base_opts()
_service_opts = self.get_minion_service_opts()
return self.sort_opts(_base_opts + _service_opts)
def list_opts():
"""List config opts for oslo config generator"""
return [(None, copy.deepcopy(MinionConfig().get_opts()))]
def load_global_config():
"""Register MinionConfig options into global config"""
_opts = MinionConfig().get_opts()
CONF.register_opts(_opts)