8de77cbe70
Add the ability to install an undercloud minion which is connected to an original undercloud. This minion can have either heat-engine or ironic-conductor deployed on it. Adds two new openstack commands for the minion install and a new minion.conf can be used to configure them. openstack undercloud minion install openstack undercloud minion upgrade Depends-On: https://review.opendev.org/#/c/656984 Change-Id: I61832f5088be172eaf31b36a9cca8dc289580bb2 Related-Blueprint: undercloud-minion
160 lines
6.9 KiB
Python
160 lines
6.9 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 the folder where the command '
|
|
'is executed 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)
|