Browse Source

Fix service enablement during init

Some services were disabled in the install hook and then started during
the init phase without being enabled. Thus, after a machine restart they
were not brought back up by systemd.

Change-Id: I27f7d7fa6b8df104567b91b5bc998ebe98b478a2
changes/25/762325/2
Dmitrii Shcherbakov 2 weeks ago
parent
commit
a2cc37e278
2 changed files with 30 additions and 41 deletions
  1. +6
    -0
      snap/hooks/install
  2. +24
    -41
      tools/init/init/questions/__init__.py

+ 6
- 0
snap/hooks/install View File

@@ -24,12 +24,15 @@ snapctl stop --disable $SNAP_INSTANCE_NAME.nova-api-metadata
snapctl stop --disable $SNAP_INSTANCE_NAME.nova-spicehtml5proxy
snapctl stop --disable $SNAP_INSTANCE_NAME.nova-scheduler

snapctl stop --disable $SNAP_INSTANCE_NAME.horizon-uwsgi

snapctl stop --disable $SNAP_INSTANCE_NAME.neutron-api

snapctl stop --disable $SNAP_INSTANCE_NAME.glance-api
snapctl stop --disable $SNAP_INSTANCE_NAME.registry

snapctl stop --disable $SNAP_INSTANCE_NAME.cinder-uwsgi
snapctl stop --disable $SNAP_INSTANCE_NAME.cinder-scheduler

snapctl stop --disable $SNAP_INSTANCE_NAME.ovsdb-server
snapctl stop --disable $SNAP_INSTANCE_NAME.neutron-ovn-metadata-agent
@@ -39,6 +42,9 @@ snapctl stop --disable $SNAP_INSTANCE_NAME.ovs-vswitchd
snapctl stop --disable $SNAP_INSTANCE_NAME.ovn-northd
snapctl stop --disable $SNAP_INSTANCE_NAME.ovn-controller

snapctl stop --disable $SNAP_INSTANCE_NAME.rabbitmq-server
snapctl stop --disable $SNAP_INSTANCE_NAME.mysqld

snapctl stop --disable $SNAP_INSTANCE_NAME.iscsid
snapctl stop --disable $SNAP_INSTANCE_NAME.target



+ 24
- 41
tools/init/init/questions/__init__.py View File

@@ -29,7 +29,7 @@ from os import path

from init import shell
from init.shell import (check, call, check_output, sql, nc_wait, log_wait,
start, restart, download, disable, enable)
restart, download, disable, enable)
from init.config import Env, log
from init import cluster_tls
from init.questions.question import Question
@@ -327,7 +327,7 @@ class RabbitMq(Question):
config_key = 'config.services.control-plane'

def _wait(self) -> None:
restart('rabbitmq-server') # Restart server for plugs
enable('rabbitmq-server')
rabbit_port = check_output(
'snapctl', 'get', 'config.network.ports.rabbit')
nc_wait(_env['control_ip'], rabbit_port)
@@ -362,6 +362,7 @@ class DatabaseSetup(Question):
config_key = 'config.services.control-plane'

def _wait(self) -> None:
enable('mysqld')
mysql_port = check_output(
'snapctl', 'get', 'config.network.ports.mysql')
nc_wait(_env['control_ip'], mysql_port)
@@ -416,10 +417,7 @@ class DatabaseSetup(Question):

check('snapctl', 'set', 'database.ready=true')

# Start keystone-uwsgi. We use snapctl, because systemd
# doesn't yet know about the service.
start('nginx')
start('keystone-uwsgi')
enable('nginx')

log.info('Configuring Keystone Fernet Keys ...')
check('snap-openstack', 'launch', 'keystone-manage',
@@ -427,7 +425,7 @@ class DatabaseSetup(Question):
'--keystone-group', 'root')
check('snap-openstack', 'launch', 'keystone-manage', 'db_sync')

restart('keystone-uwsgi')
enable('keystone-uwsgi')

log.info('Bootstrapping Keystone ...')
self._bootstrap()
@@ -456,10 +454,14 @@ class NovaHypervisor(Question):

