By default, most Openstack services are bound to 0.0.0.0
and service endpoints are registered as IPv4 addresses.
With this change we introduce two new variables to control
this behavior:
SERVICE_IP_VERSION - can either be "4" or "6".
When set to "4" (default if not set) devstack will operate
as today - most services will open listen sockets on 0.0.0.0
and service endpoints will be registered using HOST_IP as the
address.
When set to "6" devstack services will open listen sockets on ::
and service endpoints will be registered using HOST_IPV6 as the
address.
There is no support for "4+6", more work is required for that.
HOST_IPV6 - if SERVICE_IP_VERSION=6 this must be an IPv6
address configured on the system.
Some existing services, like the Openvswitch agent, will continue
to use IPv4 addresses for things like tunnel endpoints. This is
a current restriction in the code and can be updated at a later
time. This change is just a first step to supporting IPv6-only
control and data planes in devstack.
This change is also partly based on two previous patches,
https://review.openstack.org/#/c/140519/ and
https://review.openstack.org/#/c/176898/
Change-Id: I5c0b775490ce54ab104fd5e89b20fb700212ae74
Co-Authored-By: Sean Collins <sean@coreitpro.com>
Co-Authored-By: Baodong Li <baoli@cisco.com>
Co-Authored-By: Sridhar Gaddam <sridhar.gaddam@enovance.com>
Co-Authored-By: Adam Kacmarsky <adam.kacmarsky@hp.com>
Co-Authored-By: Jeremy Alvis <jeremy.alvis@hp.com>
| ... | ... |
@@ -360,6 +360,22 @@ Be aware that there are some features currently missing in cells, one notable |
| 360 | 360 |
one being security groups. The exercises have been patched to disable |
| 361 | 361 |
functionality not supported by cells. |
| 362 | 362 |
|
| 363 |
+# IPv6 |
|
| 364 |
+ |
|
| 365 |
+By default, most Openstack services are bound to 0.0.0.0 |
|
| 366 |
+and service endpoints are registered as IPv4 addresses. |
|
| 367 |
+A new variable was created to control this behavior, and to |
|
| 368 |
+allow for operation over IPv6 instead of IPv4. |
|
| 369 |
+ |
|
| 370 |
+For this, add the following to `local.conf`: |
|
| 371 |
+ |
|
| 372 |
+ SERVICE_IP_VERSION=6 |
|
| 373 |
+ |
|
| 374 |
+When set to "6" devstack services will open listen sockets on :: |
|
| 375 |
+and service endpoints will be registered using HOST_IPV6 as the |
|
| 376 |
+address. The default value for this setting is `4`. Dual-mode |
|
| 377 |
+support, for example `4+6` is not currently supported. |
|
| 378 |
+ |
|
| 363 | 379 |
|
| 364 | 380 |
# Local Configuration |
| 365 | 381 |
|
| ... | ... |
@@ -137,6 +137,11 @@ Ethernet interface to a bridge on the host. Setting it here also makes it |
| 137 | 137 |
available for ``openrc`` to set ``OS_AUTH_URL``. ``HOST_IP`` is not set |
| 138 | 138 |
by default. |
| 139 | 139 |
|
| 140 |
+``HOST_IPV6`` is normally detected on the first run of ``stack.sh`` but |
|
| 141 |
+will not be set if there is no IPv6 address on the default Ethernet interface. |
|
| 142 |
+Setting it here also makes it available for ``openrc`` to set ``OS_AUTH_URL``. |
|
| 143 |
+``HOST_IPV6`` is not set by default. |
|
| 144 |
+ |
|
| 140 | 145 |
Common Configuration Variables |
| 141 | 146 |
============================== |
| 142 | 147 |
|
| ... | ... |
@@ -391,6 +396,8 @@ Multi-host DevStack |
| 391 | 391 |
ENABLED_SERVICES=n-vol,n-cpu,n-net,n-api |
| 392 | 392 |
|
| 393 | 393 |
IP Version |
| 394 |
+---------- |
|
| 395 |
+ |
|
| 394 | 396 |
| Default: ``IP_VERSION=4+6`` |
| 395 | 397 |
| This setting can be used to configure DevStack to create either an IPv4, |
| 396 | 398 |
IPv6, or dual stack tenant data network by setting ``IP_VERSION`` to |
| ... | ... |
@@ -418,6 +425,25 @@ IP Version |
| 418 | 418 |
| *Note: ``FIXED_RANGE_V6`` and ``IPV6_PRIVATE_NETWORK_GATEWAY`` |
| 419 | 419 |
can be configured with any valid IPv6 prefix. The default values make |
| 420 | 420 |
use of an auto-generated ``IPV6_GLOBAL_ID`` to comply with RFC 4193.* |
| 421 |
+ | |
|
| 422 |
+ |
|
| 423 |
+ | Default: ``SERVICE_IP_VERSION=4`` |
|
| 424 |
+ | This setting can be used to configure DevStack to enable services to |
|
| 425 |
+ operate over either IPv4 or IPv6, by setting ``SERVICE_IP_VERSION`` to |
|
| 426 |
+ either ``SERVICE_IP_VERSION=4`` or ``SERVICE_IP_VERSION=6`` respectively. |
|
| 427 |
+ When set to ``4`` devstack services will open listen sockets on 0.0.0.0 |
|
| 428 |
+ and service endpoints will be registered using ``HOST_IP`` as the address. |
|
| 429 |
+ When set to ``6`` devstack services will open listen sockets on :: and |
|
| 430 |
+ service endpoints will be registered using ``HOST_IPV6`` as the address. |
|
| 431 |
+ The default value for this setting is ``4``. Dual-mode support, for |
|
| 432 |
+ example ``4+6`` is not currently supported. |
|
| 433 |
+ | The following optional variable can be used to alter the default IPv6 |
|
| 434 |
+ address used: |
|
| 435 |
+ | |
|
| 436 |
+ |
|
| 437 |
+ :: |
|
| 438 |
+ |
|
| 439 |
+ HOST_IPV6=${some_local_ipv6_address}
|
|
| 421 | 440 |
|
| 422 | 441 |
Examples |
| 423 | 442 |
======== |
| ... | ... |
@@ -46,7 +46,8 @@ TRACK_DEPENDS=${TRACK_DEPENDS:-False}
|
| 46 | 46 |
# Save these variables to .stackenv |
| 47 | 47 |
STACK_ENV_VARS="BASE_SQL_CONN DATA_DIR DEST ENABLED_SERVICES HOST_IP \ |
| 48 | 48 |
KEYSTONE_AUTH_PROTOCOL KEYSTONE_AUTH_URI KEYSTONE_SERVICE_URI \ |
| 49 |
- LOGFILE OS_CACERT SERVICE_HOST SERVICE_PROTOCOL STACK_USER TLS_IP" |
|
| 49 |
+ LOGFILE OS_CACERT SERVICE_HOST SERVICE_PROTOCOL STACK_USER TLS_IP \ |
|
| 50 |
+ HOST_IPV6" |
|
| 50 | 51 |
|
| 51 | 52 |
|
| 52 | 53 |
# Saves significant environment variables to .stackenv for later use |
| ... | ... |
@@ -578,13 +579,14 @@ function get_default_host_ip {
|
| 578 | 578 |
local floating_range=$2 |
| 579 | 579 |
local host_ip_iface=$3 |
| 580 | 580 |
local host_ip=$4 |
| 581 |
+ local af=$5 |
|
| 581 | 582 |
|
| 582 | 583 |
# Search for an IP unless an explicit is set by ``HOST_IP`` environment variable |
| 583 | 584 |
if [ -z "$host_ip" -o "$host_ip" == "dhcp" ]; then |
| 584 | 585 |
host_ip="" |
| 585 | 586 |
# Find the interface used for the default route |
| 586 |
- host_ip_iface=${host_ip_iface:-$(ip route | awk '/default/ {print $5}' | head -1)}
|
|
| 587 |
- local host_ips=$(LC_ALL=C ip -f inet addr show ${host_ip_iface} | awk '/inet/ {split($2,parts,"/"); print parts[1]}')
|
|
| 587 |
+ host_ip_iface=${host_ip_iface:-$(ip -f $af route | awk '/default/ {print $5}' | head -1)}
|
|
| 588 |
+ local host_ips=$(LC_ALL=C ip -f $af addr show ${host_ip_iface} | awk /$af'/ {split($2,parts,"/"); print parts[1]}')
|
|
| 588 | 589 |
local ip |
| 589 | 590 |
for ip in $host_ips; do |
| 590 | 591 |
# Attempt to filter out IP addresses that are part of the fixed and |
| ... | ... |
@@ -593,6 +595,10 @@ function get_default_host_ip {
|
| 593 | 593 |
# will be printed and the first IP from the interface will be used. |
| 594 | 594 |
# If that is not correct set ``HOST_IP`` in ``localrc`` to the correct |
| 595 | 595 |
# address. |
| 596 |
+ if [[ "$af" == "inet6" ]]; then |
|
| 597 |
+ host_ip=$ip |
|
| 598 |
+ break; |
|
| 599 |
+ fi |
|
| 596 | 600 |
if ! (address_in_net $ip $fixed_range || address_in_net $ip $floating_range); then |
| 597 | 601 |
host_ip=$ip |
| 598 | 602 |
break; |
| ... | ... |
@@ -65,6 +65,7 @@ CINDER_SERVICE_HOST=${CINDER_SERVICE_HOST:-$SERVICE_HOST}
|
| 65 | 65 |
CINDER_SERVICE_PORT=${CINDER_SERVICE_PORT:-8776}
|
| 66 | 66 |
CINDER_SERVICE_PORT_INT=${CINDER_SERVICE_PORT_INT:-18776}
|
| 67 | 67 |
CINDER_SERVICE_PROTOCOL=${CINDER_SERVICE_PROTOCOL:-$SERVICE_PROTOCOL}
|
| 68 |
+CINDER_SERVICE_LISTEN_ADDRESS=${CINDER_SERVICE_LISTEN_ADDRESS:-$SERVICE_LISTEN_ADDRESS}
|
|
| 68 | 69 |
|
| 69 | 70 |
# What type of LVM device should Cinder use for LVM backend |
| 70 | 71 |
# Defaults to default, which is thick, the other valid choice |
| ... | ... |
@@ -222,6 +223,7 @@ function configure_cinder {
|
| 222 | 222 |
iniset $CINDER_CONF DEFAULT api_paste_config $CINDER_API_PASTE_INI |
| 223 | 223 |
iniset $CINDER_CONF DEFAULT rootwrap_config "$CINDER_CONF_DIR/rootwrap.conf" |
| 224 | 224 |
iniset $CINDER_CONF DEFAULT osapi_volume_extension cinder.api.contrib.standard_extensions |
| 225 |
+ iniset $CINDER_CONF DEFAULT osapi_volume_listen $CINDER_SERVICE_LISTEN_ADDRESS |
|
| 225 | 226 |
iniset $CINDER_CONF DEFAULT state_path $CINDER_STATE_PATH |
| 226 | 227 |
iniset $CINDER_CONF oslo_concurrency lock_path $CINDER_STATE_PATH |
| 227 | 228 |
iniset $CINDER_CONF DEFAULT periodic_interval $CINDER_PERIODIC_INTERVAL |
| ... | ... |
@@ -70,10 +70,19 @@ function initialize_database_backends {
|
| 70 | 70 |
|
| 71 | 71 |
# For backward-compatibility, read in the MYSQL_HOST/USER variables and use |
| 72 | 72 |
# them as the default values for the DATABASE_HOST/USER variables. |
| 73 |
- MYSQL_HOST=${MYSQL_HOST:-127.0.0.1}
|
|
| 73 |
+ MYSQL_HOST=${MYSQL_HOST:-$SERVICE_LOCAL_HOST}
|
|
| 74 | 74 |
MYSQL_USER=${MYSQL_USER:-root}
|
| 75 | 75 |
|
| 76 |
- DATABASE_HOST=${DATABASE_HOST:-${MYSQL_HOST}}
|
|
| 76 |
+ # Set DATABASE_HOST equal to MYSQL_HOST. If SERVICE_IP_VERSION is equal to 6, |
|
| 77 |
+ # set DATABASE_HOST equal to [MYSQL_HOST]. MYSQL_HOST cannot use brackets due |
|
| 78 |
+ # to mysql not using bracketing for IPv6 addresses. DATABASE_HOST must have brackets |
|
| 79 |
+ # due to sqlalchemy only reading IPv6 addresses with brackets. |
|
| 80 |
+ if [[ "$SERVICE_IP_VERSION" == 6 ]]; then |
|
| 81 |
+ DATABASE_HOST=${DATABASE_HOST:-[$MYSQL_HOST]}
|
|
| 82 |
+ else |
|
| 83 |
+ DATABASE_HOST=${DATABASE_HOST:-${MYSQL_HOST}}
|
|
| 84 |
+ fi |
|
| 85 |
+ |
|
| 77 | 86 |
DATABASE_USER=${DATABASE_USER:-${MYSQL_USER}}
|
| 78 | 87 |
|
| 79 | 88 |
if [ -n "$MYSQL_PASSWORD" ]; then |
| ... | ... |
@@ -90,10 +90,10 @@ function configure_database_mysql {
|
| 90 | 90 |
|
| 91 | 91 |
# Now update ``my.cnf`` for some local needs and restart the mysql service |
| 92 | 92 |
|
| 93 |
- # Change ‘bind-address’ from localhost (127.0.0.1) to any (0.0.0.0) and |
|
| 93 |
+ # Change ‘bind-address’ from localhost (127.0.0.1) to any (::) and |
|
| 94 | 94 |
# set default db type to InnoDB |
| 95 | 95 |
sudo bash -c "source $TOP_DIR/functions && \ |
| 96 |
- iniset $my_conf mysqld bind-address 0.0.0.0 && \ |
|
| 96 |
+ iniset $my_conf mysqld bind-address "$SERVICE_LISTEN_ADDRESS" && \ |
|
| 97 | 97 |
iniset $my_conf mysqld sql_mode STRICT_ALL_TABLES && \ |
| 98 | 98 |
iniset $my_conf mysqld default-storage-engine InnoDB \ |
| 99 | 99 |
iniset $my_conf mysqld max_connections 1024 \ |
| ... | ... |
@@ -64,6 +64,7 @@ fi |
| 64 | 64 |
|
| 65 | 65 |
# Glance connection info. Note the port must be specified. |
| 66 | 66 |
GLANCE_SERVICE_HOST=${GLANCE_SERVICE_HOST:-$SERVICE_HOST}
|
| 67 |
+GLANCE_SERVICE_LISTEN_ADDRESS=${GLANCE_SERVICE_LISTEN_ADDRESS:-$SERVICE_LISTEN_ADDRESS}
|
|
| 67 | 68 |
GLANCE_SERVICE_PORT=${GLANCE_SERVICE_PORT:-9292}
|
| 68 | 69 |
GLANCE_SERVICE_PORT_INT=${GLANCE_SERVICE_PORT_INT:-19292}
|
| 69 | 70 |
GLANCE_HOSTPORT=${GLANCE_HOSTPORT:-$GLANCE_SERVICE_HOST:$GLANCE_SERVICE_PORT}
|
| ... | ... |
@@ -106,6 +107,7 @@ function configure_glance {
|
| 106 | 106 |
# Copy over our glance configurations and update them |
| 107 | 107 |
cp $GLANCE_DIR/etc/glance-registry.conf $GLANCE_REGISTRY_CONF |
| 108 | 108 |
iniset $GLANCE_REGISTRY_CONF DEFAULT debug $ENABLE_DEBUG_LOG_LEVEL |
| 109 |
+ iniset $GLANCE_REGISTRY_CONF DEFAULT bind_host $GLANCE_SERVICE_LISTEN_ADDRESS |
|
| 109 | 110 |
inicomment $GLANCE_REGISTRY_CONF DEFAULT log_file |
| 110 | 111 |
local dburl=`database_connection_url glance` |
| 111 | 112 |
iniset $GLANCE_REGISTRY_CONF DEFAULT sql_connection $dburl |
| ... | ... |
@@ -118,6 +120,7 @@ function configure_glance {
|
| 118 | 118 |
|
| 119 | 119 |
cp $GLANCE_DIR/etc/glance-api.conf $GLANCE_API_CONF |
| 120 | 120 |
iniset $GLANCE_API_CONF DEFAULT debug $ENABLE_DEBUG_LOG_LEVEL |
| 121 |
+ iniset $GLANCE_API_CONF DEFAULT bind_host $GLANCE_SERVICE_LISTEN_ADDRESS |
|
| 121 | 122 |
inicomment $GLANCE_API_CONF DEFAULT log_file |
| 122 | 123 |
iniset $GLANCE_API_CONF DEFAULT sql_connection $dburl |
| 123 | 124 |
iniset $GLANCE_API_CONF DEFAULT use_syslog $SYSLOG |
| ... | ... |
@@ -136,6 +139,7 @@ function configure_glance {
|
| 136 | 136 |
|
| 137 | 137 |
# Store specific configs |
| 138 | 138 |
iniset $GLANCE_API_CONF glance_store filesystem_store_datadir $GLANCE_IMAGE_DIR/ |
| 139 |
+ iniset $GLANCE_API_CONF DEFAULT registry_host $GLANCE_SERVICE_HOST |
|
| 139 | 140 |
|
| 140 | 141 |
iniset $GLANCE_API_CONF DEFAULT workers "$API_WORKERS" |
| 141 | 142 |
|
| ... | ... |
@@ -202,6 +206,7 @@ function configure_glance {
|
| 202 | 202 |
iniset $GLANCE_CACHE_CONF DEFAULT admin_user glance |
| 203 | 203 |
iniuncomment $GLANCE_CACHE_CONF DEFAULT auth_password |
| 204 | 204 |
iniset $GLANCE_CACHE_CONF DEFAULT admin_password $SERVICE_PASSWORD |
| 205 |
+ iniset $GLANCE_CACHE_CONF DEFAULT registry_host $GLANCE_SERVICE_HOST |
|
| 205 | 206 |
|
| 206 | 207 |
# Store specific confs |
| 207 | 208 |
iniset $GLANCE_CACHE_CONF glance_store filesystem_store_datadir $GLANCE_IMAGE_DIR/ |
| ... | ... |
@@ -223,6 +228,7 @@ function configure_glance {
|
| 223 | 223 |
if is_service_enabled g-search; then |
| 224 | 224 |
cp $GLANCE_DIR/etc/glance-search.conf $GLANCE_SEARCH_CONF |
| 225 | 225 |
iniset $GLANCE_SEARCH_CONF DEFAULT debug $ENABLE_DEBUG_LOG_LEVEL |
| 226 |
+ iniset $GLANCE_SEARCH_CONF DEFAULT bind_host $GLANCE_SERVICE_LISTEN_ADDRESS |
|
| 226 | 227 |
inicomment $GLANCE_SEARCH_CONF DEFAULT log_file |
| 227 | 228 |
iniset $GLANCE_SEARCH_CONF DEFAULT use_syslog $SYSLOG |
| 228 | 229 |
iniset $GLANCE_SEARCH_CONF DEFAULT sql_connection $dburl |
| ... | ... |
@@ -138,6 +138,8 @@ Q_PORT_INT=${Q_PORT_INT:-19696}
|
| 138 | 138 |
Q_HOST=${Q_HOST:-$SERVICE_HOST}
|
| 139 | 139 |
# Default protocol |
| 140 | 140 |
Q_PROTOCOL=${Q_PROTOCOL:-$SERVICE_PROTOCOL}
|
| 141 |
+# Default listen address |
|
| 142 |
+Q_LISTEN_ADDRESS=${Q_LISTEN_ADDRESS:-$SERVICE_LISTEN_ADDRESS}
|
|
| 141 | 143 |
# Default admin username |
| 142 | 144 |
Q_ADMIN_USERNAME=${Q_ADMIN_USERNAME:-neutron}
|
| 143 | 145 |
# Default auth strategy |
| ... | ... |
@@ -871,6 +873,7 @@ function _configure_neutron_common {
|
| 871 | 871 |
iniset $NEUTRON_CONF database connection `database_connection_url $Q_DB_NAME` |
| 872 | 872 |
iniset $NEUTRON_CONF DEFAULT state_path $DATA_DIR/neutron |
| 873 | 873 |
iniset $NEUTRON_CONF DEFAULT use_syslog $SYSLOG |
| 874 |
+ iniset $NEUTRON_CONF DEFAULT bind_host $Q_LISTEN_ADDRESS |
|
| 874 | 875 |
# If addition config files are set, make sure their path name is set as well |
| 875 | 876 |
if [[ ${#Q_PLUGIN_EXTRA_CONF_FILES[@]} > 0 && $Q_PLUGIN_EXTRA_CONF_PATH == '' ]]; then
|
| 876 | 877 |
die $LINENO "Neutron additional plugin config not set.. exiting" |
| ... | ... |
@@ -85,6 +85,8 @@ NOVA_SERVICE_HOST=${NOVA_SERVICE_HOST:-$SERVICE_HOST}
|
| 85 | 85 |
NOVA_SERVICE_PORT=${NOVA_SERVICE_PORT:-8774}
|
| 86 | 86 |
NOVA_SERVICE_PORT_INT=${NOVA_SERVICE_PORT_INT:-18774}
|
| 87 | 87 |
NOVA_SERVICE_PROTOCOL=${NOVA_SERVICE_PROTOCOL:-$SERVICE_PROTOCOL}
|
| 88 |
+NOVA_SERVICE_LOCAL_HOST=${NOVA_SERVICE_LOCAL_HOST:-$SERVICE_LOCAL_HOST}
|
|
| 89 |
+NOVA_SERVICE_LISTEN_ADDRESS=${NOVA_SERVICE_LISTEN_ADDRESS:-$SERVICE_LISTEN_ADDRESS}
|
|
| 88 | 90 |
EC2_SERVICE_PORT=${EC2_SERVICE_PORT:-8773}
|
| 89 | 91 |
EC2_SERVICE_PORT_INT=${EC2_SERVICE_PORT_INT:-18773}
|
| 90 | 92 |
|
| ... | ... |
@@ -476,11 +478,20 @@ function create_nova_conf {
|
| 476 | 476 |
iniset $NOVA_CONF DEFAULT default_floating_pool "$PUBLIC_NETWORK_NAME" |
| 477 | 477 |
iniset $NOVA_CONF DEFAULT s3_host "$SERVICE_HOST" |
| 478 | 478 |
iniset $NOVA_CONF DEFAULT s3_port "$S3_SERVICE_PORT" |
| 479 |
- iniset $NOVA_CONF DEFAULT my_ip "$HOST_IP" |
|
| 479 |
+ if [[ $SERVICE_IP_VERSION == 6 ]]; then |
|
| 480 |
+ iniset $NOVA_CONF DEFAULT my_ip "$HOST_IPV6" |
|
| 481 |
+ iniset $NOVA_CONF DEFAULT use_ipv6 "True" |
|
| 482 |
+ else |
|
| 483 |
+ iniset $NOVA_CONF DEFAULT my_ip "$HOST_IP" |
|
| 484 |
+ fi |
|
| 480 | 485 |
iniset $NOVA_CONF database connection `database_connection_url nova` |
| 481 | 486 |
iniset $NOVA_CONF api_database connection `database_connection_url nova_api` |
| 482 | 487 |
iniset $NOVA_CONF DEFAULT instance_name_template "${INSTANCE_NAME_PREFIX}%08x"
|
| 483 | 488 |
iniset $NOVA_CONF osapi_v3 enabled "True" |
| 489 |
+ iniset $NOVA_CONF DEFAULT osapi_compute_listen "$NOVA_SERVICE_LISTEN_ADDRESS" |
|
| 490 |
+ iniset $NOVA_CONF DEFAULT ec2_listen "$NOVA_SERVICE_LISTEN_ADDRESS" |
|
| 491 |
+ iniset $NOVA_CONF DEFAULT metadata_listen "$NOVA_SERVICE_LISTEN_ADDRESS" |
|
| 492 |
+ iniset $NOVA_CONF DEFAULT s3_listen "$NOVA_SERVICE_LISTEN_ADDRESS" |
|
| 484 | 493 |
|
| 485 | 494 |
if is_fedora || is_suse; then |
| 486 | 495 |
# nova defaults to /usr/local/bin, but fedora and suse pip like to |
| ... | ... |
@@ -560,11 +571,13 @@ function create_nova_conf {
|
| 560 | 560 |
if is_service_enabled n-novnc || is_service_enabled n-xvnc || [ "$NOVA_VNC_ENABLED" != False ]; then |
| 561 | 561 |
# Address on which instance vncservers will listen on compute hosts. |
| 562 | 562 |
# For multi-host, this should be the management ip of the compute host. |
| 563 |
- VNCSERVER_LISTEN=${VNCSERVER_LISTEN=127.0.0.1}
|
|
| 564 |
- VNCSERVER_PROXYCLIENT_ADDRESS=${VNCSERVER_PROXYCLIENT_ADDRESS=127.0.0.1}
|
|
| 563 |
+ VNCSERVER_LISTEN=${VNCSERVER_LISTEN=$NOVA_SERVICE_LOCAL_HOST}
|
|
| 564 |
+ VNCSERVER_PROXYCLIENT_ADDRESS=${VNCSERVER_PROXYCLIENT_ADDRESS=$NOVA_SERVICE_LOCAL_HOST}
|
|
| 565 | 565 |
iniset $NOVA_CONF DEFAULT vnc_enabled true |
| 566 | 566 |
iniset $NOVA_CONF DEFAULT vncserver_listen "$VNCSERVER_LISTEN" |
| 567 | 567 |
iniset $NOVA_CONF DEFAULT vncserver_proxyclient_address "$VNCSERVER_PROXYCLIENT_ADDRESS" |
| 568 |
+ iniset $NOVA_CONF DEFAULT novncproxy_host "$NOVA_SERVICE_LISTEN_ADDRESS" |
|
| 569 |
+ iniset $NOVA_CONF DEFAULT xvpvncproxy_host "$NOVA_SERVICE_LISTEN_ADDRESS" |
|
| 568 | 570 |
else |
| 569 | 571 |
iniset $NOVA_CONF DEFAULT vnc_enabled false |
| 570 | 572 |
fi |
| ... | ... |
@@ -572,11 +585,12 @@ function create_nova_conf {
|
| 572 | 572 |
if is_service_enabled n-spice; then |
| 573 | 573 |
# Address on which instance spiceservers will listen on compute hosts. |
| 574 | 574 |
# For multi-host, this should be the management ip of the compute host. |
| 575 |
- SPICESERVER_PROXYCLIENT_ADDRESS=${SPICESERVER_PROXYCLIENT_ADDRESS=127.0.0.1}
|
|
| 576 |
- SPICESERVER_LISTEN=${SPICESERVER_LISTEN=127.0.0.1}
|
|
| 575 |
+ SPICESERVER_PROXYCLIENT_ADDRESS=${SPICESERVER_PROXYCLIENT_ADDRESS=$NOVA_SERVICE_LOCAL_HOST}
|
|
| 576 |
+ SPICESERVER_LISTEN=${SPICESERVER_LISTEN=$NOVA_SERVICE_LOCAL_HOST}
|
|
| 577 | 577 |
iniset $NOVA_CONF spice enabled true |
| 578 | 578 |
iniset $NOVA_CONF spice server_listen "$SPICESERVER_LISTEN" |
| 579 | 579 |
iniset $NOVA_CONF spice server_proxyclient_address "$SPICESERVER_PROXYCLIENT_ADDRESS" |
| 580 |
+ iniset $NOVA_CONF spice html5proxy_host "$NOVA_SERVICE_LISTEN_ADDRESS" |
|
| 580 | 581 |
else |
| 581 | 582 |
iniset $NOVA_CONF spice enabled false |
| 582 | 583 |
fi |
| ... | ... |
@@ -616,6 +630,7 @@ function create_nova_conf {
|
| 616 | 616 |
fi |
| 617 | 617 |
|
| 618 | 618 |
if is_service_enabled n-sproxy; then |
| 619 |
+ iniset $NOVA_CONF serial_console serialproxy_host "$NOVA_SERVICE_LISTEN_ADDRESS" |
|
| 619 | 620 |
iniset $NOVA_CONF serial_console enabled True |
| 620 | 621 |
fi |
| 621 | 622 |
} |
| ... | ... |
@@ -45,6 +45,7 @@ SWIFT3_DIR=$DEST/swift3 |
| 45 | 45 |
|
| 46 | 46 |
SWIFT_SERVICE_PROTOCOL=${SWIFT_SERVICE_PROTOCOL:-$SERVICE_PROTOCOL}
|
| 47 | 47 |
SWIFT_DEFAULT_BIND_PORT_INT=${SWIFT_DEFAULT_BIND_PORT_INT:-8081}
|
| 48 |
+SWIFT_SERVICE_LOCAL_HOST=${SWIFT_SERVICE_LOCAL_HOST:-$SERVICE_LOCAL_HOST}
|
|
| 48 | 49 |
|
| 49 | 50 |
# TODO: add logging to different location. |
| 50 | 51 |
|
| ... | ... |
@@ -668,9 +669,9 @@ function init_swift {
|
| 668 | 668 |
swift-ring-builder account.builder create ${SWIFT_PARTITION_POWER_SIZE} ${SWIFT_REPLICAS} 1
|
| 669 | 669 |
|
| 670 | 670 |
for node_number in ${SWIFT_REPLICAS_SEQ}; do
|
| 671 |
- swift-ring-builder object.builder add z${node_number}-127.0.0.1:$(( OBJECT_PORT_BASE + 10 * (node_number - 1) ))/sdb1 1
|
|
| 672 |
- swift-ring-builder container.builder add z${node_number}-127.0.0.1:$(( CONTAINER_PORT_BASE + 10 * (node_number - 1) ))/sdb1 1
|
|
| 673 |
- swift-ring-builder account.builder add z${node_number}-127.0.0.1:$(( ACCOUNT_PORT_BASE + 10 * (node_number - 1) ))/sdb1 1
|
|
| 671 |
+ swift-ring-builder object.builder add z${node_number}-${SWIFT_SERVICE_LOCAL_HOST}:$(( OBJECT_PORT_BASE + 10 * (node_number - 1) ))/sdb1 1
|
|
| 672 |
+ swift-ring-builder container.builder add z${node_number}-${SWIFT_SERVICE_LOCAL_HOST}:$(( CONTAINER_PORT_BASE + 10 * (node_number - 1) ))/sdb1 1
|
|
| 673 |
+ swift-ring-builder account.builder add z${node_number}-${SWIFT_SERVICE_LOCAL_HOST}:$(( ACCOUNT_PORT_BASE + 10 * (node_number - 1) ))/sdb1 1
|
|
| 674 | 674 |
done |
| 675 | 675 |
swift-ring-builder object.builder rebalance |
| 676 | 676 |
swift-ring-builder container.builder rebalance |
| ... | ... |
@@ -32,14 +32,15 @@ MYSQL_PASSWORD=stackdb |
| 32 | 32 |
RABBIT_PASSWORD=stackqueue |
| 33 | 33 |
SERVICE_PASSWORD=$ADMIN_PASSWORD |
| 34 | 34 |
|
| 35 |
-# ``HOST_IP`` should be set manually for best results if the NIC configuration |
|
| 36 |
-# of the host is unusual, i.e. ``eth1`` has the default route but ``eth0`` is the |
|
| 37 |
-# public interface. It is auto-detected in ``stack.sh`` but often is indeterminate |
|
| 38 |
-# on later runs due to the IP moving from an Ethernet interface to a bridge on |
|
| 39 |
-# the host. Setting it here also makes it available for ``openrc`` to include |
|
| 40 |
-# when setting ``OS_AUTH_URL``. |
|
| 41 |
-# ``HOST_IP`` is not set by default. |
|
| 35 |
+# ``HOST_IP`` and ``HOST_IPV6`` should be set manually for best results if |
|
| 36 |
+# the NIC configuration of the host is unusual, i.e. ``eth1`` has the default |
|
| 37 |
+# route but ``eth0`` is the public interface. They are auto-detected in |
|
| 38 |
+# ``stack.sh`` but often is indeterminate on later runs due to the IP moving |
|
| 39 |
+# from an Ethernet interface to a bridge on the host. Setting it here also |
|
| 40 |
+# makes it available for ``openrc`` to include when setting ``OS_AUTH_URL``. |
|
| 41 |
+# Neither is set by default. |
|
| 42 | 42 |
#HOST_IP=w.x.y.z |
| 43 |
+#HOST_IPV6=2001:db8::7 |
|
| 43 | 44 |
|
| 44 | 45 |
|
| 45 | 46 |
# Logging |
| ... | ... |
@@ -1403,7 +1403,10 @@ fi |
| 1403 | 1403 |
echo "" |
| 1404 | 1404 |
echo "" |
| 1405 | 1405 |
echo "" |
| 1406 |
-echo "This is your host ip: $HOST_IP" |
|
| 1406 |
+echo "This is your host IP address: $HOST_IP" |
|
| 1407 |
+if [ "$HOST_IPV6" != "" ]; then |
|
| 1408 |
+ echo "This is your host IPv6 address: $HOST_IPV6" |
|
| 1409 |
+fi |
|
| 1407 | 1410 |
|
| 1408 | 1411 |
# If you installed Horizon on this server you should be able |
| 1409 | 1412 |
# to access the site using your browser. |
| ... | ... |
@@ -669,14 +669,54 @@ FIXED_RANGE=${FIXED_RANGE:-10.0.0.0/24}
|
| 669 | 669 |
FIXED_NETWORK_SIZE=${FIXED_NETWORK_SIZE:-256}
|
| 670 | 670 |
HOST_IP_IFACE=${HOST_IP_IFACE:-}
|
| 671 | 671 |
HOST_IP=${HOST_IP:-}
|
| 672 |
+HOST_IPV6=${HOST_IPV6:-}
|
|
| 672 | 673 |
|
| 673 |
-HOST_IP=$(get_default_host_ip $FIXED_RANGE $FLOATING_RANGE "$HOST_IP_IFACE" "$HOST_IP") |
|
| 674 |
+HOST_IP=$(get_default_host_ip "$FIXED_RANGE" "$FLOATING_RANGE" "$HOST_IP_IFACE" "$HOST_IP" "inet") |
|
| 674 | 675 |
if [ "$HOST_IP" == "" ]; then |
| 675 | 676 |
die $LINENO "Could not determine host ip address. See local.conf for suggestions on setting HOST_IP." |
| 676 | 677 |
fi |
| 677 | 678 |
|
| 678 |
-# Allow the use of an alternate hostname (such as localhost/127.0.0.1) for service endpoints. |
|
| 679 |
-SERVICE_HOST=${SERVICE_HOST:-$HOST_IP}
|
|
| 679 |
+HOST_IPV6=$(get_default_host_ip "" "" "$HOST_IP_IFACE" "$HOST_IPV6" "inet6") |
|
| 680 |
+ |
|
| 681 |
+# SERVICE IP version |
|
| 682 |
+# This is the IP version that services should be listening on, as well |
|
| 683 |
+# as using to register their endpoints with keystone. |
|
| 684 |
+SERVICE_IP_VERSION=${SERVICE_IP_VERSION:-4}
|
|
| 685 |
+ |
|
| 686 |
+# Validate SERVICE_IP_VERSION |
|
| 687 |
+# It would be nice to support "4+6" here as well, but that will require |
|
| 688 |
+# multiple calls into keystone to register endpoints, so for now let's |
|
| 689 |
+# just support one or the other. |
|
| 690 |
+if [[ $SERVICE_IP_VERSION != "4" ]] && [[ $SERVICE_IP_VERSION != "6" ]]; then |
|
| 691 |
+ die $LINENO "SERVICE_IP_VERSION must be either 4 or 6" |
|
| 692 |
+fi |
|
| 693 |
+ |
|
| 694 |
+if [[ "$SERVICE_IP_VERSION" == 4 ]]; then |
|
| 695 |
+ DEF_SERVICE_HOST=$HOST_IP |
|
| 696 |
+ DEF_SERVICE_LOCAL_HOST=127.0.0.1 |
|
| 697 |
+ DEF_SERVICE_LISTEN_ADDRESS=0.0.0.0 |
|
| 698 |
+fi |
|
| 699 |
+ |
|
| 700 |
+if [[ "$SERVICE_IP_VERSION" == 6 ]]; then |
|
| 701 |
+ if [ "$HOST_IPV6" == "" ]; then |
|
| 702 |
+ die $LINENO "Could not determine host IPv6 address. See local.conf for suggestions on setting HOST_IPV6." |
|
| 703 |
+ fi |
|
| 704 |
+ |
|
| 705 |
+ DEF_SERVICE_HOST=[$HOST_IPV6] |
|
| 706 |
+ DEF_SERVICE_LOCAL_HOST=::1 |
|
| 707 |
+ DEF_SERVICE_LISTEN_ADDRESS=:: |
|
| 708 |
+fi |
|
| 709 |
+ |
|
| 710 |
+# This is either 0.0.0.0 for IPv4 or :: for IPv6 |
|
| 711 |
+SERVICE_LISTEN_ADDRESS=${SERVICE_LISTEN_ADDRESS:-${DEF_SERVICE_LISTEN_ADDRESS}}
|
|
| 712 |
+ |
|
| 713 |
+# Allow the use of an alternate hostname (such as localhost/127.0.0.1) for |
|
| 714 |
+# service endpoints. Default is dependent on SERVICE_IP_VERSION above. |
|
| 715 |
+SERVICE_HOST=${SERVICE_HOST:-${DEF_SERVICE_HOST}}
|
|
| 716 |
+# This is either 127.0.0.1 for IPv4 or ::1 for IPv6 |
|
| 717 |
+SERVICE_LOCAL_HOST=${SERVICE_LOCAL_HOST:-${DEF_SERVICE_LOCAL_HOST}}
|
|
| 718 |
+ |
|
| 719 |
+REGION_NAME=${REGION_NAME:-RegionOne}
|
|
| 680 | 720 |
|
| 681 | 721 |
# Configure services to use syslog instead of writing to individual log files |
| 682 | 722 |
SYSLOG=$(trueorfalse False SYSLOG) |