diff --git a/devstack/local.conf.node_1.sample b/devstack/local.conf.node_1.sample index 76b86605..b719732f 100644 --- a/devstack/local.conf.node_1.sample +++ b/devstack/local.conf.node_1.sample @@ -2,16 +2,17 @@ # Sample DevStack local.conf. # # This sample file is intended to be used for your typical Tricircle DevStack -# multi-node environment. As this file configures, DevStack will setup two -# regions, one top region running Tricircle services, Keystone, Glance, Nova -# API gateway, Cinder API gateway and Neutron with Tricircle plugin; and one -# bottom region running original Nova, Cinder and Neutron. +# multi-node environment. This file has the configuration values for DevStack +# to result in Central Neutron service and Tricircle Admin API service +# registered in CentralRegion, and local Neutron service and remaining +# services(e. g. Nova, Cinder, etc.) will be placed in RegionOne, but Keystone +# will be registered in RegionOne and is shared by services in all the +# regions. # # This file works with local.conf.node_2.sample to help you build a two-node -# three-region Tricircle environment. Keystone and Glance in top region are -# shared by services in all the regions. +# three-region Tricircle environment(Central Region, RegionOne and RegionTwo). # -# Some options needs to be change to adapt to your environment, see README.md +# Some options need to be changed to adapt to your environment, see README.rst # for detail. # @@ -22,61 +23,20 @@ RABBIT_PASSWORD=password SERVICE_PASSWORD=password SERVICE_TOKEN=password ADMIN_PASSWORD=password -LOGFILE=/opt/stack/logs/stack.sh.log -VERBOSE=True -LOG_COLOR=True -SCREEN_LOGDIR=/opt/stack/logs -FIXED_RANGE=10.0.0.0/24 -NETWORK_GATEWAY=10.0.0.1 -FIXED_NETWORK_SIZE=256 -FLOATING_RANGE=10.100.100.160/24 -Q_FLOATING_ALLOCATION_POOL=start=10.100.100.160,end=10.100.100.192 - -PUBLIC_NETWORK_GATEWAY=10.100.100.3 - -Q_USE_SECGROUP=False -LIBVIRT_FIREWALL_DRIVER=nova.virt.firewall.NoopFirewallDriver -NEUTRON_CREATE_INITIAL_NETWORKS=False -Q_USE_PROVIDERNET_FOR_PUBLIC=True HOST_IP=10.250.201.24 -Q_ML2_PLUGIN_VLAN_TYPE_OPTIONS=(network_vlan_ranges=bridge:2001:3000) -OVS_BRIDGE_MAPPINGS=bridge:br-bridge -Q_ENABLE_TRICIRCLE=True +Q_ML2_PLUGIN_VLAN_TYPE_OPTIONS=(network_vlan_ranges=bridge:2001:3000) +OVS_BRIDGE_MAPPINGS=bridge:br-vlan + +# Specify Central Region name +# CENTRAL_REGION_NAME=CentralRegion + +# Specify port for central Neutron server +# TRICIRCLE_NEUTRON_PORT=20001 + +TRICIRCLE_START_SERVICES=True enable_plugin tricircle https://github.com/openstack/tricircle/ -# Use Neutron instead of nova-network -disable_service n-net -enable_service q-svc -enable_service q-dhcp -enable_service q-agt -enable_service q-l3 - -enable_service c-api -enable_service c-vol -enable_service c-sch - -disable_service n-obj -disable_service c-bak disable_service tempest disable_service horizon - -CENTRAL_REGION_NAME=CentralRegion -TRICIRCLE_NEUTRON_PORT=20001 - -[[post-config|$NEUTRON_CONF]] - -[DEFAULT] -core_plugin=tricircle.network.local_plugin.TricirclePlugin - -[client] -admin_username=admin -admin_password=$ADMIN_PASSWORD -admin_tenant=demo -auto_refresh_endpoint=True -top_region_name=$CENTRAL_REGION_NAME - -[tricircle] -real_core_plugin=neutron.plugins.ml2.plugin.Ml2Plugin -central_neutron_url=http://127.0.0.1:$TRICIRCLE_NEUTRON_PORT diff --git a/devstack/local.conf.node_2.sample b/devstack/local.conf.node_2.sample index 50826876..075e1aa8 100644 --- a/devstack/local.conf.node_2.sample +++ b/devstack/local.conf.node_2.sample @@ -2,14 +2,16 @@ # Sample DevStack local.conf. # # This sample file is intended to be used for your typical Tricircle DevStack -# multi-node environment. As this file configures, DevStack will setup one -# bottom region running original Nova, Cinder and Neutron. +# multi-node environment. As this file has configuration values for DevStack +# to result in RegionTwo running original Nova, Cinder and Neutron, and +# the local Neutron will be configured with Tricircle Local Neutron Plugin +# to work with central Neutron with Tricircle Central Neutron Plugin. # # This file works with local.conf.node_1.sample to help you build a two-node -# three-region Tricircle environment. Keystone and Glance in top region are -# shared by services in all the regions. +# three-region environment(CentralRegion, RegionOne and RegionTwo). Keystone in +# RegionOne is shared by services in all the regions. # -# Some options needs to be change to adapt to your environment, see README.md +# Some options need to be changed to adapt to your environment, see README.rst # for detail. # @@ -20,22 +22,6 @@ RABBIT_PASSWORD=password SERVICE_PASSWORD=password SERVICE_TOKEN=password ADMIN_PASSWORD=password -LOGFILE=/opt/stack/logs/stack.sh.log -VERBOSE=True -LOG_COLOR=True -SCREEN_LOGDIR=/opt/stack/logs -FIXED_RANGE=10.0.0.0/24 -NETWORK_GATEWAY=10.0.0.1 -FIXED_NETWORK_SIZE=256 -FLOATING_RANGE=10.100.100.160/24 -Q_FLOATING_ALLOCATION_POOL=start=10.100.100.160,end=10.100.100.192 - -PUBLIC_NETWORK_GATEWAY=10.100.100.3 - -Q_USE_SECGROUP=False -LIBVIRT_FIREWALL_DRIVER=nova.virt.firewall.NoopFirewallDriver -NEUTRON_CREATE_INITIAL_NETWORKS=False -Q_USE_PROVIDERNET_FOR_PUBLIC=True HOST_IP=10.250.201.25 REGION_NAME=RegionTwo @@ -45,41 +31,16 @@ KEYSTONE_SERVICE_HOST=10.250.201.24 KEYSTONE_AUTH_HOST=10.250.201.24 Q_ML2_PLUGIN_VLAN_TYPE_OPTIONS=(network_vlan_ranges=bridge:2001:3000,extern:3001:4000) -OVS_BRIDGE_MAPPINGS=bridge:br-bridge,extern:br-ext +OVS_BRIDGE_MAPPINGS=bridge:br-vlan,extern:br-ext -# Use Neutron instead of nova-network -disable_service n-net -enable_service q-svc -enable_service q-dhcp -enable_service q-agt -enable_service q-l3 +# Specify Central Region name +# CENTRAL_REGION_NAME=CentralRegion -enable_service c-api -enable_service c-vol -enable_service c-sch +# Specify port for central Neutron server +# TRICIRCLE_NEUTRON_PORT=20001 + +TRICIRCLE_START_SERVICES=False +enable_plugin tricircle https://github.com/openstack/tricircle/ -disable_service n-obj -disable_service c-bak disable_service tempest disable_service horizon - -CENTRAL_REGION_NAME=CentralRegion -TRICIRCLE_NEUTRON_PORT=20001 - -[[post-config|$NEUTRON_CONF]] - -[DEFAULT] -core_plugin=tricircle.network.local_plugin.TricirclePlugin -service_plugins=tricircle.network.local_l3_plugin.TricircleL3Plugin - -[client] -admin_username=admin -admin_password=$ADMIN_PASSWORD -admin_tenant=demo -auto_refresh_endpoint=True -top_region_name=$CENTRAL_REGION_NAME - -[tricircle] -real_core_plugin=neutron.plugins.ml2.plugin.Ml2Plugin -# change the ip to the ip of the machine hosting central Neutron server -central_neutron_url=http://10.250.201.24:$TRICIRCLE_NEUTRON_PORT diff --git a/devstack/plugin.sh b/devstack/plugin.sh index 5c6deb0b..bb65f9ca 100644 --- a/devstack/plugin.sh +++ b/devstack/plugin.sh @@ -54,6 +54,59 @@ function init_common_tricircle_conf { iniset $conf_file oslo_concurrency lock_path $TRICIRCLE_STATE_PATH/lock } +# common config-file configuration for local Neutron(s) +function init_local_neutron_conf { + + iniset $NEUTRON_CONF DEFAULT core_plugin tricircle.network.local_plugin.TricirclePlugin + iniset $NEUTRON_CONF DEFAULT service_plugins tricircle.network.local_l3_plugin.TricircleL3Plugin + + iniset $NEUTRON_CONF client admin_username admin + iniset $NEUTRON_CONF client admin_password $ADMIN_PASSWORD + iniset $NEUTRON_CONF client admin_tenant demo + iniset $NEUTRON_CONF client auto_refresh_endpoint True + iniset $NEUTRON_CONF client top_pod_name $CENTRAL_REGION_NAME + + iniset $NEUTRON_CONF tricircle real_core_plugin neutron.plugins.ml2.plugin.Ml2Plugin + iniset $NEUTRON_CONF tricircle central_neutron_url http://$KEYSTONE_SERVICE_HOST:$TRICIRCLE_NEUTRON_PORT +} + +# Set the environment variables for local Neutron(s) +function init_local_neutron_variables { + + export Q_USE_PROVIDERNET_FOR_PUBLIC=True + + Q_ML2_PLUGIN_VLAN_TYPE_OPTIONS=${Q_ML2_PLUGIN_VLAN_TYPE_OPTIONS:-} + # if VLAN options were not set in local.conf, use default VLAN bridge + # and VLAN options + if [ "$Q_ML2_PLUGIN_VLAN_TYPE_OPTIONS" == "" ]; then + + export TRICIRCLE_ADD_DEFAULT_BRIDGES=True + + local vlan_option="bridge:$TRICIRCLE_DEFAULT_VLAN_RANGE" + local ext_option="extern:$TRICIRCLE_DEFAULT_EXT_RANGE" + local vlan_ranges=(network_vlan_ranges=$vlan_option) + if [ "$TRICIRCLE_START_SERVICES" == "False" ]; then + vlan_ranges=(network_vlan_ranges=$vlan_option,$ext_option) + fi + Q_ML2_PLUGIN_VLAN_TYPE_OPTIONS=$vlan_ranges + + local vlan_mapping="bridge:$TRICIRCLE_DEFAULT_VLAN_BRIDGE" + local ext_mapping="extern:$TRICIRCLE_DEFAULT_EXT_BRIDGE" + OVS_BRIDGE_MAPPINGS=$vlan_mapping + if [ "$TRICIRCLE_START_SERVICES" == "False" ]; then + OVS_BRIDGE_MAPPINGS=$vlan_mapping,$ext_mapping + fi + fi +} + +function add_default_bridges { + + if [ "$TRICIRCLE_ADD_DEFAULT_BRIDGES" == "True" ]; then + _neutron_ovs_base_add_bridge $TRICIRCLE_DEFAULT_VLAN_BRIDGE + _neutron_ovs_base_add_bridge $TRICIRCLE_DEFAULT_EXT_BRIDGE + fi +} + function configure_tricircle_api { if is_service_enabled t-api ; then @@ -132,61 +185,77 @@ function start_central_neutron_server { run_process q-svc$server_index "$NEUTRON_BIN_DIR/neutron-server --config-file $NEUTRON_CONF.$server_index --config-file /$Q_PLUGIN_CONF_FILE" } +# if the plugin is enabled to run, that means the Tricircle is enabled +# by default, so no need to judge the variable Q_ENABLE_TRICIRCLE -if [[ "$Q_ENABLE_TRICIRCLE" == "True" ]]; then - if [[ "$1" == "stack" && "$2" == "pre-install" ]]; then - echo summary "Tricircle pre-install" - elif [[ "$1" == "stack" && "$2" == "install" ]]; then - echo_summary "Installing Tricircle" - elif [[ "$1" == "stack" && "$2" == "post-config" ]]; then - echo_summary "Configuring Tricircle" - export NEUTRON_CREATE_INITIAL_NETWORKS=False - sudo install -d -o $STACK_USER -m 755 $TRICIRCLE_CONF_DIR +if [[ "$1" == "stack" && "$2" == "pre-install" ]]; then + echo_summary "Tricircle pre-install" + # init_local_neutron_variables before installation + init_local_neutron_variables + +elif [[ "$1" == "stack" && "$2" == "install" ]]; then + echo_summary "Installing Tricircle" +elif [[ "$1" == "stack" && "$2" == "post-config" ]]; then + + echo_summary "Configuring Tricircle" + export NEUTRON_CREATE_INITIAL_NETWORKS=False + sudo install -d -o $STACK_USER -m 755 $TRICIRCLE_CONF_DIR + + if [[ "$TRICIRCLE_START_SERVICES" == "True" ]]; then enable_service t-api t-job - configure_tricircle_api configure_tricircle_xjob + fi - echo export PYTHONPATH=\$PYTHONPATH:$TRICIRCLE_DIR >> $RC_DIR/.localrc.auto + echo export PYTHONPATH=\$PYTHONPATH:$TRICIRCLE_DIR >> $RC_DIR/.localrc.auto - setup_package $TRICIRCLE_DIR -e + setup_package $TRICIRCLE_DIR -e + if [[ "$TRICIRCLE_START_SERVICES" == "True" ]]; then recreate_database tricircle tricircle-db-manage "$TRICIRCLE_API_CONF" if is_service_enabled q-svc ; then start_central_neutron_server $CENTRAL_REGION_NAME $TRICIRCLE_NEUTRON_PORT fi - - elif [[ "$1" == "stack" && "$2" == "extra" ]]; then - echo_summary "Initializing Tricircle Service" - - if is_service_enabled t-api; then - - create_tricircle_accounts - - run_process t-api "tricircle-api --config-file $TRICIRCLE_API_CONF" - fi - - if is_service_enabled t-job; then - - run_process t-job "tricircle-xjob --config-file $TRICIRCLE_XJOB_CONF" - fi fi - if [[ "$1" == "unstack" ]]; then + # update the local neutron.conf after the central Neutron has started + init_local_neutron_conf - if is_service_enabled t-api; then - stop_process t-api - fi + # add default bridges br-vlan, br-ext if needed, ovs-vsctl + # is just being installed before this stage + add_default_bridges - if is_service_enabled t-job; then - stop_process t-job - fi +elif [[ "$1" == "stack" && "$2" == "extra" ]]; then + echo_summary "Initializing Tricircle Service" - if is_service_enabled q-svc0; then - stop_process q-svc0 - fi + if is_service_enabled t-api; then + + create_tricircle_accounts + + run_process t-api "tricircle-api --config-file $TRICIRCLE_API_CONF" + + fi + + if is_service_enabled t-job; then + + run_process t-job "tricircle-xjob --config-file $TRICIRCLE_XJOB_CONF" + fi +fi + +if [[ "$1" == "unstack" ]]; then + + if is_service_enabled t-api; then + stop_process t-api + fi + + if is_service_enabled t-job; then + stop_process t-job + fi + + if is_service_enabled q-svc0; then + stop_process q-svc0 fi fi diff --git a/devstack/settings b/devstack/settings index cbdec2ca..305f5b97 100644 --- a/devstack/settings +++ b/devstack/settings @@ -6,6 +6,15 @@ TRICIRCLE_BRANCH=${TRICIRCLE_BRANCH:-master} # common variables CENTRAL_REGION_NAME=${CENTRAL_REGION_NAME:-CentralRegion} TRICIRCLE_NEUTRON_PORT=${TRICIRCLE_NEUTRON_PORT:-20001} +TRICIRCLE_START_SERVICES=${TRICIRCLE_START_SERVICES:-True} + +# these default settings are used for devstack based gate/check jobs +TRICIRCLE_DEFAULT_VLAN_BRIDGE=${TRICIRCLE_DEFAULT_VLAN_BRIDGE:-br-vlan} +TRICIRCLE_DEFAULT_VLAN_RANGE=${TRICIRCLE_DEFAULT_VLAN_RANGE:-101:150} +TRICIRCLE_DEFAULT_EXT_BRIDGE=${TRICIRCLE_DEFAULT_EXT_BRIDGE:-br-ext} +TRICIRCLE_DEFAULT_EXT_RANGE=${TRICIRCLE_DEFAULT_EXT_RANGE:-151:200} +TRICIRCLE_ADD_DEFAULT_BRIDGES=${TRICIRCLE_ADD_DEFAULT_BRIDGES:-False} + TRICIRCLE_CONF_DIR=${TRICIRCLE_CONF_DIR:-/etc/tricircle} TRICIRCLE_STATE_PATH=${TRICIRCLE_STATE_PATH:-/var/lib/tricircle} diff --git a/doc/source/multi-pod-installation-devstack.rst b/doc/source/multi-pod-installation-devstack.rst index f30aa7d4..e5949fed 100644 --- a/doc/source/multi-pod-installation-devstack.rst +++ b/doc/source/multi-pod-installation-devstack.rst @@ -83,7 +83,8 @@ for installing DevStack in virtual machine. Setup ^^^^^ -In pod1 in node1, +In pod1 in node1 for Tricircle service, central Neutron and OpenStack +RegionOne, - 1 Install DevStack. Please refer to `DevStack document `_ @@ -108,22 +109,22 @@ In pod1 in node1, Q_ML2_PLUGIN_VLAN_TYPE_OPTIONS=(network_vlan_ranges=bridge:2001:3000) - the format of OVS_BRIDGE_MAPPINGS is :, - you can change these names, but remember to adapt your change to the commands - showed in this guide:: + you can change these names, but remember to adapt your change to the + commands showed in this guide:: - OVS_BRIDGE_MAPPINGS=bridge:br-bridge + OVS_BRIDGE_MAPPINGS=bridge:br-vlan - - set Q_USE_PROVIDERNET_FOR_PUBLIC to True(it's False by default) if you would - like to try l3 north-south networking:: + - set TRICIRCLE_START_SERVICES to True to install the Tricircle service and + central Neutron in node1:: - Q_USE_PROVIDERNET_FOR_PUBLIC=True + TRICIRCLE_START_SERVICES=True - 4 Create OVS bridge and attach the VLAN network interface to it :: - sudo ovs-vsctl add-br br-bridge - sudo ovs-vsctl add-port br-bridge eth1 + sudo ovs-vsctl add-br br-vlan + sudo ovs-vsctl add-port br-vlan eth1 - br-bridge is the OVS bridge name you configure on OVS_PHYSICAL_BRIDGE, eth1 is + br-vlan is the OVS bridge name you configure on OVS_PHYSICAL_BRIDGE, eth1 is the device name of your VLAN network interface - 5 Run DevStack. In DevStack folder, run :: @@ -132,7 +133,7 @@ In pod1 in node1, - 6 After DevStack successfully starts, begin to setup node2. -In pod2 in node2, +In pod2 in node2 for OpenStack RegionTwo, - 1 Install DevStack. Please refer to `DevStack document `_ @@ -168,16 +169,12 @@ In pod2 in node2, you can change these names, but remember to adapt your change to the commands showed in this guide:: - OVS_BRIDGE_MAPPINGS=bridge:br-bridge,extern:br-ext + OVS_BRIDGE_MAPPINGS=bridge:br-vlan,extern:br-ext - - set Q_USE_PROVIDERNET_FOR_PUBLIC to True(it's False by default) if you would - like to try l3 north-south networking:: + - set TRICIRCLE_START_SERVICES to False(it's True by default) so Tricircle + services and central Neutron will not be started in node2:: - Q_USE_PROVIDERNET_FOR_PUBLIC=True - - - change the ip in central_neutron_url to management interface ip of node1:: - - central_neutron_url=http://10.250.201.24:$TRICIRCLE_NEUTRON_PORT + TRICIRCLE_START_SERVICES=False In this guide, we define two physical networks in node2, one is "bridge" for bridge network, the other one is "extern" for external network. If you do not @@ -188,29 +185,20 @@ In pod2 in node2, - 4 Create OVS bridge and attach the VLAN network interface to it :: - sudo ovs-vsctl add-br br-bridge - sudo ovs-vsctl add-port br-bridge eth1 + sudo ovs-vsctl add-br br-vlan + sudo ovs-vsctl add-port br-vlan eth1 sudo ovs-vsctl add-br br-ext sudo ovs-vsctl add-port br-ext eth2 - br-bridge and br-ext are the OVS bridge names you configure on + br-vlan and br-ext are the OVS bridge names you configure on OVS_PHYSICAL_BRIDGE, eth1 and eth2 are the device names of your VLAN network interfaces, for the "bridge" network and the external network. -- 5 In /opt/stack folder (create this folder if it does not exist), then run :: - - git clone https://github.com/openstack/tricircle - -- 6 After the Tricircle source code is cloned, install Tricircle manually :: - - cd tricircle/ - sudo pip install -e . - -- 7 Run DevStack. In DevStack folder, run :: +- 5 Run DevStack. In DevStack folder, run :: ./stack.sh -- 8 After DevStack successfully starts, the setup is finished. +- 6 After DevStack successfully starts, the setup is finished. How to play ^^^^^^^^^^^