def yes(self, answer):
log.info('Configuring nova compute hypervisor ...')
start('nova-compute')
enable('libvirtd')
enable('virtlogd')
enable('nova-compute')

def no(self, answer):
log.info('Disabling nova compute service ...')
disable('libvirtd')
disable('virtlogd')
disable('nova-compute')


@@ -471,7 +473,7 @@ class NovaSpiceConsoleSetup(Question):

def yes(self, answer):
log.info('Configuring the Spice HTML5 console service...')
start('nova-spicehtml5proxy')
enable('nova-spicehtml5proxy')

def no(self, answer):
log.info('Disabling nova compute service ...')
@@ -507,12 +509,9 @@ class PlacementSetup(Question):
'microstack', 'placement', endpoint,
'http://{control_ip}:8778'.format(**_env))

start('placement-uwsgi')

log.info('Running Placement DB migrations...')
check('snap-openstack', 'launch', 'placement-manage', 'db', 'sync')

restart('placement-uwsgi')
enable('placement-uwsgi')

def no(self, answer):
log.info('Disabling the Placement service...')
@@ -562,12 +561,6 @@ class NovaControlPlane(Question):
check('openstack', 'role', 'add', '--project',
'service', '--user', 'nova', 'reader')

# Use snapctl to start nova services. We need to call them
# out manually, because systemd doesn't know about them yet.
# TODO: parse the output of `snapctl services` to get this
# list automagically.
start('nova-api')

log.info('Running Nova API DB migrations'
' (this may take a lot of time)...')
check('snap-openstack', 'launch', 'nova-manage', 'api_db', 'sync')
@@ -588,7 +581,7 @@ class NovaControlPlane(Question):
' (this may take a lot of time)...')
check('snap-openstack', 'launch', 'nova-manage', 'db', 'sync')

restart('nova-api')
enable('nova-api')
restart('nova-compute')

for service in [
@@ -596,7 +589,7 @@ class NovaControlPlane(Question):
'nova-conductor',
'nova-scheduler',
]:
start(service)
enable(service)

nc_wait(_env['compute_ip'], '8774')

@@ -663,13 +656,11 @@ class CinderSetup(Question):
f'http://{control_ip}:8776/{api_version}/'
'$(project_id)s'
)
restart('cinder-uwsgi')

log.info('Running Cinder DB migrations...')
check('snap-openstack', 'launch', 'cinder-manage', 'db', 'sync')

restart('cinder-uwsgi')
restart('cinder-scheduler')
enable('cinder-uwsgi')
enable('cinder-scheduler')

def no(self, answer):
log.info('Disabling Cinder services...')
@@ -736,16 +727,10 @@ class NeutronControlPlane(Question):
'microstack', 'network', endpoint,
'http://{control_ip}:9696'.format(**_env))

start('neutron-api')

check('snap-openstack', 'launch', 'neutron-db-manage', 'upgrade',
'head')

for service in [
'neutron-api',
'neutron-ovn-metadata-agent',
]:
restart(service)
enable('neutron-api')
enable('neutron-ovn-metadata-agent')

nc_wait(_env['control_ip'], '9696')

@@ -852,16 +837,14 @@ class GlanceSetup(Question):
'microstack', 'image', endpoint,
'http://{compute_ip}:9292'.format(**_env))

check('snap-openstack', 'launch', 'glance-manage', 'db_sync')
# TODO: remove the glance registry
# https://blueprints.launchpad.net/glance/+spec/deprecate-registry
for service in [
'glance-api',
'registry', # TODO rename to glance-registery
'registry',
]:
start(service)

check('snap-openstack', 'launch', 'glance-manage', 'db_sync')

restart('glance-api')
restart('registry')
enable(service)

nc_wait(_env['compute_ip'], '9292')

@@ -925,7 +908,7 @@ class PostSetup(Question):
# database readiness and hence the clustering service is enabled
# and started here. There needs to be a better way to do this.
enable('cluster-uwsgi')
restart('horizon-uwsgi')
enable('horizon-uwsgi')

check('snapctl', 'set', 'initialized=true')
log.info('Complete. Marked microstack as initialized!')


Loading…
Cancel
Save