9 PLATFORM=$(python -mplatform)
10 TOKEN=$(openssl rand -hex 10)
12 AUTH="--os-auth-url http://127.0.0.1:35357 --os-token $TOKEN --os-endpoint http://127.0.0.1:35357/v2.0/"
13 NEUTRON_AUTH="--os-username neutron --os-password neutron --os-tenant-name neutron --os-auth-url http://127.0.0.1:35357/v2.0"
14 CORE_PLUGIN="neutron.plugins.ml2.plugin.Ml2Plugin"
16 if [[ $PLATFORM =~ Ubuntu ]]
23 if [ -z $PACKAGE ]; then echo "Package for testing is not specified"; exit 1; fi
24 echo "127.0.10.1 $(hostname)" >> /etc/hosts
30 echo "mysql-server mysql-server/root_password select $MYSQL_PASS" | debconf-set-selections
31 echo "mysql-server mysql-server/root_password_again select $MYSQL_PASS" | debconf-set-selections
32 DEBIAN_FRONTEND=noninteractive apt-get install -y --force-yes rabbitmq-server mysql-server mysql-client-core-5.5 python-mysqldb keystone
34 #yum install -y openstack-keystone rabbitmq-server mysql-server MySQL-client python-oslo-utils
35 yum install -y openstack-keystone rabbitmq-server python-oslo-utils
36 #CentOS 7 temporary workaround
37 yum install -y http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
38 yum install -y mysql-community-server mysql-community-client
39 #Install some plugins because they are required for db-migration scripts (bug #1371184)
40 #Ubuntu neutron-server package include them
41 #yum install -y openstack-neutron-bigswitch openstack-neutron-brocade openstack-neutron-cisco openstack-neutron-hyperv openstack-neutron-vmware openstack-neutron-openvswitch \
42 # openstack-neutron-ryu openstack-neutron-linuxbridge openstack-neutron-metaplugin openstack-neutron-mellanox openstack-neutron-nec openstack-neutron-nuage
46 install_neutron_server () {
49 DEBIAN_FRONTEND=noninteractive apt-get install -y --force-yes neutron-server
51 yum install -y openstack-neutron openstack-neutron-ml2
56 #Setup firewall on CentOS 7
58 firewall-cmd --permanent --add-port=5672/tcp
60 setsebool -P nis_enabled 1
63 restart_service rabbitmq-server
65 echo "RabbitMQ server failed to start"
66 cat /var/log/rabbitmq/startup_err
67 cat /var/log/rabbitmq/startup_log
76 mysqladmin -u root password $MYSQL_PASS
78 mysql -uroot -p$MYSQL_PASS -Bse "drop database if exists keystone"
79 mysql -uroot -p$MYSQL_PASS -Bse "drop database if exists neutron"
80 mysql -uroot -p$MYSQL_PASS -Bse "create database keystone"
81 mysql -uroot -p$MYSQL_PASS -Bse "create database neutron"
82 mysql -uroot -p$MYSQL_PASS -Bse "GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'neutron'"
83 mysql -uroot -p$MYSQL_PASS -Bse "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'keystone'"
84 mysql -uroot -p$MYSQL_PASS -Bse "flush privileges"
89 cat > /etc/keystone/keystone.conf << EOF
93 connection=mysql://keystone:keystone@localhost/keystone
95 provider=keystone.token.providers.uuid.Provider
97 keystone-manage db_sync
98 keystone-manage bootstrap --bootstrap-password $TOKEN
99 chown -R keystone:keystone /var/log/keystone/
102 service keystone restart
104 systemctl restart openstack-keystone
107 #Setup Neutron credentials
108 keystone $AUTH user-create --name neutron --pass neutron
109 keystone $AUTH tenant-create --name neutron
110 keystone $AUTH user-role-add --user neutron --role admin --tenant neutron
111 NEUTRON_SERVICE=`keystone $AUTH service-create --name=neutron --type=network --description="Neutron Networking Service" | grep id | awk -F '|' '{print $3}' | tr -d ' '`
112 keystone $AUTH endpoint-create --region RegionOne --service-id=$NEUTRON_SERVICE --publicurl=http://localhost:9696 --internalurl=http://localhost:9696 --adminurl=http://localhost:9696
115 setup_neutron_services() {
117 cat > /etc/neutron/neutron.conf << EOF
119 auth_strategy = keystone
122 service_plugins = neutron.services.l3_router.l3_router_plugin.L3RouterPlugin
123 core_plugin = $CORE_PLUGIN
124 rabbit_password = guest
125 rabbit_hosts = 127.0.0.1
126 rpc_backend = neutron.openstack.common.rpc.impl_kombu
127 state_path = /var/lib/neutron
128 lock_path = $state_path/lock
130 auth_host = 127.0.0.1
133 admin_tenant_name = neutron
135 admin_password = neutron
136 auth_url=http://127.0.0.1:35357/v2.0
141 root_helper = sudo neutron-rootwrap /etc/neutron/rootwrap.conf
143 connection = mysql://neutron:neutron@127.0.0.1/neutron?charset=utf8
147 cat > /etc/neutron/l3_agent.ini << EOF
149 interface_driver =neutron.agent.linux.interface.OVSInterfaceDriver
150 root_helper=sudo neutron-rootwrap /etc/neutron/rootwrap.conf
155 cp /usr/share/neutron/api-paste.ini /etc/neutron/
156 chown neutron:neutron /etc/neutron/api-paste.ini
159 touch /etc/neutron/plugin.ini
163 upgrade_neutron_db () {
164 neutron-db-manage --config-file /etc/neutron/neutron.conf upgrade head || (echo "DB migration failed" && exit 1)
167 start_neutron_server () {
168 restart_service neutron-server
169 # Sleep is to let Neutron server successfully reconnect to AMQP
175 SERVICE_STARTED=false
184 FAILED_TESTS+="$TEST_FUNCTION "
192 service $SERVICE restart
194 systemctl restart $SERVICE
198 check_neutron_server() {
200 neutron $NEUTRON_AUTH net-create mynet1
201 CHECK=$(neutron $NEUTRON_AUTH net-list | grep id)
202 if [ -z "$CHECK" ]; then echo "Network listing failed" && FAILURE=true; fi
205 check_neutron_openvswitch () {
206 # Workaround for bug #1371184
209 chown root:neutron /etc/neutron/plugins/ml2/openvswitch_agent.ini
212 if ! $SERVICE_STARTED ; then
214 restart_service openvswitch-switch
215 restart_service neutron-openvswitch-agent
217 restart_service openvswitch
218 restart_service neutron-openvswitch-agent
224 STATUS=$(neutron $NEUTRON_AUTH agent-list | grep "Open vSwitch agent" | awk -F "|" '{print $6}' | tr -d " ")
225 if [ "$STATUS" != ":-)" ]; then echo "OVS agent check failed"; FAILURE=true; fi
228 check_neutron_l3_agent () {
229 if ! $SERVICE_STARTED ; then
230 restart_service neutron-l3-agent
233 #This sleep here and in other functions is intended to let the agent add information to the queue
235 STATUS=$(neutron $NEUTRON_AUTH agent-list | grep "L3 agent" | awk -F "|" '{print $6}' | tr -d " ")
236 if [ "$STATUS" != ":-)" ]; then echo "L3 agent check failed"; FAILURE=true; fi
239 check_neutron_dhcp_agent () {
240 if ! $SERVICE_STARTED ; then
241 restart_service neutron-dhcp-agent
245 STATUS=$(neutron $NEUTRON_AUTH agent-list | grep "DHCP agent" | awk -F "|" '{print $6}' | tr -d " ")
246 if [ "$STATUS" != ":-)" ]; then echo "DHCP agent check failed"; FAILURE=true; fi
249 check_neutron_metadata_agent () {
250 if ! $SERVICE_STARTED ; then
251 restart_service neutron-metadata-agent
255 STATUS=$(neutron $NEUTRON_AUTH agent-list | grep "Metadata agent" | awk -F "|" '{print $6}' | tr -d " ")
256 if [ "$STATUS" != ":-)" ]; then echo "Metadata agent check failed"; FAILURE=true; fi
259 check_neutron_metering_agent () {
260 if ! $SERVICE_STARTED ; then
261 restart_service neutron-metering-agent
265 STATUS=$(neutron $NEUTRON_AUTH agent-list | grep "Metering agent" | awk -F "|" '{print $6}' | tr -d " ")
266 if [ "$STATUS" != ":-)" ]; then echo "Metering agent check failed"; FAILURE=true; fi
269 check_neutron_client () {
270 neutron --help > /dev/null
271 if [ $? -ne 0 ]; then echo "Neutron client check failed"; FAILURE=true; fi
275 if [ "$FAILED_TESTS" != "" ]
277 grep TRACE /var/log/neutron/*
278 grep ERROR /var/log/neutron/*
279 echo "Failed tests are: $FAILED_TESTS"
286 install_neutron_server
290 setup_neutron_services
293 try check_neutron_server
297 install_neutron_server
301 setup_neutron_services
304 try check_neutron_server
305 try check_neutron_l3_agent
306 try check_neutron_dhcp_agent
307 try check_neutron_metadata_agent
310 openstack-neutron-ml2)
311 install_neutron_server
315 setup_neutron_services
318 try check_neutron_server
321 openstack-neutron-openvswitch|neutron-openvswitch-agent)
323 install_neutron_server
326 setup_neutron_services
329 try check_neutron_openvswitch
332 python-neutronclient)
337 install_neutron_server
341 setup_neutron_services
344 try check_neutron_l3_agent
348 install_neutron_server
352 setup_neutron_services
355 try check_neutron_dhcp_agent
358 neutron-metadata-agent)
359 install_neutron_server
363 setup_neutron_services
366 try check_neutron_metadata_agent
369 openstack-neutron-metering-agent|neutron-metering-agent)
370 install_neutron_server
374 setup_neutron_services
377 try check_neutron_metering_agent