本来想自己搭一个openstack玩玩vpnaas,可devstack里vpnaas已经在M版本被移除了,具体如下
commit 1d4303db4e1f194dd4c2284f6dd4189f41f8d2f3
Merge: 3e5b495 95cb2ea
Author: Jenkins
Date: Wed May 11 03:16:22 2016 +0000
Merge "Remove vpnaas code from devstack" into stable/mitaka
commit 95cb2ea68f7e12a3e7baf627a2c37e77caeea294
Author: Ihar Hrachyshka
Date: Thu Apr 28 12:39:26 2016 -0700
Remove vpnaas code from devstack
This service is now configured by devstack plugin in master.
Change-Id: Ie5fc0d2a45c1b564f98c69ec9ea6fbdeeb465d32
(cherry picked from commit 1a791cbc449a3cfdbc3d3b94c6cda3ddefa17af4)
用最新的P版本折腾了会,vpnaas作为plugin还是没搞明白如何搭建,于是直接搭一个Liberty版本,带VPNaaS的玩耍下,没想到这么折腾,记录一下心酸旅程
1:环境
我这里用ubuntu14.04都部署成功了,centos6.6中途卡主,暂未解决,debian7.9安装部署完最后ovs-agent不明原因起不来;添加一个普通用户,添加sudo权限,设置sudo不需要密码
2:devstack下载
git clone https://github.com/openstack-dev/devstack.git -b liberty-eol
3:修改源,分支
这里改成douban源,但是最好/root/.pip/pip.conf和/home/$user/.pip/pip.conf都添加配置
[global] trusted-host=pypi.douban.com index-url = http://pypi.douban.com/simple
devstack下载的是L版,但是stack.sh里会重新从github上下nova,cinder等模块,默认是从发最新master上下!!!!!因此需要修改相关配置,具体可github上查看相关分支,也都是在tag里,操作如下
sed -i "s/stable\/liberty/liberty-eol/g" lib/ironic sed -i "s/stable\/liberty/liberty-eol/g" stackrc sed -i "s/stable\/liberty/liberty-eol/g" tests/test_refs.sh
将stable/liberty都替换成liberty-eol
lihui@l-openstack:~/devstack$ grep liberty-eol ./* -R
./lib/ironic:IPA_DOWNLOAD_BRANCH=${IPA_DOWNLOAD_BRANCH:-liberty-eol}
./stackrc:CINDER_BRANCH=${CINDER_BRANCH:-liberty-eol}
./stackrc:GLANCE_BRANCH=${GLANCE_BRANCH:-liberty-eol}
./stackrc:HEAT_BRANCH=${HEAT_BRANCH:-liberty-eol}
./stackrc:HORIZON_BRANCH=${HORIZON_BRANCH:-liberty-eol}
./stackrc:IRONIC_BRANCH=${IRONIC_BRANCH:-liberty-eol}
./stackrc:KEYSTONE_BRANCH=${KEYSTONE_BRANCH:-liberty-eol}
./stackrc:NEUTRON_BRANCH=${NEUTRON_BRANCH:-liberty-eol}
./stackrc:NEUTRON_FWAAS_BRANCH=${NEUTRON_FWAAS_BRANCH:-liberty-eol}
./stackrc:NEUTRON_LBAAS_BRANCH=${NEUTRON_LBAAS_BRANCH:-liberty-eol}
./stackrc:NEUTRON_VPNAAS_BRANCH=${NEUTRON_VPNAAS_BRANCH:-liberty-eol}
./stackrc:NOVA_BRANCH=${NOVA_BRANCH:-liberty-eol}
./stackrc:SWIFT_BRANCH=${SWIFT_BRANCH:-liberty-eol}
./stackrc:REQUIREMENTS_BRANCH=${REQUIREMENTS_BRANCH:-liberty-eol}
./tests/test_refs.sh:REFS=`grep BRANCH stackrc | grep -v -- '-master' | grep -v -- '-liberty-eol'`
4:注释掉tempest相关
tempest因为并没有老的分支,版本较新,安装过程中问题较多,注释掉;修改stackrc里
# This allows us to pass ``ENABLED_SERVICES``
if ! isset ENABLED_SERVICES ; then
# Keystone - nothing works without keystone
ENABLED_SERVICES=key
# Nova - services to support libvirt based openstack clouds
ENABLED_SERVICES+=,n-api,n-cpu,n-net,n-cond,n-sch,n-novnc,n-crt,n-cauth
# Glance services needed for Nova
ENABLED_SERVICES+=,g-api,g-reg
# Cinder
ENABLED_SERVICES+=,c-sch,c-api,c-vol
# Dashboard
ENABLED_SERVICES+=,horizon
# Additional services
ENABLED_SERVICES+=,rabbit,mysql,dstat
#ENABLED_SERVICES+=,rabbit,tempest,mysql,dstat
fi
5:修改集中式为分部署dvr,lib/neutron-legacy里修改为dvr_snat
# Distributed Virtual Router (DVR) configuration
# Can be:
# - ``legacy`` - No DVR functionality
# - ``dvr_snat`` - Controller or single node DVR
# - ``dvr`` - Compute node in multi-node DVR
#
Q_DVR_MODE=${Q_DVR_MODE:-dvr_snat}
if [[ "$Q_DVR_MODE" != "legacy" ]]; then
Q_ML2_PLUGIN_MECHANISM_DRIVERS=openvswitch,linuxbridge,l2population
fi
ubuntu的,经过这几步修改,只要网络不太烂,应该就可以搭建成功
6:debian操作系统有一个问题,关于tgt
在lib/cinder里start_cinder函数里,有一段:
if [ "$CINDER_ISCSI_HELPER" = "tgtadm" ]; then
if is_service_enabled c-vol; then
# Delete any old stack.conf
sudo rm -f /etc/tgt/conf.d/stack.conf
_configure_tgt_for_config_d
if is_ubuntu; then
sudo service tgt restart
elif is_suse; then
# NOTE(dmllr): workaround restart bug
# https://bugzilla.suse.com/show_bug.cgi?id=934642
stop_service tgtd
start_service tgtd
else
restart_service tgtd
fi
# NOTE(gfidente): ensure tgtd is running in debug mode
sudo tgtadm --mode system --op update --name debug --value on
fi
fi
这里is_ubuntu为真,但是service执行tgt的时候报错;原因是debian操作系统并没有生成一个tgt命名的开机启动脚本,具体来说就是/etc/init.d里没有tgt,而ubuntu里是有的;但是具体tgtd可执行程序是有的(真奇葩的命名!tgtd是可执行程序,tgt是开机服务)这里有两种方法解决:
(1)修改lib/cinder里所有start,stop,restart tgtd的命令,直接执行可执行程序,而不是开机启动服务,但是需要修改的地方较多
(2)直接添加一个开机服务脚本tgt,一劳永逸,也可以直接从ubuntu copy,如下
#!/bin/bash
### BEGIN INIT INFO
# Provides: tgtd
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Should-Start: zfs
# Should-Stop: zfs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: iscsi target daemon
# Description: iscsi target daemon
### END INIT INFO
DESC="target framework daemon"
NAME=tgtd
DAEMON=/usr/sbin/${NAME}
TGTD_CONFIG=/etc/tgt/targets.conf
TASK=$1
. /lib/lsb/init-functions
[ -x $DAEMON ] || exit 0
start()
{
log_daemon_msg "Starting $DESC" "$NAME"
# Start tgtd first.
tgtd &>/dev/null
RETVAL=$?
if [ "$RETVAL" -ne 0 ] ; then
log_end_msg 1
exit 1
else
log_end_msg 0
fi
# Put tgtd into "offline" state until all the targets are configured.
# We don't want initiators to (re)connect and fail the connection
# if it's not ready.
tgtadm --op update --mode sys --name State -v offline
# Configure the targets.
tgt-admin -e -c $TGTD_CONFIG
# Put tgtd into "ready" state.
tgtadm --op update --mode sys --name State -v ready
}
stop()
{
if [ "$RUNLEVEL" == 0 -o "$RUNLEVEL" == 6 ] ; then
forcedstop
fi
log_daemon_msg "Stopping $DESC" "$NAME"
# Remove all targets. It only removes targets which are not in use.
tgt-admin --update ALL -c /dev/null &>/dev/null
# tgtd will exit if all targets were removed
tgtadm --op delete --mode system &>/dev/null
RETVAL=$?
if [ "$RETVAL" -eq 107 ] ; then
if [ "$TASK" != "restart" ] ; then
log_end_msg 1
exit 1
else
log_end_msg 0
fi
elif [ "$RETVAL" -ne 0 ] ; then
log_end_msg 1
echo "Some initiators are still connected - could not stop tgtd"
exit 2
else
log_end_msg 0
fi
echo -n
}
forcedstop()
{
# NOTE: Forced shutdown of the iscsi target may cause data corruption
# for initiators that are connected.
echo "Force-stopping target framework daemon"
# Offline everything first. May be needed if we're rebooting, but
# expect the initiators to reconnect cleanly when we boot again
# (i.e. we don't want them to reconnect to a tgtd which is still
# working, but the target is gone).
tgtadm --op update --mode sys --name State -v offline &>/dev/null
RETVAL=$?
if [ "$RETVAL" -eq 107 ] ; then
echo "tgtd is not running"
[ "$TASK" != "restart" ] && exit 1
else
tgt-admin --offline ALL
# Remove all targets, even if they are still in use.
tgt-admin --update ALL -c /dev/null -f
# It will shut down tgtd only after all targets were removed.
tgtadm --op delete --mode system
RETVAL=$?
if [ "$RETVAL" -ne 0 ] ; then
echo "Failed to shutdown tgtd"
exit 1
fi
fi
echo -n
}
reload()
{
log_daemon_msg "Reloading configuration of $DESC" "$NAME"
# Update configuration for targets. Only targets which
# are not in use will be updated.
tgt-admin --update ALL -c $TGTD_CONFIG &>/dev/null
RETVAL=$?
if [ "$RETVAL" -eq 107 ] ; then
log_end_msg 1
echo "tgtd is not running"
exit 1
fi
log_end_msg 0
}
forcedreload()
{
log_daemon_msg "Forced-reload configuration of $DESC" "$NAME"
# Update configuration for targets, even those in use.
tgt-admin --update ALL -f -c $TGTD_CONFIG &>/dev/null
RETVAL=$?
if [ "$RETVAL" -eq 107 ] ; then
log_end_msg 1
echo "tgtd is not running"
exit 1
else
log_end_msg 0
fi
}
status()
{
# Don't name this script "tgtd"...
TGTD_PROC=$(ps -C tgtd | grep -c tgtd)
if [ "$TGTD_PROC" -eq 2 ] ; then
echo "tgtd is running. Run 'tgt-admin -s' to see detailed target info."
else
echo "tgtd is NOT running."
fi
}
case $1 in
start)
start
;;
stop)
stop
;;
forcedstop)
forcedstop
;;
restart)
TASK=restart
stop && start
;;
forcedrestart)
TASK=restart
forcedstop && start
;;
reload)
reload
;;
force-reload)
forcedreload
;;
status)
status
;;
*)
echo "Usage: $0 {start|stop|forcedstop|restart|forcedrestart|reload|force-reload|status}"
exit 2
;;
esac
到了这里,我以为大功告成了,测试过程中又发现两问题,一个是neutron居然都没有安装,另一个是所有的client全部都是装的master,不知道会不会有不匹配的,一个一个来解决
7:neutron安装
首先install_neutron在lib/neutron-legacy里,然后必须要先enable neutron service才行
if is_service_enabled neutron; then
install_neutron_agent_packages
fi
查看stackrc配置,可以看到如下说明
# In order to enable Neutron (a single node setup) add the following # settings in ``local.conf``: # [[local|localrc]] # disable_service n-net # enable_service q-svc # enable_service q-agt # enable_service q-dhcp # enable_service q-l3 # enable_service q-meta # # Optional, to enable tempest configuration as part of DevStack # enable_service tempest
按要求添加到local.conf里,然后看下is_service_enabled函数,实现如下
# Uses global ``ENABLED_SERVICES``
# is_service_enabled service [service ...]
function is_service_enabled {
local xtrace=$(set +o | grep xtrace)
set +o xtrace
local enabled=1
local services=$@
local service
for service in ${services}; do
[[ ,${ENABLED_SERVICES}, =~ ,${service}, ]] && enabled=0
# Look for top-level 'enabled' function for this service
if type is_${service}_enabled >/dev/null 2>&1; then
# A function exists for this service, use it
is_${service}_enabled && enabled=0
fi
# TODO(dtroyer): Remove these legacy special-cases after the is_XXX_enabled()
# are implemented
[[ ${service} == n-cell-* && ${ENABLED_SERVICES} =~ "n-cell" ]] && enabled=0
[[ ${service} == n-cpu-* && ${ENABLED_SERVICES} =~ "n-cpu" ]] && enabled=0
[[ ${service} == "nova" && ${ENABLED_SERVICES} =~ "n-" ]] && enabled=0
[[ ${service} == "glance" && ${ENABLED_SERVICES} =~ "g-" ]] && enabled=0
[[ ${service} == "ironic" && ${ENABLED_SERVICES} =~ "ir-" ]] && enabled=0
[[ ${service} == "neutron" && ${ENABLED_SERVICES} =~ "q-" ]] && enabled=0
[[ ${service} == "trove" && ${ENABLED_SERVICES} =~ "tr-" ]] && enabled=0
[[ ${service} == "swift" && ${ENABLED_SERVICES} =~ "s-" ]] && enabled=0
[[ ${service} == s-* && ${ENABLED_SERVICES} =~ "swift" ]] && enabled=0
done
$xtrace
return $enabled
}
根据注释可以知道ENABLED_SERVICES是一个全局变量,从其它地方赋值
继续在stackrc里,可以找到初始化的地方,也是通过配置来实现,添加neutron的服务
# This allows us to pass ``ENABLED_SERVICES``
if ! isset ENABLED_SERVICES ; then
# Keystone - nothing works without keystone
ENABLED_SERVICES=key
# Nova - services to support libvirt based openstack clouds
ENABLED_SERVICES+=,n-api,n-cpu,n-net,n-cond,n-sch,n-novnc,n-crt,n-cauth
# Glance services needed for Nova
ENABLED_SERVICES+=,g-api,g-reg
# Cinder
ENABLED_SERVICES+=,c-sch,c-api,c-vol
# Neutron
ENABLED_SERVICES+=,q-svc,q-agt,q-dhcp,q-l3,q-meta
# Dashboard
ENABLED_SERVICES+=,horizon
# Additional services
ENABLED_SERVICES+=,rabbit,mysql,dstat
#ENABLED_SERVICES+=,rabbit,tempest,mysql,dstat
fi
修改了这些地方之后,再执行以下stack.sh看看,终于看到了下面的流程,基本放心了
+ git_clone git://git.openstack.org/openstack/neutron.git /opt/stack/neutron liberty-eol + local git_remote=git://git.openstack.org/openstack/neutron.git + local git_dest=/opt/stack/neutron + local git_ref=liberty-eol ++ pwd + local orig_dir=/home/lihui/devstack + local git_clone_flags= ++ trueorfalse False RECLONE +++ set +o +++ grep xtrace ++ local 'xtrace=set -o xtrace' ++ set +o xtrace + RECLONE=False + [[ 0 -gt 0 ]] + [[ False = \T\r\u\e ]] + echo liberty-eol + egrep -q '^refs' + [[ ! -d /opt/stack/neutron ]] + [[ False = \T\r\u\e ]] + git_timed clone git://git.openstack.org/openstack/neutron.git /opt/stack/neutron + local count=0 + local timeout=0 + [[ -n 0 ]] + timeout=0 + timeout -s SIGINT 0 git clone git://git.openstack.org/openstack/neutron.git /opt/stack/neutron Cloning into '/opt/stack/neutron'... remote: Counting objects: 241428, done. remote: Compressing objects: 100% (114676/114676), done. remote: Total 241428 (delta 177278), reused 167196 (delta 106821) Receiving objects: 100% (241428/241428), 62.18 MiB | 9.49 MiB/s, done. Resolving deltas: 100% (177278/177278), done.
又报了一个错误
+ neutron router-interface-add 3e1a35b2-74e3-481b-9348-4882a5a50789 8f222bed-f434-46ca-9cb8-22648b0f31de Added interface 3e1ce181-89e9-4567-833f-3f4ac2837673 to router 3e1a35b2-74e3-481b-9348-4882a5a50789. ++ _neutron_create_public_subnet_v4 1519aded-bc3f-40f6-83ad-d88dacc064cd ++ local 'subnet_params+=--ip_version 4 ' ++ subnet_params+=' ' ++ subnet_params+='--gateway 172.24.4.1 ' ++ subnet_params+='--name public-subnet ' ++ subnet_params+='1519aded-bc3f-40f6-83ad-d88dacc064cd 7.1.1.0/24 ' ++ subnet_params+='-- --enable_dhcp=False' +++ neutron subnet-create --ip_version 4 --gateway 172.24.4.1 --name public-subnet 1519aded-bc3f-40f6-83ad-d88dacc064cd 7.1.1.0/24 -- --enable_dhcp=False +++ grep -e gateway_ip -e ' id ' Invalid input for operation: Gateway is not valid on subnet. ++ local id_and_ext_gw_ip= ++ die_if_not_set 1280 id_and_ext_gw_ip 'Failure creating public IPv4 subnet' ++ local exitcode=0 +++ set +o +++ grep xtrace ++ local 'xtrace=set -o xtrace' ++ set +o xtrace [ERROR] /home/lihui/devstack/functions-common:1280 Failure creating public IPv4 subnet
手动执行以下该subnet的创建,的确有错误
lihui@l-openstack:~/devstack$ neutron subnet-create --ip_version 4 --gateway 172.24.4.1 --name public-subnet 1519aded-bc3f-40f6-83ad-d88dacc064cd 7.1.1.0/24 -- --enable_dhcp=False Invalid input for operation: Gateway is not valid on subnet.
其中7.1.1.0/24是我自己配置的一段外网,但是外网网关却冒出来默认的172.24.4.1,可见还有其它地方配死了这个网关,全局搜索一下,的确还有一个漏网之鱼
lihui@l-openstack:~/devstack$ grep "172.24.4.1" ./* -R
./lib/neutron-legacy:PUBLIC_NETWORK_GATEWAY=${PUBLIC_NETWORK_GATEWAY:-172.24.4.1}
./tools/xen/xenrc:PUB_IP=${PUB_IP:-172.24.4.10}
lihui@l-openstack:~/devstack$
lihui@l-openstack:~/devstack$
lihui@l-openstack:~/devstack$ grep "172.24" ./* -R
./lib/neutron-legacy:PUBLIC_NETWORK_GATEWAY=${PUBLIC_NETWORK_GATEWAY:-172.24.4.1}
./tools/xen/xenrc:PUB_IP=${PUB_IP:-172.24.4.10}
将外网网关改掉,再执行一次stack.sh,又来一个错误
+ neutron_plugin_configure_plugin_agent + _neutron_ovs_base_setup_bridge br-int + local bridge=br-int + neutron-ovs-cleanup 2017-10-06 18:15:33.944 12993 INFO neutron.common.config [-] Logging enabled! 2017-10-06 18:15:33.945 12993 INFO neutron.common.config [-] /usr/local/bin/neutron-ovs-cleanup version 7.2.0 2017-10-06 18:15:33.989 12993 ERROR neutron.agent.ovsdb.impl_vsctl [-] Unable to execute ['ovs-vsctl', '--timeout=10', '--oneline', '--format=json', '--', '--if-exists', '--columns=name,external_ids,ofport', 'list', 'Interface', 'qr-3e1ce181-89', 'sg-d69ae8ed-7a', 'tap464e2610-09']. 2017-10-06 18:15:33.989 12993 ERROR neutron.agent.ovsdb.impl_vsctl Traceback (most recent call last): 2017-10-06 18:15:33.989 12993 ERROR neutron.agent.ovsdb.impl_vsctl File "/opt/stack/neutron/neutron/agent/ovsdb/impl_vsctl.py", line 63, in run_vsctl 2017-10-06 18:15:33.989 12993 ERROR neutron.agent.ovsdb.impl_vsctl log_fail_as_error=False).rstrip() 2017-10-06 18:15:33.989 12993 ERROR neutron.agent.ovsdb.impl_vsctl File "/opt/stack/neutron/neutron/agent/linux/utils.py", line 159, in execute 2017-10-06 18:15:33.989 12993 ERROR neutron.agent.ovsdb.impl_vsctl raise RuntimeError(m) 2017-10-06 18:15:33.989 12993 ERROR neutron.agent.ovsdb.impl_vsctl RuntimeError: 2017-10-06 18:15:33.989 12993 ERROR neutron.agent.ovsdb.impl_vsctl Command: ['sudo', 'ovs-vsctl', '--timeout=10', '--oneline', '--format=json', '--', '--if-exists', '--columns=name,external_ids,ofport', 'list', 'Interface', 'qr-3e1ce181-89', 'sg-d69ae8ed-7a', 'tap464e2610-09'] 2017-10-06 18:15:33.989 12993 ERROR neutron.agent.ovsdb.impl_vsctl Exit code: 1 2017-10-06 18:15:33.989 12993 ERROR neutron.agent.ovsdb.impl_vsctl 2017-10-06 18:15:33.989 12993 ERROR neutron.agent.ovsdb.impl_vsctl 2017-10-06 18:15:34.008 12993 CRITICAL neutron [-] RuntimeError: Command: ['sudo', 'ovs-vsctl', '--timeout=10', '--oneline', '--format=json', '--', '--if-exists', '--columns=name,external_ids,ofport', 'list', 'Interface', 'qr-3e1ce181-89', 'sg-d69ae8ed-7a', 'tap464e2610-09'] Exit code: 1
看样子是在执行neutron-ovs-cleanup的时候报错;感觉不像是安装部署的问题,怀疑可能是上次出错残留,没有清理,执行以下unstack.sh,kill掉所有相关进行,再执行一次,果然就没这错误了,果然还是得靠经验,捂脸图
接着错误又来了
+ [[ -x /home/lihui/devstack/local.sh ]] + service_check + local service + local failures + SCREEN_NAME=stack + SERVICE_DIR=/opt/stack/status + [[ ! -d /opt/stack/status/stack ]] ++ ls /opt/stack/status/stack/q-agt.failure + failures=/opt/stack/status/stack/q-agt.failure + for service in '$failures' ++ basename /opt/stack/status/stack/q-agt.failure + service=q-agt.failure + service=q-agt + echo 'Error: Service q-agt is not running' Error: Service q-agt is not running + '[' -n /opt/stack/status/stack/q-agt.failure ']' + die 1571 'More details about the above errors can be found with screen, with ./rejoin-stack.sh' + local exitcode=0 + set +o xtrace [Call Trace] ./stack.sh:1315:service_check /home/lihui/devstack/functions-common:1571:die [ERROR] /home/lihui/devstack/functions-common:1571 More details about the above errors can be found with screen, with ./rejoin-stack.sh Error on exit World dumping... see /opt/stack/logs/worlddump-2017-10-06-103940.txt for details
看样子是所有service的进程文件都存在了/opt/stack/status/stack下,但是q-agt生成了一个错误文件,看一下q-agt.failure的内容,只有一句话:q-agt failed to start
-rw-r--r-- 1 lihui lihui 22 Oct 6 18:37 q-agt.failure -rw-r--r-- 1 lihui lihui 6 Oct 6 18:37 q-agt.pid -rw-r--r-- 1 lihui lihui 6 Oct 6 18:37 q-dhcp.pid -rw-r--r-- 1 lihui lihui 6 Oct 6 18:37 q-l3.pid -rw-r--r-- 1 lihui lihui 6 Oct 6 18:37 q-meta.pid -rw-r--r-- 1 lihui lihui 6 Oct 6 18:37 q-svc.pid
通过查看neutron相关服务的pid文件,q-svc对应neutron-server,q-meta对应metadata,q-l3对应l3-agent,q-dhcp对应dhcp-agent,那么q-apt肯定对应着ovs-agent
需要知道如何启动的,只有看源码了,在stack.sh里
if is_service_enabled neutron; then
start_neutron_agents
fi
在lib/neutron-legacy里
# Start running processes, including screen
function start_neutron_agents {
# Start up the neutron agents if enabled
start_neutron_l2_agent
start_neutron_other_agents
}
继续看ovs-agent
# Control of the l2 agent is separated out to make it easier to test partial
# upgrades (everything upgraded except the L2 agent)
function start_neutron_l2_agent {
run_process q-agt "$AGENT_BINARY --config-file $NEUTRON_CONF --config-file /$Q_PLUGIN_CONF_FILE"
if is_provider_network; then
sudo ovs-vsctl --no-wait -- --may-exist add-port $OVS_PHYSICAL_BRIDGE $PUBLIC_INTERFACE
sudo ip link set $OVS_PHYSICAL_BRIDGE up
sudo ip link set br-int up
sudo ip link set $PUBLIC_INTERFACE up
if is_ironic_hardware; then
for IP in $(ip addr show dev $PUBLIC_INTERFACE | grep ' inet ' | awk '{print $2}'); do
sudo ip addr del $IP dev $PUBLIC_INTERFACE
sudo ip addr add $IP dev $OVS_PHYSICAL_BRIDGE
done
sudo ip route replace $FIXED_RANGE via $NETWORK_GATEWAY dev $OVS_PHYSICAL_BRIDGE
fi
fi
}
按照这里run_process手动起一下ovs-agent
lihui@l-openstack:~/devstack$ sudo /usr/local/bin/neutron-openvswitch-agent --config-file /etc/neutron/neutron.conf --config-file=/etc/neutron/plugins/ml2/ml2_conf.ini
还是报错
Exit code: 1 from (pid=1956) execute /opt/stack/neutron/neutron/agent/linux/utils.py:156 2017-10-06 19:06:09.367 ERROR neutron.agent.ovsdb.impl_vsctl [-] Unable to execute ['ovs-vsctl', '--timeout=10', '--oneline', '--format=json', '--', 'set', 'Bridge', 'br-int', 'protocols=[OpenFlow10]']. 2017-10-06 19:06:09.367 TRACE neutron.agent.ovsdb.impl_vsctl Traceback (most recent call last): 2017-10-06 19:06:09.367 TRACE neutron.agent.ovsdb.impl_vsctl File "/opt/stack/neutron/neutron/agent/ovsdb/impl_vsctl.py", line 63, in run_vsctl 2017-10-06 19:06:09.367 TRACE neutron.agent.ovsdb.impl_vsctl log_fail_as_error=False).rstrip() 2017-10-06 19:06:09.367 TRACE neutron.agent.ovsdb.impl_vsctl File "/opt/stack/neutron/neutron/agent/linux/utils.py", line 159, in execute 2017-10-06 19:06:09.367 TRACE neutron.agent.ovsdb.impl_vsctl raise RuntimeError(m) 2017-10-06 19:06:09.367 TRACE neutron.agent.ovsdb.impl_vsctl RuntimeError: 2017-10-06 19:06:09.367 TRACE neutron.agent.ovsdb.impl_vsctl Command: ['ovs-vsctl', '--timeout=10', '--oneline', '--format=json', '--', 'set', 'Bridge', 'br-int', 'protocols=[OpenFlow10]'] 2017-10-06 19:06:09.367 TRACE neutron.agent.ovsdb.impl_vsctl Exit code: 1 2017-10-06 19:06:09.367 TRACE neutron.agent.ovsdb.impl_vsctl 2017-10-06 19:06:09.367 TRACE neutron.agent.ovsdb.impl_vsctl 2017-10-06 19:06:09.368 ERROR neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent [-] Command: ['ovs-vsctl', '--timeout=10', '--oneline', '--format=json', '--', 'set', 'Bridge', 'br-int', 'protocols=[OpenFlow10]'] Exit code: 1 Agent terminated! 2017-10-06 19:06:09.370 INFO oslo_rootwrap.client [-] Stopping rootwrap daemon process with pid=2064
debian上这个错误看了半天,日志里也是这个错误,不明觉厉;但是ubuntu14.04上无误,不清楚是否还是debian上一次调试错误,还是有ovs port残留导致??
总之,最终ubuntu上看到这种信息还是令人愉快的
This is your host IP address: 10.166.224.212 This is your host IPv6 address: ::1 Horizon is now available at http://10.166.224.212/dashboard Keystone is serving at http://10.166.224.212:5000/ The default users are: admin and demo The password: lihui 2017-10-06 11:19:27.276 | stack.sh completed in 584 seconds.
这还不够,所有neutron的agent都起来了
lihui@l-openstack:~/devstack$ neutron agent-list +--------------------------------------+--------------------+-------------+-------+----------------+---------------------------+ | id | agent_type | host | alive | admin_state_up | binary | +--------------------------------------+--------------------+-------------+-------+----------------+---------------------------+ | 01bce5b5-88f5-4445-b85b-f585ec518f13 | L3 agent | l-openstack | :-) | True | neutron-l3-agent | | 14c284ac-4e90-4329-ad18-0e364da2d71d | DHCP agent | l-openstack | :-) | True | neutron-dhcp-agent | | 52ef51f8-d7df-463e-9de7-342f4de6af2b | Metadata agent | l-openstack | :-) | True | neutron-metadata-agent | | fbfad2d9-2ae8-444d-83f8-2470933c6f75 | Open vSwitch agent | l-openstack | :-) | True | neutron-openvswitch-agent | +--------------------------------------+--------------------+-------------+-------+----------------+---------------------------+
但是VPC已经是DVR了,创建vpn-service,却还让我带subnet,不明觉厉
lihui@l-openstack:~/devstack$ neutron vpn-service-create 060d1a6f-47fa-4d38-a617-15c04b6f59ff
usage: neutron vpn-service-create [-h]
[-f {html,json,json,shell,table,value,yaml,yaml}]
[-c COLUMN] [--max-width ]
[--noindent] [--prefix PREFIX]
[--request-format {json,xml}]
[--tenant-id TENANT_ID] [--admin-state-down]
[--name NAME] [--description DESCRIPTION]
ROUTER SUBNET
neutron vpn-service-create: error: too few arguments
难不成neutron client只支持集中式?到哪里vpn都是坑啊~!
8:CLI分支
把各个模块client也换成libverty-eol
##############
#
# OpenStack Client Library Components
#
##############
# volume client
GITREPO["python-cinderclient"]=${CINDERCLIENT_REPO:-${GIT_BASE}/openstack/python-cinderclient.git}
GITBRANCH["python-cinderclient"]=${CINDERCLIENT_BRANCH:-liberty-eol}
# python glance client library
GITREPO["python-glanceclient"]=${GLANCECLIENT_REPO:-${GIT_BASE}/openstack/python-glanceclient.git}
GITBRANCH["python-glanceclient"]=${GLANCECLIENT_BRANCH:-liberty-eol}
# python heat client library
GITREPO["python-heatclient"]=${HEATCLIENT_REPO:-${GIT_BASE}/openstack/python-heatclient.git}
GITBRANCH["python-heatclient"]=${HEATCLIENT_BRANCH:-liberty-eol}
# ironic client
GITREPO["python-ironicclient"]=${IRONICCLIENT_REPO:-${GIT_BASE}/openstack/python-ironicclient.git}
GITBRANCH["python-ironicclient"]=${IRONICCLIENT_BRANCH:-liberty-eol}
# the base authentication plugins that clients use to authenticate
GITREPO["keystoneauth"]=${KEYSTONEAUTH_REPO:-${GIT_BASE}/openstack/keystoneauth.git}
GITBRANCH["keystoneauth"]=${KEYSTONEAUTH_BRANCH:-liberty-eol}
# python keystone client library to nova that horizon uses
GITREPO["python-keystoneclient"]=${KEYSTONECLIENT_REPO:-${GIT_BASE}/openstack/python-keystoneclient.git}
GITBRANCH["python-keystoneclient"]=${KEYSTONECLIENT_BRANCH:-liberty-eol}
# neutron client
GITREPO["python-neutronclient"]=${NEUTRONCLIENT_REPO:-${GIT_BASE}/openstack/python-neutronclient.git}
GITBRANCH["python-neutronclient"]=${NEUTRONCLIENT_BRANCH:-liberty-eol}
# python client library to nova that horizon (and others) use
GITREPO["python-novaclient"]=${NOVACLIENT_REPO:-${GIT_BASE}/openstack/python-novaclient.git}
GITBRANCH["python-novaclient"]=${NOVACLIENT_BRANCH:-liberty-eol}
# python swift client library
GITREPO["python-swiftclient"]=${SWIFTCLIENT_REPO:-${GIT_BASE}/openstack/python-swiftclient.git}
GITBRANCH["python-swiftclient"]=${SWIFTCLIENT_BRANCH:-liberty-eol}
# consolidated openstack python client
GITREPO["python-openstackclient"]=${OPENSTACKCLIENT_REPO:-${GIT_BASE}/openstack/python-openstackclient.git}
GITBRANCH["python-openstackclient"]=${OPENSTACKCLIENT_BRANCH:-liberty-eol}
# this doesn't exist in a lib file, so set it here
GITDIR["python-openstackclient"]=$DEST/python-openstackclient
这样,基本就全部搞定了
