8997def2b5
This is the base patch that updates octavia to use the new octavia-lib. It is backwards compatible by using debtcollector moves. It adds a new controller process called the "driver-agent". This patch also adds unit test coverage for a few additional modules. Depends-On: https://review.openstack.org/#/c/641180/ Change-Id: I438e1548ec0fb6111d1ab85b05015007d9d0a006
85 lines
2.5 KiB
Python
85 lines
2.5 KiB
Python
# Copyright 2018 Rackspace, US 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.
|
|
|
|
from functools import partial
|
|
import multiprocessing
|
|
import os
|
|
import signal
|
|
import sys
|
|
|
|
from oslo_config import cfg
|
|
from oslo_log import log as logging
|
|
from oslo_reports import guru_meditation_report as gmr
|
|
|
|
from octavia.api.drivers.driver_agent import driver_listener
|
|
from octavia.common import service
|
|
from octavia import version
|
|
|
|
|
|
CONF = cfg.CONF
|
|
LOG = logging.getLogger(__name__)
|
|
|
|
|
|
def _mutate_config(*args, **kwargs):
|
|
CONF.mutate_config_files()
|
|
|
|
|
|
def _handle_mutate_config(status_proc_pid, stats_proc_pid, *args, **kwargs):
|
|
LOG.info("Driver agent received HUP signal, mutating config.")
|
|
_mutate_config()
|
|
os.kill(status_proc_pid, signal.SIGHUP)
|
|
os.kill(stats_proc_pid, signal.SIGHUP)
|
|
|
|
|
|
def main():
|
|
service.prepare_service(sys.argv)
|
|
|
|
gmr.TextGuruMeditation.setup_autorun(version)
|
|
|
|
processes = []
|
|
exit_event = multiprocessing.Event()
|
|
|
|
status_listener_proc = multiprocessing.Process(
|
|
name='status_listener', target=driver_listener.status_listener,
|
|
args=(exit_event,))
|
|
processes.append(status_listener_proc)
|
|
|
|
LOG.info("Driver agent status listener process starts:")
|
|
status_listener_proc.start()
|
|
|
|
stats_listener_proc = multiprocessing.Process(
|
|
name='stats_listener', target=driver_listener.stats_listener,
|
|
args=(exit_event,))
|
|
processes.append(stats_listener_proc)
|
|
|
|
LOG.info("Driver agent statistics listener process starts:")
|
|
stats_listener_proc.start()
|
|
|
|
def process_cleanup(*args, **kwargs):
|
|
LOG.info("Driver agent exiting due to signal")
|
|
exit_event.set()
|
|
status_listener_proc.join()
|
|
stats_listener_proc.join()
|
|
|
|
signal.signal(signal.SIGTERM, process_cleanup)
|
|
signal.signal(signal.SIGHUP, partial(
|
|
_handle_mutate_config, status_listener_proc.pid,
|
|
stats_listener_proc.pid))
|
|
|
|
try:
|
|
for process in processes:
|
|
process.join()
|
|
except KeyboardInterrupt:
|
|
process_cleanup()
|