python-tripleoclient/tripleoclient/config/minion.py
Alex Schultz 8de77cbe70 Add minion installation
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
2019-06-21 07:44:21 -06:00

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)