Update non-standalone job to use uwsgi

Move ironic-inspector API under apache+uwsgi for the non-standalone job.

Story: 2001842
Task: 30376

Change-Id: I27291003b18beda0a9ddb79d38f615df9e8499ac
This commit is contained in:
Kaifeng Wang 2019-08-10 14:34:55 +08:00
parent 9b92204ef1
commit 551fb98fe8
4 changed files with 61 additions and 16 deletions

View File

@ -14,7 +14,6 @@ IRONIC_INSPECTOR_DBSYNC_BIN_FILE=$IRONIC_INSPECTOR_BIN_DIR/ironic-inspector-dbsy
IRONIC_INSPECTOR_CONF_DIR=${IRONIC_INSPECTOR_CONF_DIR:-/etc/ironic-inspector} IRONIC_INSPECTOR_CONF_DIR=${IRONIC_INSPECTOR_CONF_DIR:-/etc/ironic-inspector}
IRONIC_INSPECTOR_CONF_FILE=$IRONIC_INSPECTOR_CONF_DIR/inspector.conf IRONIC_INSPECTOR_CONF_FILE=$IRONIC_INSPECTOR_CONF_DIR/inspector.conf
IRONIC_INSPECTOR_CMD="$IRONIC_INSPECTOR_BIN_FILE --config-file $IRONIC_INSPECTOR_CONF_FILE" IRONIC_INSPECTOR_CMD="$IRONIC_INSPECTOR_BIN_FILE --config-file $IRONIC_INSPECTOR_CONF_FILE"
IRONIC_INSPECTOR_CMD_API="$IRONIC_INSPECTOR_BIN_FILE_API -p 5050 -- --config-file $IRONIC_INSPECTOR_CONF_FILE"
IRONIC_INSPECTOR_CMD_CONDUCTOR="$IRONIC_INSPECTOR_BIN_FILE_CONDUCTOR --config-file $IRONIC_INSPECTOR_CONF_FILE" IRONIC_INSPECTOR_CMD_CONDUCTOR="$IRONIC_INSPECTOR_BIN_FILE_CONDUCTOR --config-file $IRONIC_INSPECTOR_CONF_FILE"
IRONIC_INSPECTOR_DHCP_CONF_FILE=$IRONIC_INSPECTOR_CONF_DIR/dnsmasq.conf IRONIC_INSPECTOR_DHCP_CONF_FILE=$IRONIC_INSPECTOR_CONF_DIR/dnsmasq.conf
IRONIC_INSPECTOR_ROOTWRAP_CONF_FILE=$IRONIC_INSPECTOR_CONF_DIR/rootwrap.conf IRONIC_INSPECTOR_ROOTWRAP_CONF_FILE=$IRONIC_INSPECTOR_CONF_DIR/rootwrap.conf
@ -22,6 +21,10 @@ IRONIC_INSPECTOR_ADMIN_USER=${IRONIC_INSPECTOR_ADMIN_USER:-ironic-inspector}
IRONIC_INSPECTOR_AUTH_CACHE_DIR=${IRONIC_INSPECTOR_AUTH_CACHE_DIR:-/var/cache/ironic-inspector} IRONIC_INSPECTOR_AUTH_CACHE_DIR=${IRONIC_INSPECTOR_AUTH_CACHE_DIR:-/var/cache/ironic-inspector}
IRONIC_INSPECTOR_DHCP_FILTER=${IRONIC_INSPECTOR_DHCP_FILTER:-iptables} IRONIC_INSPECTOR_DHCP_FILTER=${IRONIC_INSPECTOR_DHCP_FILTER:-iptables}
IRONIC_INSPECTOR_STANDALONE=${IRONIC_INSPECTOR_STANDALONE:-True} IRONIC_INSPECTOR_STANDALONE=${IRONIC_INSPECTOR_STANDALONE:-True}
# Support entry points installation of console scripts
IRONIC_INSPECTOR_UWSGI=$IRONIC_INSPECTOR_BIN_DIR/ironic-inspector-api-wsgi
IRONIC_INSPECTOR_UWSGI_CONF=$IRONIC_INSPECTOR_CONF_DIR/ironic-inspector-uwsgi.ini
if [[ -n ${IRONIC_INSPECTOR_MANAGE_FIREWALL} ]] ; then if [[ -n ${IRONIC_INSPECTOR_MANAGE_FIREWALL} ]] ; then
echo "IRONIC_INSPECTOR_MANAGE_FIREWALL is deprecated." >&2 echo "IRONIC_INSPECTOR_MANAGE_FIREWALL is deprecated." >&2
echo "Please, use IRONIC_INSPECTOR_DHCP_FILTER == noop/iptables/dnsmasq instead." >&2 echo "Please, use IRONIC_INSPECTOR_DHCP_FILTER == noop/iptables/dnsmasq instead." >&2
@ -44,9 +47,15 @@ IRONIC_INSPECTOR_DHCP_HOSTSDIR=${IRONIC_INSPECTOR_DHCP_HOSTSDIR:-/etc/ironic-ins
IRONIC_INSPECTOR_DNSMASQ_STOP_COMMAND=${IRONIC_INSPECTOR_DNSMASQ_STOP_COMMAND:-systemctl stop devstack@ironic-inspector-dhcp} IRONIC_INSPECTOR_DNSMASQ_STOP_COMMAND=${IRONIC_INSPECTOR_DNSMASQ_STOP_COMMAND:-systemctl stop devstack@ironic-inspector-dhcp}
IRONIC_INSPECTOR_DNSMASQ_START_COMMAND=${IRONIC_INSPECTOR_DNSMASQ_START_COMMAND:-systemctl start devstack@ironic-inspector-dhcp} IRONIC_INSPECTOR_DNSMASQ_START_COMMAND=${IRONIC_INSPECTOR_DNSMASQ_START_COMMAND:-systemctl start devstack@ironic-inspector-dhcp}
IRONIC_INSPECTOR_HOST=$HOST_IP IRONIC_INSPECTOR_HOST=$SERVICE_HOST
IRONIC_INSPECTOR_PORT=5050 IRONIC_INSPECTOR_PORT=5050
IRONIC_INSPECTOR_URI="http://$IRONIC_INSPECTOR_HOST:$IRONIC_INSPECTOR_PORT"
if [[ "$IRONIC_INSPECTOR_STANDALONE" == "False" ]]; then
IRONIC_INSPECTOR_URI="http://$IRONIC_INSPECTOR_HOST/baremetal-introspection"
else
IRONIC_INSPECTOR_URI="http://$IRONIC_INSPECTOR_HOST:$IRONIC_INSPECTOR_PORT"
fi
IRONIC_INSPECTOR_BUILD_RAMDISK=$(trueorfalse False IRONIC_INSPECTOR_BUILD_RAMDISK) IRONIC_INSPECTOR_BUILD_RAMDISK=$(trueorfalse False IRONIC_INSPECTOR_BUILD_RAMDISK)
IRONIC_AGENT_KERNEL_URL=${IRONIC_AGENT_KERNEL_URL:-http://tarballs.openstack.org/ironic-python-agent/coreos/files/coreos_production_pxe.vmlinuz} IRONIC_AGENT_KERNEL_URL=${IRONIC_AGENT_KERNEL_URL:-http://tarballs.openstack.org/ironic-python-agent/coreos/files/coreos_production_pxe.vmlinuz}
IRONIC_AGENT_RAMDISK_URL=${IRONIC_AGENT_RAMDISK_URL:-http://tarballs.openstack.org/ironic-python-agent/coreos/files/coreos_production_pxe_image-oem.cpio.gz} IRONIC_AGENT_RAMDISK_URL=${IRONIC_AGENT_RAMDISK_URL:-http://tarballs.openstack.org/ironic-python-agent/coreos/files/coreos_production_pxe_image-oem.cpio.gz}
@ -61,7 +70,13 @@ IRONIC_INSPECTOR_INTERNAL_SUBNET_SIZE=${IRONIC_INSPECTOR_INTERNAL_SUBNET_SIZE:-2
IRONIC_INSPECTOR_DHCP_RANGE=${IRONIC_INSPECTOR_DHCP_RANGE:-172.24.42.100,172.24.42.253} IRONIC_INSPECTOR_DHCP_RANGE=${IRONIC_INSPECTOR_DHCP_RANGE:-172.24.42.100,172.24.42.253}
IRONIC_INSPECTOR_INTERFACE=${IRONIC_INSPECTOR_INTERFACE:-br-inspector} IRONIC_INSPECTOR_INTERFACE=${IRONIC_INSPECTOR_INTERFACE:-br-inspector}
IRONIC_INSPECTOR_INTERFACE_PHYSICAL=$(trueorfalse False IRONIC_INSPECTOR_INTERFACE_PHYSICAL) IRONIC_INSPECTOR_INTERFACE_PHYSICAL=$(trueorfalse False IRONIC_INSPECTOR_INTERFACE_PHYSICAL)
IRONIC_INSPECTOR_INTERNAL_URI="http://$IRONIC_INSPECTOR_INTERNAL_IP:$IRONIC_INSPECTOR_PORT"
if [[ "$IRONIC_INSPECTOR_STANDALONE" == "False" ]]; then
IRONIC_INSPECTOR_INTERNAL_URI="http://$IRONIC_INSPECTOR_INTERNAL_IP/baremetal-introspection"
else
IRONIC_INSPECTOR_INTERNAL_URI="http://$IRONIC_INSPECTOR_INTERNAL_IP:$IRONIC_INSPECTOR_PORT"
fi
IRONIC_INSPECTOR_INTERNAL_IP_WITH_NET="$IRONIC_INSPECTOR_INTERNAL_IP/$IRONIC_INSPECTOR_INTERNAL_SUBNET_SIZE" IRONIC_INSPECTOR_INTERNAL_IP_WITH_NET="$IRONIC_INSPECTOR_INTERNAL_IP/$IRONIC_INSPECTOR_INTERNAL_SUBNET_SIZE"
# Whether DevStack will be setup for bare metal or VMs # Whether DevStack will be setup for bare metal or VMs
IRONIC_IS_HARDWARE=$(trueorfalse False IRONIC_IS_HARDWARE) IRONIC_IS_HARDWARE=$(trueorfalse False IRONIC_IS_HARDWARE)
@ -107,6 +122,10 @@ function inspector_iniset {
function install_inspector { function install_inspector {
setup_develop $IRONIC_INSPECTOR_DIR setup_develop $IRONIC_INSPECTOR_DIR
if [[ "$IRONIC_INSPECTOR_STANDALONE" == "False" ]]; then
install_apache_wsgi
fi
} }
function install_inspector_dhcp { function install_inspector_dhcp {
@ -126,8 +145,13 @@ function start_inspector {
if [[ "$IRONIC_INSPECTOR_STANDALONE" == "True" ]]; then if [[ "$IRONIC_INSPECTOR_STANDALONE" == "True" ]]; then
run_process ironic-inspector "$IRONIC_INSPECTOR_CMD" run_process ironic-inspector "$IRONIC_INSPECTOR_CMD"
else else
run_process ironic-inspector-api "$IRONIC_INSPECTOR_CMD_API" run_process ironic-inspector-api "$IRONIC_INSPECTOR_BIN_DIR/uwsgi --procname-prefix ironic-inspector-api --ini $IRONIC_INSPECTOR_UWSGI_CONF --pyargv \"--config-file $IRONIC_INSPECTOR_CONF_FILE\""
run_process ironic-inspector-conductor "$IRONIC_INSPECTOR_CMD_CONDUCTOR" run_process ironic-inspector-conductor "$IRONIC_INSPECTOR_CMD_CONDUCTOR"
fi
echo "Waiting for ironic-inspector API to start..."
if ! timeout $SERVICE_TIMEOUT sh -c "while ! wget --no-proxy -q -O- $IRONIC_INSPECTOR_URI; do sleep 1; done"; then
die $LINENO "ironic-inspector API did not start"
fi fi
} }
@ -313,6 +337,11 @@ function configure_inspector {
setup_logging $IRONIC_INSPECTOR_CONF_FILE DEFAULT setup_logging $IRONIC_INSPECTOR_CONF_FILE DEFAULT
# Adds uWSGI for inspector API
if [[ "$IRONIC_INSPECTOR_STANDALONE" == "False" ]]; then
write_uwsgi_config "$IRONIC_INSPECTOR_UWSGI_CONF" "$IRONIC_INSPECTOR_UWSGI" "/baremetal-introspection"
fi
cp "$IRONIC_INSPECTOR_DIR/rootwrap.conf" "$IRONIC_INSPECTOR_ROOTWRAP_CONF_FILE" cp "$IRONIC_INSPECTOR_DIR/rootwrap.conf" "$IRONIC_INSPECTOR_ROOTWRAP_CONF_FILE"
cp -r "$IRONIC_INSPECTOR_DIR/rootwrap.d" "$IRONIC_INSPECTOR_CONF_DIR" cp -r "$IRONIC_INSPECTOR_DIR/rootwrap.d" "$IRONIC_INSPECTOR_CONF_DIR"
local ironic_inspector_rootwrap=$(get_rootwrap_location ironic-inspector) local ironic_inspector_rootwrap=$(get_rootwrap_location ironic-inspector)
@ -402,6 +431,12 @@ function prepare_environment {
--dport 69 -j ACCEPT --dport 69 -j ACCEPT
sudo iptables -I INPUT -i $IRONIC_INSPECTOR_INTERFACE -p tcp \ sudo iptables -I INPUT -i $IRONIC_INSPECTOR_INTERFACE -p tcp \
--dport $IRONIC_INSPECTOR_PORT -j ACCEPT --dport $IRONIC_INSPECTOR_PORT -j ACCEPT
if [[ "$IRONIC_INSPECTOR_STANDALONE" == "False" ]]; then
sudo iptables -I INPUT -i $IRONIC_INSPECTOR_INTERFACE -p tcp --dport 80 -j ACCEPT
sudo iptables -I INPUT -i $IRONIC_INSPECTOR_INTERFACE -p tcp --dport 443 -j ACCEPT
fi
} }
# create_ironic_inspector_cache_dir() - Part of the prepare_environment() process # create_ironic_inspector_cache_dir() - Part of the prepare_environment() process
@ -424,6 +459,11 @@ function cleanup_inspector {
sudo rm -rf $IRONIC_INSPECTOR_AUTH_CACHE_DIR sudo rm -rf $IRONIC_INSPECTOR_AUTH_CACHE_DIR
sudo rm -rf "$IRONIC_INSPECTOR_RAMDISK_LOGDIR" sudo rm -rf "$IRONIC_INSPECTOR_RAMDISK_LOGDIR"
if [[ "$IRONIC_INSPECTOR_STANDALONE" == "False" ]]; then
sudo iptables -D INPUT -i $IRONIC_INSPECTOR_INTERFACE -p tcp --dport 80 -j ACCEPT | true
sudo iptables -D INPUT -i $IRONIC_INSPECTOR_INTERFACE -p tcp --dport 443 -j ACCEPT | true
fi
# Always try to clean up firewall rules, no matter filter driver used # Always try to clean up firewall rules, no matter filter driver used
sudo iptables -D INPUT -i $IRONIC_INSPECTOR_INTERFACE -p udp \ sudo iptables -D INPUT -i $IRONIC_INSPECTOR_INTERFACE -p udp \
--dport 69 -j ACCEPT | true --dport 69 -j ACCEPT | true
@ -439,6 +479,11 @@ function cleanup_inspector {
fi fi
sudo ip link show $IRONIC_INSPECTOR_OVS_PORT && sudo ip link delete $IRONIC_INSPECTOR_OVS_PORT sudo ip link show $IRONIC_INSPECTOR_OVS_PORT && sudo ip link delete $IRONIC_INSPECTOR_OVS_PORT
sudo ovs-vsctl --if-exists del-port $IRONIC_INSPECTOR_OVS_PORT sudo ovs-vsctl --if-exists del-port $IRONIC_INSPECTOR_OVS_PORT
if [[ "$IRONIC_INSPECTOR_STANDALONE" == "False" ]]; then
remove_uwsgi_config "$IRONIC_INSPECTOR_UWSGI_CONF" "$IRONIC_INSPECTOR_UWSGI"
restart_apache_server
fi
} }
function sync_inspector_database { function sync_inspector_database {

View File

@ -22,12 +22,9 @@ CONF = cfg.CONF
TRANSPORT = None TRANSPORT = None
def get_transport(): def init():
global TRANSPORT global TRANSPORT
TRANSPORT = messaging.get_rpc_transport(CONF)
if TRANSPORT is None:
TRANSPORT = messaging.get_rpc_transport(CONF)
return TRANSPORT
def get_client(topic=None): def get_client(topic=None):
@ -36,22 +33,22 @@ def get_client(topic=None):
:param topic: The topic of the message will be delivered to. This argument :param topic: The topic of the message will be delivered to. This argument
is ignored if CONF.standalone is True. is ignored if CONF.standalone is True.
""" """
assert TRANSPORT is not None
if CONF.standalone: if CONF.standalone:
target = messaging.Target(topic=manager.MANAGER_TOPIC, target = messaging.Target(topic=manager.MANAGER_TOPIC,
server=CONF.host, server=CONF.host,
version='1.3') version='1.3')
else: else:
target = messaging.Target(topic=topic, version='1.3') target = messaging.Target(topic=topic, version='1.3')
transport = get_transport() return messaging.RPCClient(TRANSPORT, target)
return messaging.RPCClient(transport, target)
def get_server(endpoints): def get_server(endpoints):
"""Get a RPC server instance.""" """Get a RPC server instance."""
transport = get_transport() assert TRANSPORT is not None
target = messaging.Target(topic=manager.MANAGER_TOPIC, server=CONF.host, target = messaging.Target(topic=manager.MANAGER_TOPIC, server=CONF.host,
version='1.3') version='1.3')
return messaging.get_rpc_server( return messaging.get_rpc_server(
transport, target, endpoints, executor='eventlet', TRANSPORT, target, endpoints, executor='eventlet',
access_policy=dispatcher.DefaultRPCAccessPolicy) access_policy=dispatcher.DefaultRPCAccessPolicy)

View File

@ -13,8 +13,10 @@
from oslo_config import cfg from oslo_config import cfg
from oslo_log import log from oslo_log import log
from ironic_inspector.common import rpc
from ironic_inspector.conf import opts from ironic_inspector.conf import opts
LOG = log.getLogger(__name__) LOG = log.getLogger(__name__)
CONF = cfg.CONF CONF = cfg.CONF
@ -24,6 +26,7 @@ def prepare_service(args=None):
log.register_options(CONF) log.register_options(CONF)
opts.set_config_defaults() opts.set_config_defaults()
opts.parse_args(args) opts.parse_args(args)
rpc.init()
log.setup(CONF, 'ironic_inspector') log.setup(CONF, 'ironic_inspector')
LOG.debug("Configuration:") LOG.debug("Configuration:")

View File

@ -671,7 +671,7 @@ class TestTopic(test_base.BaseTest):
def setUp(self): def setUp(self):
super(TestTopic, self).setUp() super(TestTopic, self).setUp()
self.transport_mock = self.useFixture( self.transport_mock = self.useFixture(
fixtures.MockPatchObject(rpc, 'get_transport', fixtures.MockPatchObject(rpc, 'TRANSPORT',
autospec=True)).mock autospec=True)).mock
self.target_mock = self.useFixture( self.target_mock = self.useFixture(
fixtures.MockPatchObject(rpc.messaging, 'Target', fixtures.MockPatchObject(rpc.messaging, 'Target',