Source code for ironic.command.utils
# 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 os
import signal
from oslo_config import cfg
from oslo_log import log
from ironic.conductor import rpc_service
LOG = log.getLogger(__name__)
CONF = cfg.CONF
# NOTE(TheJulia): These methods are for the parent processes to
# glue behavior expectations to conductor shutdowns.
[docs]
def handle_no_deregister(signo, frame):
LOG.info('Got signal SIGUSR1. Not deregistering on next shutdown '
'on host %(host)s.',
{'host': CONF.host})
rpc_service.DEREGISTER_ON_SHUTDOWN.clear()
[docs]
def handle_drain(signo, frame):
LOG.info('Got signal SIGUSR2. Initiating a workload drain and '
'shutdown on host %(host)s.',
{'host': CONF.host})
rpc_service.DRAIN.set()
# NOTE(TheJulia): This is sort of aggressive, but it works.
# Issue in part is we need to trigger the child process to stop, and
# the manager shutdown method is for parent process calls, in other words
# the application triggering a self shutdown. Utlimately this triggers the
# application stop() method to be called.
os.kill(0, signal.SIGTERM)
[docs]
def handle_signal():
"""Add a signal handler for SIGUSR1, SIGUSR2.
The SIGUSR1 handler ensures that the manager is not deregistered when
it is shutdown.
The SIGUSR2 handler starts a drain shutdown.
"""
signal.signal(signal.SIGUSR1, handle_no_deregister)
# In ironic, USR2 triggers a draining shutdown, we'll need to figure out
# how to do that in this model, most likely set a flag and request the
# manager to shutdown.
signal.signal(signal.SIGUSR2, handle_drain)