Merge "Revert "WIP - Remove lbaas from devstack proper""
diff --git a/.gitignore b/.gitignore
index c72b0c4..a470ff5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,6 +12,7 @@
doc/files
doc/build
files/*.gz
+files/*.vmdk
files/*.rpm
files/*.rpm.*
files/*.qcow2
diff --git a/data/devstack-plugins-registry.header b/data/devstack-plugins-registry.header
index 46d5e60..f105fe9 100644
--- a/data/devstack-plugins-registry.header
+++ b/data/devstack-plugins-registry.header
@@ -18,7 +18,3 @@
The following are plugins that a script has found in the openstack/
namespace, which includes but is not limited to official OpenStack
projects.
-
-+----------------------------+-------------------------------------------------------------------------+
-|Plugin Name |URL |
-+----------------------------+-------------------------------------------------------------------------+
diff --git a/doc/source/configuration.rst b/doc/source/configuration.rst
index 0493f8f..3e380f3 100644
--- a/doc/source/configuration.rst
+++ b/doc/source/configuration.rst
@@ -423,8 +423,8 @@
----------
``IP_VERSION`` can be used to configure DevStack to create either an
-IPv4, IPv6, or dual-stack tenant data-network by with either
-``IP_VERSION=4``, ``IP_VERSION=6``, or ``IP_VERSION=4+6``
+IPv4, IPv6, or dual-stack self service project data-network by with
+either ``IP_VERSION=4``, ``IP_VERSION=6``, or ``IP_VERSION=4+6``
respectively. This functionality requires that the Neutron networking
service is enabled by setting the following options:
@@ -513,6 +513,18 @@
with multiple replicas you can do so by customizing the variable
``SWIFT_REPLICAS`` in your ``localrc`` section (usually to 3).
+You can manually override the ring building to use specific storage
+nodes, for example when you want to test a multinode environment. In
+this case you have to set a space-separated list of IPs in
+``SWIFT_STORAGE_IPS`` in your ``localrc`` section that should be used
+as Swift storage nodes.
+Please note that this does not create a multinode setup, it is only
+used when adding nodes to the Swift rings.
+
+::
+
+ SWIFT_STORAGE_IPS="192.168.1.10 192.168.1.11 192.168.1.12"
+
Swift S3
++++++++
diff --git a/doc/source/faq.rst b/doc/source/faq.rst
index cd48915..7793d8e 100644
--- a/doc/source/faq.rst
+++ b/doc/source/faq.rst
@@ -85,7 +85,7 @@
function sourceopenrc {
pushd ~/devstack >/dev/null
- eval $(bash -c ". openrc $1 $2;env|sed -n '/OS_/ { s/^/export /;p}'")
+ eval $(bash -c ". openrc $1 $2 >/dev/null;env|sed -n '/OS_/ { s/^/export /;p}'")
popd >/dev/null
}
diff --git a/doc/source/guides/neutron.rst b/doc/source/guides/neutron.rst
index 4406aa0..a834314 100644
--- a/doc/source/guides/neutron.rst
+++ b/doc/source/guides/neutron.rst
@@ -15,8 +15,20 @@
network interface that is available. In this scenario, the physical
interface is added to the Open vSwitch bridge, and the IP address of
the laptop is migrated onto the bridge interface. That way, the
-physical interface can be used to transmit tenant network traffic,
-the OpenStack API traffic, and management traffic.
+physical interface can be used to transmit self service project
+network traffic, the OpenStack API traffic, and management traffic.
+
+
+.. warning::
+
+ When using a single interface networking setup, there will be a
+ temporary network outage as your IP address is moved from the
+ physical NIC of your machine, to the OVS bridge. If you are SSH'd
+ into the machine from another computer, there is a risk of being
+ disconnected from your ssh session (due to arp cache
+ invalidation), which would stop the stack.sh or leave it in an
+ unfinished state. In these cases, start stack.sh inside its own
+ screen session so it can continue to run.
Physical Network Setup
@@ -210,12 +222,12 @@
which is used as the "integration bridge" where ports are created, and
plugged into the virtual switching fabric. `br-ex` is an OVS bridge
that is used to connect physical ports (like `eth0`), so that floating
-IP traffic for tenants can be received from the physical network
-infrastructure (and the internet), and routed to tenant network ports.
-`br-tun` is a tunnel bridge that is used to connect OpenStack nodes
-(like `devstack-2`) together. This bridge is used so that tenant
-network traffic, using the VXLAN tunneling protocol, flows between
-each compute node where tenant instances run.
+IP traffic for project networks can be received from the physical
+network infrastructure (and the internet), and routed to self service
+project network ports. `br-tun` is a tunnel bridge that is used to
+connect OpenStack nodes (like `devstack-2`) together. This bridge is
+used so that project network traffic, using the VXLAN tunneling
+protocol, flows between each compute node where project instances run.
@@ -369,8 +381,8 @@
## Neutron options
Q_USE_SECGROUP=True
- ENABLE_TENANT_VLANS=True
- TENANT_VLAN_RANGE=3001:4000
+ ENABLE_PROJECT_VLANS=True
+ PROJECT_VLAN_RANGE=3001:4000
PHYSICAL_NETWORK=default
OVS_PHYSICAL_BRIDGE=br-ex
@@ -443,13 +455,18 @@
Non-Standard MTU on the Physical Network
----------------------------------------
-DevStack defaults to assume that the MTU on the physical network
-is 1500. A different MTU can be specified by adding the following to
-the `localrc` part of `local.conf` on each machine.
+Neutron by default uses a MTU of 1500 bytes, which is
+the standard MTU for Ethernet.
+
+A different MTU can be specified by adding the following to
+the Neutron section of `local.conf`. For example,
+if you have network equipment that supports jumbo frames, you could
+set the MTU to 9000 bytes by adding the following
::
- Q_ML2_PLUGIN_PATH_MTU=1500
+ [[post-config|/$Q_PLUGIN_CONF_FILE]]
+ global_physnet_mtu = 9000
Disabling Next Generation Firewall Tools
@@ -536,4 +553,3 @@
LB_PHYSICAL_INTERFACE=eth0
PUBLIC_PHYSICAL_NETWORK=default
LB_INTERFACE_MAPPINGS=default:eth0
-
diff --git a/doc/source/openrc.rst b/doc/source/openrc.rst
index 4e7f075..d28b568 100644
--- a/doc/source/openrc.rst
+++ b/doc/source/openrc.rst
@@ -51,7 +51,7 @@
OS\_AUTH\_URL
Authenticating against an OpenStack cloud using Keystone returns a
*Token* and *Service Catalog*. The catalog contains the endpoints
- for all services the user/tenant has access to - including Nova,
+ for all services the user/project has access to - including Nova,
Glance, Keystone and Swift.
::
diff --git a/doc/source/plugin-registry.rst b/doc/source/plugin-registry.rst
index 136a9e4..999350f 100644
--- a/doc/source/plugin-registry.rst
+++ b/doc/source/plugin-registry.rst
@@ -19,180 +19,105 @@
namespace, which includes but is not limited to official OpenStack
projects.
-+----------------------------+-------------------------------------------------------------------------+
-|Plugin Name |URL |
-+----------------------------+-------------------------------------------------------------------------+
-|aodh |git://git.openstack.org/openstack/aodh |
-+----------------------------+-------------------------------------------------------------------------+
-|app-catalog-ui |git://git.openstack.org/openstack/app-catalog-ui |
-+----------------------------+-------------------------------------------------------------------------+
-|astara |git://git.openstack.org/openstack/astara |
-+----------------------------+-------------------------------------------------------------------------+
-|barbican |git://git.openstack.org/openstack/barbican |
-+----------------------------+-------------------------------------------------------------------------+
-|blazar |git://git.openstack.org/openstack/blazar |
-+----------------------------+-------------------------------------------------------------------------+
-|broadview-collector |git://git.openstack.org/openstack/broadview-collector |
-+----------------------------+-------------------------------------------------------------------------+
-|ceilometer |git://git.openstack.org/openstack/ceilometer |
-+----------------------------+-------------------------------------------------------------------------+
-|ceilometer-powervm |git://git.openstack.org/openstack/ceilometer-powervm |
-+----------------------------+-------------------------------------------------------------------------+
-|cerberus |git://git.openstack.org/openstack/cerberus |
-+----------------------------+-------------------------------------------------------------------------+
-|cloudkitty |git://git.openstack.org/openstack/cloudkitty |
-+----------------------------+-------------------------------------------------------------------------+
-|collectd-ceilometer-plugin |git://git.openstack.org/openstack/collectd-ceilometer-plugin |
-+----------------------------+-------------------------------------------------------------------------+
-|congress |git://git.openstack.org/openstack/congress |
-+----------------------------+-------------------------------------------------------------------------+
-|cue |git://git.openstack.org/openstack/cue |
-+----------------------------+-------------------------------------------------------------------------+
-|designate |git://git.openstack.org/openstack/designate |
-+----------------------------+-------------------------------------------------------------------------+
-|devstack-plugin-amqp1 |git://git.openstack.org/openstack/devstack-plugin-amqp1 |
-+----------------------------+-------------------------------------------------------------------------+
-|devstack-plugin-bdd |git://git.openstack.org/openstack/devstack-plugin-bdd |
-+----------------------------+-------------------------------------------------------------------------+
-|devstack-plugin-ceph |git://git.openstack.org/openstack/devstack-plugin-ceph |
-+----------------------------+-------------------------------------------------------------------------+
-|devstack-plugin-glusterfs |git://git.openstack.org/openstack/devstack-plugin-glusterfs |
-+----------------------------+-------------------------------------------------------------------------+
-|devstack-plugin-hdfs |git://git.openstack.org/openstack/devstack-plugin-hdfs |
-+----------------------------+-------------------------------------------------------------------------+
-|devstack-plugin-pika |git://git.openstack.org/openstack/devstack-plugin-pika |
-+----------------------------+-------------------------------------------------------------------------+
-|devstack-plugin-sheepdog |git://git.openstack.org/openstack/devstack-plugin-sheepdog |
-+----------------------------+-------------------------------------------------------------------------+
-|devstack-plugin-zmq |git://git.openstack.org/openstack/devstack-plugin-zmq |
-+----------------------------+-------------------------------------------------------------------------+
-|dragonflow |git://git.openstack.org/openstack/dragonflow |
-+----------------------------+-------------------------------------------------------------------------+
-|drbd-devstack |git://git.openstack.org/openstack/drbd-devstack |
-+----------------------------+-------------------------------------------------------------------------+
-|ec2-api |git://git.openstack.org/openstack/ec2-api |
-+----------------------------+-------------------------------------------------------------------------+
-|freezer |git://git.openstack.org/openstack/freezer |
-+----------------------------+-------------------------------------------------------------------------+
-|freezer-api |git://git.openstack.org/openstack/freezer-api |
-+----------------------------+-------------------------------------------------------------------------+
-|freezer-web-ui |git://git.openstack.org/openstack/freezer-web-ui |
-+----------------------------+-------------------------------------------------------------------------+
-|gce-api |git://git.openstack.org/openstack/gce-api |
-+----------------------------+-------------------------------------------------------------------------+
-|gnocchi |git://git.openstack.org/openstack/gnocchi |
-+----------------------------+-------------------------------------------------------------------------+
-|ironic |git://git.openstack.org/openstack/ironic |
-+----------------------------+-------------------------------------------------------------------------+
-|ironic-inspector |git://git.openstack.org/openstack/ironic-inspector |
-+----------------------------+-------------------------------------------------------------------------+
-|kingbird |git://git.openstack.org/openstack/kingbird |
-+----------------------------+-------------------------------------------------------------------------+
-|kuryr |git://git.openstack.org/openstack/kuryr |
-+----------------------------+-------------------------------------------------------------------------+
-|magnum |git://git.openstack.org/openstack/magnum |
-+----------------------------+-------------------------------------------------------------------------+
-|manila |git://git.openstack.org/openstack/manila |
-+----------------------------+-------------------------------------------------------------------------+
-|mistral |git://git.openstack.org/openstack/mistral |
-+----------------------------+-------------------------------------------------------------------------+
-|monasca-api |git://git.openstack.org/openstack/monasca-api |
-+----------------------------+-------------------------------------------------------------------------+
-|murano |git://git.openstack.org/openstack/murano |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-6wind |git://git.openstack.org/openstack/networking-6wind |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-bagpipe |git://git.openstack.org/openstack/networking-bagpipe |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-bgpvpn |git://git.openstack.org/openstack/networking-bgpvpn |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-brocade |git://git.openstack.org/openstack/networking-brocade |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-calico |git://git.openstack.org/openstack/networking-calico |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-cisco |git://git.openstack.org/openstack/networking-cisco |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-fortinet |git://git.openstack.org/openstack/networking-fortinet |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-generic-switch |git://git.openstack.org/openstack/networking-generic-switch |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-infoblox |git://git.openstack.org/openstack/networking-infoblox |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-l2gw |git://git.openstack.org/openstack/networking-l2gw |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-midonet |git://git.openstack.org/openstack/networking-midonet |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-mlnx |git://git.openstack.org/openstack/networking-mlnx |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-nec |git://git.openstack.org/openstack/networking-nec |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-odl |git://git.openstack.org/openstack/networking-odl |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-ofagent |git://git.openstack.org/openstack/networking-ofagent |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-ovn |git://git.openstack.org/openstack/networking-ovn |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-ovs-dpdk |git://git.openstack.org/openstack/networking-ovs-dpdk |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-plumgrid |git://git.openstack.org/openstack/networking-plumgrid |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-powervm |git://git.openstack.org/openstack/networking-powervm |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-sfc |git://git.openstack.org/openstack/networking-sfc |
-+----------------------------+-------------------------------------------------------------------------+
-|networking-vsphere |git://git.openstack.org/openstack/networking-vsphere |
-+----------------------------+-------------------------------------------------------------------------+
-|neutron |git://git.openstack.org/openstack/neutron |
-+----------------------------+-------------------------------------------------------------------------+
-|neutron-lbaas |git://git.openstack.org/openstack/neutron-lbaas |
-+----------------------------+-------------------------------------------------------------------------+
-|neutron-lbaas-dashboard |git://git.openstack.org/openstack/neutron-lbaas-dashboard |
-+----------------------------+-------------------------------------------------------------------------+
-|neutron-vpnaas |git://git.openstack.org/openstack/neutron-vpnaas |
-+----------------------------+-------------------------------------------------------------------------+
-|nova-docker |git://git.openstack.org/openstack/nova-docker |
-+----------------------------+-------------------------------------------------------------------------+
-|nova-powervm |git://git.openstack.org/openstack/nova-powervm |
-+----------------------------+-------------------------------------------------------------------------+
-|octavia |git://git.openstack.org/openstack/octavia |
-+----------------------------+-------------------------------------------------------------------------+
-|osprofiler |git://git.openstack.org/openstack/osprofiler |
-+----------------------------+-------------------------------------------------------------------------+
-|rally |git://git.openstack.org/openstack/rally |
-+----------------------------+-------------------------------------------------------------------------+
-|sahara |git://git.openstack.org/openstack/sahara |
-+----------------------------+-------------------------------------------------------------------------+
-|sahara-dashboard |git://git.openstack.org/openstack/sahara-dashboard |
-+----------------------------+-------------------------------------------------------------------------+
-|scalpels |git://git.openstack.org/openstack/scalpels |
-+----------------------------+-------------------------------------------------------------------------+
-|searchlight |git://git.openstack.org/openstack/searchlight |
-+----------------------------+-------------------------------------------------------------------------+
-|senlin |git://git.openstack.org/openstack/senlin |
-+----------------------------+-------------------------------------------------------------------------+
-|smaug |git://git.openstack.org/openstack/smaug |
-+----------------------------+-------------------------------------------------------------------------+
-|solum |git://git.openstack.org/openstack/solum |
-+----------------------------+-------------------------------------------------------------------------+
-|tacker |git://git.openstack.org/openstack/tacker |
-+----------------------------+-------------------------------------------------------------------------+
-|tap-as-a-service |git://git.openstack.org/openstack/tap-as-a-service |
-+----------------------------+-------------------------------------------------------------------------+
-|tricircle |git://git.openstack.org/openstack/tricircle |
-+----------------------------+-------------------------------------------------------------------------+
-|trove |git://git.openstack.org/openstack/trove |
-+----------------------------+-------------------------------------------------------------------------+
-|trove-dashboard |git://git.openstack.org/openstack/trove-dashboard |
-+----------------------------+-------------------------------------------------------------------------+
-|vitrage |git://git.openstack.org/openstack/vitrage |
-+----------------------------+-------------------------------------------------------------------------+
-|vitrage-dashboard |git://git.openstack.org/openstack/vitrage-dashboard |
-+----------------------------+-------------------------------------------------------------------------+
-|vmware-nsx |git://git.openstack.org/openstack/vmware-nsx |
-+----------------------------+-------------------------------------------------------------------------+
-|watcher |git://git.openstack.org/openstack/watcher |
-+----------------------------+-------------------------------------------------------------------------+
-|watcher-dashboard |git://git.openstack.org/openstack/watcher-dashboard |
-+----------------------------+-------------------------------------------------------------------------+
-|zaqar |git://git.openstack.org/openstack/zaqar |
-+----------------------------+-------------------------------------------------------------------------+
+
+====================================== ===
+Plugin Name URL
+====================================== ===
+aodh `git://git.openstack.org/openstack/aodh <https://git.openstack.org/cgit/openstack/aodh>`__
+app-catalog-ui `git://git.openstack.org/openstack/app-catalog-ui <https://git.openstack.org/cgit/openstack/app-catalog-ui>`__
+astara `git://git.openstack.org/openstack/astara <https://git.openstack.org/cgit/openstack/astara>`__
+barbican `git://git.openstack.org/openstack/barbican <https://git.openstack.org/cgit/openstack/barbican>`__
+blazar `git://git.openstack.org/openstack/blazar <https://git.openstack.org/cgit/openstack/blazar>`__
+broadview-collector `git://git.openstack.org/openstack/broadview-collector <https://git.openstack.org/cgit/openstack/broadview-collector>`__
+ceilometer `git://git.openstack.org/openstack/ceilometer <https://git.openstack.org/cgit/openstack/ceilometer>`__
+ceilometer-powervm `git://git.openstack.org/openstack/ceilometer-powervm <https://git.openstack.org/cgit/openstack/ceilometer-powervm>`__
+cerberus `git://git.openstack.org/openstack/cerberus <https://git.openstack.org/cgit/openstack/cerberus>`__
+cloudkitty `git://git.openstack.org/openstack/cloudkitty <https://git.openstack.org/cgit/openstack/cloudkitty>`__
+collectd-ceilometer-plugin `git://git.openstack.org/openstack/collectd-ceilometer-plugin <https://git.openstack.org/cgit/openstack/collectd-ceilometer-plugin>`__
+congress `git://git.openstack.org/openstack/congress <https://git.openstack.org/cgit/openstack/congress>`__
+cue `git://git.openstack.org/openstack/cue <https://git.openstack.org/cgit/openstack/cue>`__
+designate `git://git.openstack.org/openstack/designate <https://git.openstack.org/cgit/openstack/designate>`__
+devstack-plugin-additional-pkg-repos `git://git.openstack.org/openstack/devstack-plugin-additional-pkg-repos <https://git.openstack.org/cgit/openstack/devstack-plugin-additional-pkg-repos>`__
+devstack-plugin-amqp1 `git://git.openstack.org/openstack/devstack-plugin-amqp1 <https://git.openstack.org/cgit/openstack/devstack-plugin-amqp1>`__
+devstack-plugin-bdd `git://git.openstack.org/openstack/devstack-plugin-bdd <https://git.openstack.org/cgit/openstack/devstack-plugin-bdd>`__
+devstack-plugin-ceph `git://git.openstack.org/openstack/devstack-plugin-ceph <https://git.openstack.org/cgit/openstack/devstack-plugin-ceph>`__
+devstack-plugin-glusterfs `git://git.openstack.org/openstack/devstack-plugin-glusterfs <https://git.openstack.org/cgit/openstack/devstack-plugin-glusterfs>`__
+devstack-plugin-hdfs `git://git.openstack.org/openstack/devstack-plugin-hdfs <https://git.openstack.org/cgit/openstack/devstack-plugin-hdfs>`__
+devstack-plugin-kafka `git://git.openstack.org/openstack/devstack-plugin-kafka <https://git.openstack.org/cgit/openstack/devstack-plugin-kafka>`__
+devstack-plugin-nfs `git://git.openstack.org/openstack/devstack-plugin-nfs <https://git.openstack.org/cgit/openstack/devstack-plugin-nfs>`__
+devstack-plugin-pika `git://git.openstack.org/openstack/devstack-plugin-pika <https://git.openstack.org/cgit/openstack/devstack-plugin-pika>`__
+devstack-plugin-sheepdog `git://git.openstack.org/openstack/devstack-plugin-sheepdog <https://git.openstack.org/cgit/openstack/devstack-plugin-sheepdog>`__
+devstack-plugin-zmq `git://git.openstack.org/openstack/devstack-plugin-zmq <https://git.openstack.org/cgit/openstack/devstack-plugin-zmq>`__
+dragonflow `git://git.openstack.org/openstack/dragonflow <https://git.openstack.org/cgit/openstack/dragonflow>`__
+drbd-devstack `git://git.openstack.org/openstack/drbd-devstack <https://git.openstack.org/cgit/openstack/drbd-devstack>`__
+ec2-api `git://git.openstack.org/openstack/ec2-api <https://git.openstack.org/cgit/openstack/ec2-api>`__
+freezer `git://git.openstack.org/openstack/freezer <https://git.openstack.org/cgit/openstack/freezer>`__
+freezer-api `git://git.openstack.org/openstack/freezer-api <https://git.openstack.org/cgit/openstack/freezer-api>`__
+freezer-web-ui `git://git.openstack.org/openstack/freezer-web-ui <https://git.openstack.org/cgit/openstack/freezer-web-ui>`__
+gce-api `git://git.openstack.org/openstack/gce-api <https://git.openstack.org/cgit/openstack/gce-api>`__
+gnocchi `git://git.openstack.org/openstack/gnocchi <https://git.openstack.org/cgit/openstack/gnocchi>`__
+ironic `git://git.openstack.org/openstack/ironic <https://git.openstack.org/cgit/openstack/ironic>`__
+ironic-inspector `git://git.openstack.org/openstack/ironic-inspector <https://git.openstack.org/cgit/openstack/ironic-inspector>`__
+kingbird `git://git.openstack.org/openstack/kingbird <https://git.openstack.org/cgit/openstack/kingbird>`__
+kuryr `git://git.openstack.org/openstack/kuryr <https://git.openstack.org/cgit/openstack/kuryr>`__
+magnum `git://git.openstack.org/openstack/magnum <https://git.openstack.org/cgit/openstack/magnum>`__
+magnum-ui `git://git.openstack.org/openstack/magnum-ui <https://git.openstack.org/cgit/openstack/magnum-ui>`__
+manila `git://git.openstack.org/openstack/manila <https://git.openstack.org/cgit/openstack/manila>`__
+mistral `git://git.openstack.org/openstack/mistral <https://git.openstack.org/cgit/openstack/mistral>`__
+monasca-api `git://git.openstack.org/openstack/monasca-api <https://git.openstack.org/cgit/openstack/monasca-api>`__
+murano `git://git.openstack.org/openstack/murano <https://git.openstack.org/cgit/openstack/murano>`__
+networking-6wind `git://git.openstack.org/openstack/networking-6wind <https://git.openstack.org/cgit/openstack/networking-6wind>`__
+networking-bagpipe `git://git.openstack.org/openstack/networking-bagpipe <https://git.openstack.org/cgit/openstack/networking-bagpipe>`__
+networking-bgpvpn `git://git.openstack.org/openstack/networking-bgpvpn <https://git.openstack.org/cgit/openstack/networking-bgpvpn>`__
+networking-brocade `git://git.openstack.org/openstack/networking-brocade <https://git.openstack.org/cgit/openstack/networking-brocade>`__
+networking-calico `git://git.openstack.org/openstack/networking-calico <https://git.openstack.org/cgit/openstack/networking-calico>`__
+networking-cisco `git://git.openstack.org/openstack/networking-cisco <https://git.openstack.org/cgit/openstack/networking-cisco>`__
+networking-fortinet `git://git.openstack.org/openstack/networking-fortinet <https://git.openstack.org/cgit/openstack/networking-fortinet>`__
+networking-generic-switch `git://git.openstack.org/openstack/networking-generic-switch <https://git.openstack.org/cgit/openstack/networking-generic-switch>`__
+networking-infoblox `git://git.openstack.org/openstack/networking-infoblox <https://git.openstack.org/cgit/openstack/networking-infoblox>`__
+networking-l2gw `git://git.openstack.org/openstack/networking-l2gw <https://git.openstack.org/cgit/openstack/networking-l2gw>`__
+networking-midonet `git://git.openstack.org/openstack/networking-midonet <https://git.openstack.org/cgit/openstack/networking-midonet>`__
+networking-mlnx `git://git.openstack.org/openstack/networking-mlnx <https://git.openstack.org/cgit/openstack/networking-mlnx>`__
+networking-nec `git://git.openstack.org/openstack/networking-nec <https://git.openstack.org/cgit/openstack/networking-nec>`__
+networking-odl `git://git.openstack.org/openstack/networking-odl <https://git.openstack.org/cgit/openstack/networking-odl>`__
+networking-ofagent `git://git.openstack.org/openstack/networking-ofagent <https://git.openstack.org/cgit/openstack/networking-ofagent>`__
+networking-ovn `git://git.openstack.org/openstack/networking-ovn <https://git.openstack.org/cgit/openstack/networking-ovn>`__
+networking-ovs-dpdk `git://git.openstack.org/openstack/networking-ovs-dpdk <https://git.openstack.org/cgit/openstack/networking-ovs-dpdk>`__
+networking-plumgrid `git://git.openstack.org/openstack/networking-plumgrid <https://git.openstack.org/cgit/openstack/networking-plumgrid>`__
+networking-powervm `git://git.openstack.org/openstack/networking-powervm <https://git.openstack.org/cgit/openstack/networking-powervm>`__
+networking-sfc `git://git.openstack.org/openstack/networking-sfc <https://git.openstack.org/cgit/openstack/networking-sfc>`__
+networking-vsphere `git://git.openstack.org/openstack/networking-vsphere <https://git.openstack.org/cgit/openstack/networking-vsphere>`__
+neutron `git://git.openstack.org/openstack/neutron <https://git.openstack.org/cgit/openstack/neutron>`__
+neutron-lbaas `git://git.openstack.org/openstack/neutron-lbaas <https://git.openstack.org/cgit/openstack/neutron-lbaas>`__
+neutron-lbaas-dashboard `git://git.openstack.org/openstack/neutron-lbaas-dashboard <https://git.openstack.org/cgit/openstack/neutron-lbaas-dashboard>`__
+neutron-vpnaas `git://git.openstack.org/openstack/neutron-vpnaas <https://git.openstack.org/cgit/openstack/neutron-vpnaas>`__
+nova-docker `git://git.openstack.org/openstack/nova-docker <https://git.openstack.org/cgit/openstack/nova-docker>`__
+nova-powervm `git://git.openstack.org/openstack/nova-powervm <https://git.openstack.org/cgit/openstack/nova-powervm>`__
+octavia `git://git.openstack.org/openstack/octavia <https://git.openstack.org/cgit/openstack/octavia>`__
+osprofiler `git://git.openstack.org/openstack/osprofiler <https://git.openstack.org/cgit/openstack/osprofiler>`__
+python-freezerclient `git://git.openstack.org/openstack/python-freezerclient <https://git.openstack.org/cgit/openstack/python-freezerclient>`__
+rally `git://git.openstack.org/openstack/rally <https://git.openstack.org/cgit/openstack/rally>`__
+sahara `git://git.openstack.org/openstack/sahara <https://git.openstack.org/cgit/openstack/sahara>`__
+sahara-dashboard `git://git.openstack.org/openstack/sahara-dashboard <https://git.openstack.org/cgit/openstack/sahara-dashboard>`__
+scalpels `git://git.openstack.org/openstack/scalpels <https://git.openstack.org/cgit/openstack/scalpels>`__
+searchlight `git://git.openstack.org/openstack/searchlight <https://git.openstack.org/cgit/openstack/searchlight>`__
+searchlight-ui `git://git.openstack.org/openstack/searchlight-ui <https://git.openstack.org/cgit/openstack/searchlight-ui>`__
+senlin `git://git.openstack.org/openstack/senlin <https://git.openstack.org/cgit/openstack/senlin>`__
+smaug `git://git.openstack.org/openstack/smaug <https://git.openstack.org/cgit/openstack/smaug>`__
+smaug-dashboard `git://git.openstack.org/openstack/smaug-dashboard <https://git.openstack.org/cgit/openstack/smaug-dashboard>`__
+solum `git://git.openstack.org/openstack/solum <https://git.openstack.org/cgit/openstack/solum>`__
+tacker `git://git.openstack.org/openstack/tacker <https://git.openstack.org/cgit/openstack/tacker>`__
+tap-as-a-service `git://git.openstack.org/openstack/tap-as-a-service <https://git.openstack.org/cgit/openstack/tap-as-a-service>`__
+tricircle `git://git.openstack.org/openstack/tricircle <https://git.openstack.org/cgit/openstack/tricircle>`__
+trove `git://git.openstack.org/openstack/trove <https://git.openstack.org/cgit/openstack/trove>`__
+trove-dashboard `git://git.openstack.org/openstack/trove-dashboard <https://git.openstack.org/cgit/openstack/trove-dashboard>`__
+vitrage `git://git.openstack.org/openstack/vitrage <https://git.openstack.org/cgit/openstack/vitrage>`__
+vitrage-dashboard `git://git.openstack.org/openstack/vitrage-dashboard <https://git.openstack.org/cgit/openstack/vitrage-dashboard>`__
+vmware-nsx `git://git.openstack.org/openstack/vmware-nsx <https://git.openstack.org/cgit/openstack/vmware-nsx>`__
+watcher `git://git.openstack.org/openstack/watcher <https://git.openstack.org/cgit/openstack/watcher>`__
+watcher-dashboard `git://git.openstack.org/openstack/watcher-dashboard <https://git.openstack.org/cgit/openstack/watcher-dashboard>`__
+zaqar `git://git.openstack.org/openstack/zaqar <https://git.openstack.org/cgit/openstack/zaqar>`__
+zaqar-ui `git://git.openstack.org/openstack/zaqar-ui <https://git.openstack.org/cgit/openstack/zaqar-ui>`__
+====================================== ===
+
+
diff --git a/driver_certs/cinder_driver_cert.sh b/driver_certs/cinder_driver_cert.sh
deleted file mode 100755
index d066e06..0000000
--- a/driver_certs/cinder_driver_cert.sh
+++ /dev/null
@@ -1,106 +0,0 @@
-#!/usr/bin/env bash
-
-# **cinder_cert.sh**
-
-# This script is a simple wrapper around the tempest volume api tests
-# It requires that you have a working and functional devstack install
-# and that you've enabled your device driver by making the necessary
-# modifications to /etc/cinder/cinder.conf
-
-# This script will refresh your openstack repo's and restart the cinder
-# services to pick up your driver changes.
-# please NOTE; this script assumes your devstack install is functional
-# and includes tempest. A good first step is to make sure you can
-# create volumes on your device before you even try and run this script.
-
-# It also assumes default install location (/opt/stack/xxx)
-# to aid in debug, you should also verify that you've added
-# an output directory for screen logs:
-#
-# SCREEN_LOGDIR=/opt/stack/screen-logs
-
-set -o pipefail
-
-CERT_DIR=$(cd $(dirname "$0") && pwd)
-TOP_DIR=$(cd $CERT_DIR/..; pwd)
-
-source $TOP_DIR/functions
-source $TOP_DIR/stackrc
-source $TOP_DIR/openrc
-source $TOP_DIR/lib/infra
-source $TOP_DIR/lib/tempest
-source $TOP_DIR/lib/cinder
-
-TEMPFILE=`mktemp`
-RECLONE=True
-
-function log_message {
- MESSAGE=$1
- STEP_HEADER=$2
- if [[ "$STEP_HEADER" = "True" ]]; then
- echo -e "\n========================================================" | tee -a $TEMPFILE
- fi
- echo -e `date +%m/%d/%y/%T:`"${MESSAGE}" | tee -a $TEMPFILE
- if [[ "$STEP_HEADER" = "True" ]]; then
- echo -e "========================================================" | tee -a $TEMPFILE
- fi
-}
-
-if [[ "$OFFLINE" = "True" ]]; then
- echo "ERROR: Driver cert requires fresh clone/pull from ${CINDER_BRANCH}"
- echo " Please set OFFLINE=False and retry."
- exit 1
-fi
-
-log_message "RUNNING CINDER DRIVER CERTIFICATION CHECK", True
-log_message "Output is being logged to: $TEMPFILE"
-
-cd $CINDER_DIR
-log_message "Cloning to ${CINDER_REPO}...", True
-install_cinder
-
-log_message "Pull a fresh Clone of cinder repo...", True
-git status | tee -a $TEMPFILE
-git log --pretty=oneline -n 1 | tee -a $TEMPFILE
-
-log_message "Gathering copy of cinder.conf file (passwords will be scrubbed)...", True
-cat /etc/cinder/cinder.conf | egrep -v "(^#.*|^$)" | tee -a $TEMPFILE
-sed -i "s/\(.*password.*=\).*$/\1 xxx/i" $TEMPFILE
-log_message "End of cinder.conf.", True
-
-cd $TOP_DIR
-# Verify tempest is installed/enabled
-if ! is_service_enabled tempest; then
- log_message "ERROR!!! Cert requires tempest in enabled_services!", True
- log_message" Please add tempest to enabled_services and retry."
- exit 1
-fi
-
-cd $TEMPEST_DIR
-install_tempest
-
-log_message "Verify tempest is current....", True
-git status | tee -a $TEMPFILE
-log_message "Check status and get latest commit..."
-git log --pretty=oneline -n 1 | tee -a $TEMPFILE
-
-
-#stop and restart cinder services
-log_message "Restart Cinder services...", True
-stop_cinder
-sleep 1
-start_cinder
-sleep 5
-
-# run tempest api/volume/test_*
-log_message "Run the actual tempest volume tests (./tools/pretty_tox.sh volume)...", True
-./tools/pretty_tox.sh volume 2>&1 | tee -a $TEMPFILE
-if [[ $? = 0 ]]; then
- log_message "CONGRATULATIONS!!! Device driver PASSED!", True
- log_message "Submit output: ($TEMPFILE)"
- exit 0
-else
- log_message "SORRY!!! Device driver FAILED!", True
- log_message "Check output in $TEMPFILE"
- exit 1
-fi
diff --git a/files/debs/ceilometer-collector b/files/debs/ceilometer-collector
deleted file mode 100644
index d1e9eef..0000000
--- a/files/debs/ceilometer-collector
+++ /dev/null
@@ -1,3 +0,0 @@
-libnspr4-dev
-mongodb-server #NOPRIME
-python-pymongo #NOPRIME
diff --git a/files/debs/general b/files/debs/general
index 307cd7b..a1f2a4b 100644
--- a/files/debs/general
+++ b/files/debs/general
@@ -1,5 +1,6 @@
bc
bridge-utils
+bsdmainutils
curl
g++
gcc
diff --git a/files/rpms-suse/ceilometer-collector b/files/rpms-suse/ceilometer-collector
deleted file mode 100644
index fc75ffa..0000000
--- a/files/rpms-suse/ceilometer-collector
+++ /dev/null
@@ -1,3 +0,0 @@
-# (devel:languages:python and server:database projects)
-mongodb
-# Not available in openSUSE main repositories, but can be fetched from OBS
diff --git a/files/rpms-suse/general b/files/rpms-suse/general
index e3dfec1..3b19071 100644
--- a/files/rpms-suse/general
+++ b/files/rpms-suse/general
@@ -25,5 +25,6 @@
tar
tcpdump
unzip
+util-linux
wget
zlib-devel
diff --git a/files/rpms/ceilometer-collector b/files/rpms/ceilometer-collector
deleted file mode 100644
index a8b8118..0000000
--- a/files/rpms/ceilometer-collector
+++ /dev/null
@@ -1,3 +0,0 @@
-mongodb # NOPRIME
-mongodb-server #NOPRIME
-selinux-policy-targeted
diff --git a/files/rpms/general b/files/rpms/general
index 6d5fd15..2d4a97a 100644
--- a/files/rpms/general
+++ b/files/rpms/general
@@ -30,6 +30,7 @@
tar
tcpdump
unzip
+util-linux
wget
which
zlib-devel
diff --git a/functions b/functions
index 5730b6c..1bfb8a5 100644
--- a/functions
+++ b/functions
@@ -30,6 +30,19 @@
declare -f -F $1 > /dev/null
}
+# short_source prints out the current location of the caller in a way
+# that strips redundant directories. This is useful for PS4 usage.
+function short_source {
+ saveIFS=$IFS
+ IFS=" "
+ called=($(caller 0))
+ IFS=$saveIFS
+ file=${called[2]}
+ file=${file#$RC_DIR/}
+ printf "%-40s " "$file:${called[1]}:${called[0]}"
+}
+
+
# Retrieve an image from a URL and upload into Glance.
# Uses the following variables:
#
diff --git a/functions-common b/functions-common
index 5ae9745..0806681 100644
--- a/functions-common
+++ b/functions-common
@@ -380,7 +380,7 @@
DISTRO="sle${os_RELEASE%.*}"
elif [[ "$os_VENDOR" =~ (Red.*Hat) || \
"$os_VENDOR" =~ (CentOS) || \
- "$os_VENDOR" =~ (OracleLinux) || \
+ "$os_VENDOR" =~ (OracleServer) || \
"$os_VENDOR" =~ (Virtuozzo) ]]; then
# Drop the . release as we assume it's compatible
# XXX re-evaluate when we get RHEL10
@@ -427,7 +427,7 @@
GetOSVersion
fi
- [ "$os_VENDOR" = "OracleLinux" ]
+ [ "$os_VENDOR" = "OracleServer" ]
}
@@ -441,7 +441,7 @@
[ "$os_VENDOR" = "Fedora" ] || [ "$os_VENDOR" = "Red Hat" ] || \
[ "$os_VENDOR" = "RedHatEnterpriseServer" ] || \
- [ "$os_VENDOR" = "CentOS" ] || [ "$os_VENDOR" = "OracleLinux" ] || \
+ [ "$os_VENDOR" = "CentOS" ] || [ "$os_VENDOR" = "OracleServer" ] || \
[ "$os_VENDOR" = "Virtuozzo" ] || [ "$os_VENDOR" = "kvmibm" ]
}
@@ -2322,8 +2322,9 @@
# Resolution is only in whole seconds, so should be used for long
# running activities.
-declare -A TOTAL_TIME
-declare -A START_TIME
+declare -A _TIME_TOTAL
+declare -A _TIME_START
+declare -r _TIME_BEGIN=$(date +%s)
# time_start $name
#
@@ -2331,11 +2332,11 @@
# already started.
function time_start {
local name=$1
- local start_time=${START_TIME[$name]}
+ local start_time=${_TIME_START[$name]}
if [[ -n "$start_time" ]]; then
die $LINENO "Trying to start the clock on $name, but it's already been started"
fi
- START_TIME[$name]=$(date +%s)
+ _TIME_START[$name]=$(date +%s)
}
# time_stop $name
@@ -2351,32 +2352,53 @@
local start_time
name=$1
- start_time=${START_TIME[$name]}
+ start_time=${_TIME_START[$name]}
if [[ -z "$start_time" ]]; then
die $LINENO "Trying to stop the clock on $name, but it was never started"
fi
end_time=$(date +%s)
elapsed_time=$(($end_time - $start_time))
- total=${TOTAL_TIME[$name]:-0}
+ total=${_TIME_TOTAL[$name]:-0}
# reset the clock so we can start it in the future
- START_TIME[$name]=""
- TOTAL_TIME[$name]=$(($total + $elapsed_time))
+ _TIME_START[$name]=""
+ _TIME_TOTAL[$name]=$(($total + $elapsed_time))
}
# time_totals
-#
-# prints out total time
+# Print out total time summary
function time_totals {
- echo
- echo "========================"
- echo "DevStack Components Timed"
- echo "========================"
- echo
- for t in ${!TOTAL_TIME[*]}; do
- local v=${TOTAL_TIME[$t]}
- echo "$t - $v secs"
+ local elapsed_time
+ local end_time
+ local len=15
+ local xtrace
+
+ end_time=$(date +%s)
+ elapsed_time=$(($end_time - $_TIME_BEGIN))
+
+ # pad 1st column this far
+ for t in ${!_TIME_TOTAL[*]}; do
+ if [[ ${#t} -gt $len ]]; then
+ len=${#t}
+ fi
done
+
+ xtrace=$(set +o | grep xtrace)
+ set +o xtrace
+
+ echo
+ echo "========================="
+ echo "DevStack Component Timing"
+ echo "========================="
+ printf "%-${len}s %3d\n" "Total runtime" "$elapsed_time"
+ echo
+ for t in ${!_TIME_TOTAL[*]}; do
+ local v=${_TIME_TOTAL[$t]}
+ printf "%-${len}s %3d\n" "$t" "$v"
+ done
+ echo "========================="
+
+ $xtrace
}
# Restore xtrace
diff --git a/inc/python b/inc/python
index 35bab6f..495150d 100644
--- a/inc/python
+++ b/inc/python
@@ -300,6 +300,13 @@
local flags=$2
local extras=$3
+ # Normalize the directory name to avoid
+ # "installation from path or url cannot be constrained to a version"
+ # error.
+ # REVISIT(yamamoto): Remove this when fixed in pip.
+ # https://github.com/pypa/pip/pull/3582
+ project_dir=$(cd $project_dir && pwd)
+
if [ -n "$REQUIREMENTS_DIR" ]; then
# Constrain this package to this project directory from here on out.
local name
diff --git a/lib/cinder b/lib/cinder
index 6401f2d..4df7de8 100644
--- a/lib/cinder
+++ b/lib/cinder
@@ -272,6 +272,8 @@
iniset $CINDER_CONF DEFAULT os_region_name "$REGION_NAME"
+ iniset $CINDER_CONF privsep_osbrick helper_command "sudo cinder-rootwrap \$rootwrap_config privsep-helper --config-file $CINDER_CONF"
+
if is_service_enabled c-vol && [[ -n "$CINDER_ENABLED_BACKENDS" ]]; then
local enabled_backends=""
local default_name=""
@@ -373,17 +375,17 @@
get_or_create_endpoint \
"volume" \
"$REGION_NAME" \
- "$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/v1/\$(tenant_id)s" \
- "$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/v1/\$(tenant_id)s" \
- "$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/v1/\$(tenant_id)s"
+ "$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/v1/\$(project_id)s" \
+ "$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/v1/\$(project_id)s" \
+ "$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/v1/\$(project_id)s"
get_or_create_service "cinderv2" "volumev2" "Cinder Volume Service V2"
get_or_create_endpoint \
"volumev2" \
"$REGION_NAME" \
- "$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/v2/\$(tenant_id)s" \
- "$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/v2/\$(tenant_id)s" \
- "$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/v2/\$(tenant_id)s"
+ "$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/v2/\$(project_id)s" \
+ "$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/v2/\$(project_id)s" \
+ "$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/v2/\$(project_id)s"
fi
}
diff --git a/lib/heat b/lib/heat
index 2cf7a19..4326321 100644
--- a/lib/heat
+++ b/lib/heat
@@ -391,9 +391,9 @@
get_or_create_endpoint \
"orchestration" \
"$REGION_NAME" \
- "$SERVICE_PROTOCOL://$HEAT_API_HOST:$HEAT_API_PORT/v1/\$(tenant_id)s" \
- "$SERVICE_PROTOCOL://$HEAT_API_HOST:$HEAT_API_PORT/v1/\$(tenant_id)s" \
- "$SERVICE_PROTOCOL://$HEAT_API_HOST:$HEAT_API_PORT/v1/\$(tenant_id)s"
+ "$SERVICE_PROTOCOL://$HEAT_API_HOST:$HEAT_API_PORT/v1/\$(project_id)s" \
+ "$SERVICE_PROTOCOL://$HEAT_API_HOST:$HEAT_API_PORT/v1/\$(project_id)s" \
+ "$SERVICE_PROTOCOL://$HEAT_API_HOST:$HEAT_API_PORT/v1/\$(project_id)s"
get_or_create_service "heat-cfn" "cloudformation" "Heat CloudFormation Service"
get_or_create_endpoint \
diff --git a/lib/keystone b/lib/keystone
index acdd7e4..b5c107c 100644
--- a/lib/keystone
+++ b/lib/keystone
@@ -61,7 +61,6 @@
# KEYSTONE_DEPLOY defines how keystone is deployed, allowed values:
# - mod_wsgi : Run keystone under Apache HTTPd mod_wsgi
-# - eventlet : Run keystone-all
# - uwsgi : Run keystone under uwsgi
if [ -z "$KEYSTONE_DEPLOY" ]; then
if [ -z "$KEYSTONE_USE_MOD_WSGI" ]; then
@@ -69,7 +68,7 @@
elif [ "$KEYSTONE_USE_MOD_WSGI" == True ]; then
KEYSTONE_DEPLOY=mod_wsgi
else
- KEYSTONE_DEPLOY=eventlet
+ KEYSTONE_DEPLOY=uwsgi
fi
fi
@@ -107,9 +106,9 @@
# Bind hosts
KEYSTONE_ADMIN_BIND_HOST=${KEYSTONE_ADMIN_BIND_HOST:-$KEYSTONE_SERVICE_HOST}
-# Set the tenant for service accounts in Keystone
-SERVICE_TENANT_NAME=${SERVICE_TENANT_NAME:-service}
-SERVICE_PROJECT_NAME=${SERVICE_TENANT_NAME:-service}
+# Set the project for service accounts in Keystone
+SERVICE_PROJECT_NAME=${SERVICE_PROJECT_NAME:-service}
+SERVICE_TENANT_NAME=${SERVICE_PROJECT_NAME:-service}
# if we are running with SSL use https protocols
if is_ssl_enabled_service "key" || is_service_enabled tls-proxy; then
@@ -283,7 +282,7 @@
if [ "$KEYSTONE_DEPLOY" == "mod_wsgi" ]; then
iniset $KEYSTONE_CONF DEFAULT logging_exception_prefix "%(asctime)s.%(msecs)03d %(process)d TRACE %(name)s %(instance)s"
_config_keystone_apache_wsgi
- elif [ "$KEYSTONE_DEPLOY" == "uwsgi" ]; then
+ else # uwsgi
# iniset creates these files when it's called if they don't exist.
KEYSTONE_PUBLIC_UWSGI_FILE=$KEYSTONE_CONF_DIR/keystone-uwsgi-public.ini
KEYSTONE_ADMIN_UWSGI_FILE=$KEYSTONE_CONF_DIR/keystone-uwsgi-admin.ini
@@ -321,30 +320,22 @@
# Make sure the client doesn't try to re-use the connection.
iniset "$file" uwsgi add-header "Connection: close"
done
-
- else # eventlet
- if is_ssl_enabled_service key; then
- iniset $KEYSTONE_CONF eventlet_server_ssl enable True
- iniset $KEYSTONE_CONF eventlet_server_ssl certfile $KEYSTONE_SSL_CERT
- iniset $KEYSTONE_CONF eventlet_server_ssl keyfile $KEYSTONE_SSL_KEY
- fi
-
- iniset $KEYSTONE_CONF eventlet_server public_port $service_port
- iniset $KEYSTONE_CONF eventlet_server admin_port $auth_port
-
- iniset $KEYSTONE_CONF eventlet_server admin_bind_host "$KEYSTONE_ADMIN_BIND_HOST"
- iniset $KEYSTONE_CONF eventlet_server admin_workers "$API_WORKERS"
- # Public workers will use the server default, typically number of CPU.
fi
iniset $KEYSTONE_CONF DEFAULT max_token_size 16384
iniset $KEYSTONE_CONF fernet_tokens key_repository "$KEYSTONE_CONF_DIR/fernet-keys/"
+
+ # Configure the project created by the 'keystone-manage bootstrap' as the cloud-admin project.
+ # The users from this project are globally admin as before, but it also
+ # allows policy changes in order to clarify the adminess scope.
+ iniset $KEYSTONE_CONF resource admin_project_domain_name default
+ iniset $KEYSTONE_CONF resource admin_project_name admin
}
# create_keystone_accounts() - Sets up common required keystone accounts
-# Tenant User Roles
+# Project User Roles
# ------------------------------------------------------------------
# admin admin admin
# service -- --
@@ -357,7 +348,7 @@
# alt_demo alt_demo Member, anotherrole
# invisible_to_admin demo Member
-# Group Users Roles Tenant
+# Group Users Roles Project
# ------------------------------------------------------------------
# admins admin admin admin
# nonadmins demo, alt_demo Member, anotherrole demo, alt_demo
@@ -369,8 +360,8 @@
# The keystone bootstrapping process (performed via keystone-manage bootstrap)
# creates an admin user, admin role and admin project. As a sanity check
# we exercise the CLI to retrieve the IDs for these values.
- local admin_tenant
- admin_tenant=$(openstack project show "admin" -f value -c id)
+ local admin_project
+ admin_project=$(openstack project show "admin" -f value -c id)
local admin_user
admin_user=$(openstack user show "admin" -f value -c id)
local admin_role
@@ -385,8 +376,8 @@
get_or_create_role service
# The ResellerAdmin role is used by Nova and Ceilometer so we need to keep it.
- # The admin role in swift allows a user to act as an admin for their tenant,
- # but ResellerAdmin is needed for a user to act as any tenant. The name of this
+ # The admin role in swift allows a user to act as an admin for their project,
+ # but ResellerAdmin is needed for a user to act as any project. The name of this
# role is also configurable in swift-proxy.conf
get_or_create_role ResellerAdmin
@@ -399,32 +390,32 @@
local another_role
another_role=$(get_or_create_role "anotherrole")
- # invisible tenant - admin can't see this one
- local invis_tenant
- invis_tenant=$(get_or_create_project "invisible_to_admin" default)
+ # invisible project - admin can't see this one
+ local invis_project
+ invis_project=$(get_or_create_project "invisible_to_admin" default)
# demo
- local demo_tenant
- demo_tenant=$(get_or_create_project "demo" default)
+ local demo_project
+ demo_project=$(get_or_create_project "demo" default)
local demo_user
demo_user=$(get_or_create_user "demo" \
"$ADMIN_PASSWORD" "default" "demo@example.com")
- get_or_add_user_project_role $member_role $demo_user $demo_tenant
- get_or_add_user_project_role $admin_role $admin_user $demo_tenant
- get_or_add_user_project_role $another_role $demo_user $demo_tenant
- get_or_add_user_project_role $member_role $demo_user $invis_tenant
+ get_or_add_user_project_role $member_role $demo_user $demo_project
+ get_or_add_user_project_role $admin_role $admin_user $demo_project
+ get_or_add_user_project_role $another_role $demo_user $demo_project
+ get_or_add_user_project_role $member_role $demo_user $invis_project
# alt_demo
- local alt_demo_tenant
- alt_demo_tenant=$(get_or_create_project "alt_demo" default)
+ local alt_demo_project
+ alt_demo_project=$(get_or_create_project "alt_demo" default)
local alt_demo_user
alt_demo_user=$(get_or_create_user "alt_demo" \
"$ADMIN_PASSWORD" "default" "alt_demo@example.com")
- get_or_add_user_project_role $member_role $alt_demo_user $alt_demo_tenant
- get_or_add_user_project_role $admin_role $admin_user $alt_demo_tenant
- get_or_add_user_project_role $another_role $alt_demo_user $alt_demo_tenant
+ get_or_add_user_project_role $member_role $alt_demo_user $alt_demo_project
+ get_or_add_user_project_role $admin_role $admin_user $alt_demo_project
+ get_or_add_user_project_role $another_role $alt_demo_user $alt_demo_project
# groups
local admin_group
@@ -434,11 +425,11 @@
non_admin_group=$(get_or_create_group "nonadmins" \
"default" "non-admin group")
- get_or_add_group_project_role $member_role $non_admin_group $demo_tenant
- get_or_add_group_project_role $another_role $non_admin_group $demo_tenant
- get_or_add_group_project_role $member_role $non_admin_group $alt_demo_tenant
- get_or_add_group_project_role $another_role $non_admin_group $alt_demo_tenant
- get_or_add_group_project_role $admin_role $admin_group $admin_tenant
+ get_or_add_group_project_role $member_role $non_admin_group $demo_project
+ get_or_add_group_project_role $another_role $non_admin_group $demo_project
+ get_or_add_group_project_role $member_role $non_admin_group $alt_demo_project
+ get_or_add_group_project_role $another_role $non_admin_group $alt_demo_project
+ get_or_add_group_project_role $admin_role $admin_group $admin_project
}
# Create a user that is capable of verifying keystone tokens for use with auth_token middleware.
@@ -577,12 +568,9 @@
restart_apache_server
tail_log key /var/log/$APACHE_NAME/keystone.log
tail_log key-access /var/log/$APACHE_NAME/keystone_access.log
- elif [ "$KEYSTONE_DEPLOY" == "uwsgi" ]; then
+ else # uwsgi
run_process key "$KEYSTONE_BIN_DIR/uwsgi $KEYSTONE_PUBLIC_UWSGI_FILE" "" "key-p"
run_process key "$KEYSTONE_BIN_DIR/uwsgi $KEYSTONE_ADMIN_UWSGI_FILE" "" "key-a"
- else # eventlet
- # Start Keystone in a screen window
- run_process key "$KEYSTONE_BIN_DIR/keystone-all --config-file $KEYSTONE_CONF"
fi
echo "Waiting for keystone to start..."
@@ -631,9 +619,9 @@
--bootstrap-role-name admin \
--bootstrap-service-name keystone \
--bootstrap-region-id "$REGION_NAME" \
- --bootstrap-admin-url "$KEYSTONE_AUTH_URI/v$IDENTITY_API_VERSION" \
- --bootstrap-public-url "$KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v$IDENTITY_API_VERSION" \
- --bootstrap-internal-url "$KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v$IDENTITY_API_VERSION"
+ --bootstrap-admin-url "$KEYSTONE_AUTH_URI" \
+ --bootstrap-public-url "$KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT" \
+ --bootstrap-internal-url "$KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT"
}
# Restore xtrace
diff --git a/lib/lvm b/lib/lvm
index ae6023a..b9d7c39 100644
--- a/lib/lvm
+++ b/lib/lvm
@@ -124,7 +124,7 @@
if [ "$CINDER_ISCSI_HELPER" = "lioadm" ]; then
sudo cinder-rtstool get-targets | sudo xargs -rn 1 cinder-rtstool delete
else
- sudo tgtadm --op show --mode target | grep Target | cut -f3 -d ' ' | sudo xargs -n1 tgt-admin --delete || true
+ sudo tgtadm --op show --mode target | awk '/Target/ {print $3}' | sudo xargs -r -n1 tgt-admin --delete
fi
_clean_lvm_volume_group $vg
}
diff --git a/lib/neutron-legacy b/lib/neutron-legacy
index e06a020..084a356 100644
--- a/lib/neutron-legacy
+++ b/lib/neutron-legacy
@@ -544,8 +544,9 @@
}
function create_neutron_initial_network {
- TENANT_ID=$(openstack project list | grep " demo " | get_field 1)
- die_if_not_set $LINENO TENANT_ID "Failure retrieving TENANT_ID for demo"
+ local project_id
+ project_id=$(openstack project list | grep " demo " | get_field 1)
+ die_if_not_set $LINENO project_id "Failure retrieving project_id for demo"
# Allow drivers that need to create an initial network to do so here
if type -p neutron_plugin_create_initial_network_profile > /dev/null; then
@@ -555,17 +556,17 @@
if is_provider_network; then
die_if_not_set $LINENO PHYSICAL_NETWORK "You must specify the PHYSICAL_NETWORK"
die_if_not_set $LINENO PROVIDER_NETWORK_TYPE "You must specify the PROVIDER_NETWORK_TYPE"
- NET_ID=$(neutron net-create $PHYSICAL_NETWORK --tenant_id $TENANT_ID --provider:network_type $PROVIDER_NETWORK_TYPE --provider:physical_network "$PHYSICAL_NETWORK" ${SEGMENTATION_ID:+--provider:segmentation_id $SEGMENTATION_ID} --shared | grep ' id ' | get_field 2)
- die_if_not_set $LINENO NET_ID "Failure creating NET_ID for $PHYSICAL_NETWORK $TENANT_ID"
+ NET_ID=$(neutron net-create $PHYSICAL_NETWORK --tenant_id $project_id --provider:network_type $PROVIDER_NETWORK_TYPE --provider:physical_network "$PHYSICAL_NETWORK" ${SEGMENTATION_ID:+--provider:segmentation_id $SEGMENTATION_ID} --shared | grep ' id ' | get_field 2)
+ die_if_not_set $LINENO NET_ID "Failure creating NET_ID for $PHYSICAL_NETWORK $project_id"
if [[ "$IP_VERSION" =~ 4.* ]]; then
- SUBNET_ID=$(neutron subnet-create --tenant_id $TENANT_ID --ip_version 4 ${ALLOCATION_POOL:+--allocation-pool $ALLOCATION_POOL} --name $PROVIDER_SUBNET_NAME --gateway $NETWORK_GATEWAY $NET_ID $FIXED_RANGE | grep ' id ' | get_field 2)
- die_if_not_set $LINENO SUBNET_ID "Failure creating SUBNET_ID for $PROVIDER_SUBNET_NAME $TENANT_ID"
+ SUBNET_ID=$(neutron subnet-create --tenant_id $project_id --ip_version 4 ${ALLOCATION_POOL:+--allocation-pool $ALLOCATION_POOL} --name $PROVIDER_SUBNET_NAME --gateway $NETWORK_GATEWAY $NET_ID $FIXED_RANGE | grep ' id ' | get_field 2)
+ die_if_not_set $LINENO SUBNET_ID "Failure creating SUBNET_ID for $PROVIDER_SUBNET_NAME $project_id"
fi
if [[ "$IP_VERSION" =~ .*6 ]] && [[ -n "$IPV6_PROVIDER_FIXED_RANGE" ]] && [[ -n "$IPV6_PROVIDER_NETWORK_GATEWAY" ]]; then
- SUBNET_V6_ID=$(neutron subnet-create --tenant_id $TENANT_ID --ip_version 6 --ipv6-address-mode $IPV6_ADDRESS_MODE --gateway $IPV6_PROVIDER_NETWORK_GATEWAY --name $IPV6_PROVIDER_SUBNET_NAME $NET_ID $IPV6_PROVIDER_FIXED_RANGE | grep 'id' | get_field 2)
- die_if_not_set $LINENO SUBNET_V6_ID "Failure creating SUBNET_V6_ID for $IPV6_PROVIDER_SUBNET_NAME $TENANT_ID"
+ SUBNET_V6_ID=$(neutron subnet-create --tenant_id $project_id --ip_version 6 --ipv6-address-mode $IPV6_ADDRESS_MODE --gateway $IPV6_PROVIDER_NETWORK_GATEWAY --name $IPV6_PROVIDER_SUBNET_NAME $NET_ID $IPV6_PROVIDER_FIXED_RANGE | grep 'id' | get_field 2)
+ die_if_not_set $LINENO SUBNET_V6_ID "Failure creating SUBNET_V6_ID for $IPV6_PROVIDER_SUBNET_NAME $project_id"
fi
if [[ $Q_AGENT == "openvswitch" ]]; then
@@ -574,17 +575,17 @@
sudo ip link set $PUBLIC_INTERFACE up
fi
else
- NET_ID=$(neutron net-create --tenant-id $TENANT_ID "$PRIVATE_NETWORK_NAME" | grep ' id ' | get_field 2)
- die_if_not_set $LINENO NET_ID "Failure creating NET_ID for $PRIVATE_NETWORK_NAME $TENANT_ID"
+ NET_ID=$(neutron net-create --tenant-id $project_id "$PRIVATE_NETWORK_NAME" | grep ' id ' | get_field 2)
+ die_if_not_set $LINENO NET_ID "Failure creating NET_ID for $PRIVATE_NETWORK_NAME $project_id"
if [[ "$IP_VERSION" =~ 4.* ]]; then
# Create IPv4 private subnet
- SUBNET_ID=$(_neutron_create_private_subnet_v4)
+ SUBNET_ID=$(_neutron_create_private_subnet_v4 $project_id)
fi
if [[ "$IP_VERSION" =~ .*6 ]]; then
# Create IPv6 private subnet
- IPV6_SUBNET_ID=$(_neutron_create_private_subnet_v6)
+ IPV6_SUBNET_ID=$(_neutron_create_private_subnet_v6 $project_id)
fi
fi
@@ -594,8 +595,8 @@
# Create a router, and add the private subnet as one of its interfaces
if [[ "$Q_L3_ROUTER_PER_TENANT" == "True" ]]; then
# create a tenant-owned router.
- ROUTER_ID=$(neutron router-create --tenant-id $TENANT_ID $Q_ROUTER_NAME | grep ' id ' | get_field 2)
- die_if_not_set $LINENO ROUTER_ID "Failure creating ROUTER_ID for $TENANT_ID $Q_ROUTER_NAME"
+ ROUTER_ID=$(neutron router-create --tenant-id $project_id $Q_ROUTER_NAME | grep ' id ' | get_field 2)
+ die_if_not_set $LINENO ROUTER_ID "Failure creating ROUTER_ID for $project_id $Q_ROUTER_NAME"
else
# Plugin only supports creating a single router, which should be admin owned.
ROUTER_ID=$(neutron router-create $Q_ROUTER_NAME | grep ' id ' | get_field 2)
@@ -1189,14 +1190,7 @@
iniset $NEUTRON_CONF DEFAULT notify_nova_on_port_status_changes $Q_NOTIFY_NOVA_PORT_STATUS_CHANGES
iniset $NEUTRON_CONF DEFAULT notify_nova_on_port_data_changes $Q_NOTIFY_NOVA_PORT_DATA_CHANGES
- iniset $NEUTRON_CONF nova auth_type password
- iniset $NEUTRON_CONF nova auth_url $KEYSTONE_AUTH_URI
- iniset $NEUTRON_CONF nova username nova
- iniset $NEUTRON_CONF nova password $SERVICE_PASSWORD
- iniset $NEUTRON_CONF nova user_domain_id default
- iniset $NEUTRON_CONF nova project_name $SERVICE_PROJECT_NAME
- iniset $NEUTRON_CONF nova project_domain_id default
- iniset $NEUTRON_CONF nova region_name $REGION_NAME
+ configure_auth_token_middleware $NEUTRON_CONF nova $NEUTRON_AUTH_CACHE_DIR nova
# Configure plugin
neutron_plugin_configure_service
@@ -1287,30 +1281,32 @@
# Create private IPv4 subnet
function _neutron_create_private_subnet_v4 {
- local subnet_params="--tenant-id $TENANT_ID "
+ local project_id=$1
+ local subnet_params="--tenant-id $project_id "
subnet_params+="--ip_version 4 "
subnet_params+="--gateway $NETWORK_GATEWAY "
subnet_params+="--name $PRIVATE_SUBNET_NAME "
subnet_params+="$NET_ID $FIXED_RANGE"
local subnet_id
subnet_id=$(neutron subnet-create $subnet_params | grep ' id ' | get_field 2)
- die_if_not_set $LINENO subnet_id "Failure creating private IPv4 subnet for $TENANT_ID"
+ die_if_not_set $LINENO subnet_id "Failure creating private IPv4 subnet for $project_id"
echo $subnet_id
}
# Create private IPv6 subnet
function _neutron_create_private_subnet_v6 {
+ local project_id=$1
die_if_not_set $LINENO IPV6_RA_MODE "IPV6 RA Mode not set"
die_if_not_set $LINENO IPV6_ADDRESS_MODE "IPV6 Address Mode not set"
local ipv6_modes="--ipv6-ra-mode $IPV6_RA_MODE --ipv6-address-mode $IPV6_ADDRESS_MODE"
- local subnet_params="--tenant-id $TENANT_ID "
+ local subnet_params="--tenant-id $project_id "
subnet_params+="--ip_version 6 "
subnet_params+="--gateway $IPV6_PRIVATE_NETWORK_GATEWAY "
subnet_params+="--name $IPV6_PRIVATE_SUBNET_NAME "
subnet_params+="$NET_ID $FIXED_RANGE_V6 $ipv6_modes"
local ipv6_subnet_id
ipv6_subnet_id=$(neutron subnet-create $subnet_params | grep ' id ' | get_field 2)
- die_if_not_set $LINENO ipv6_subnet_id "Failure creating private IPv6 subnet for $TENANT_ID"
+ die_if_not_set $LINENO ipv6_subnet_id "Failure creating private IPv6 subnet for $project_id"
echo $ipv6_subnet_id
}
@@ -1453,9 +1449,13 @@
function setup_neutron_debug {
if [[ "$Q_USE_DEBUG_COMMAND" == "True" ]]; then
public_net_id=`_get_net_id $PUBLIC_NETWORK_NAME`
- neutron-debug --os-tenant-name admin --os-username admin --os-password $ADMIN_PASSWORD probe-create --device-owner compute $public_net_id
+ if [[ -n $public_net_id ]]; then
+ neutron-debug --os-tenant-name admin --os-username admin --os-password $ADMIN_PASSWORD probe-create --device-owner compute $public_net_id
+ fi
private_net_id=`_get_net_id $PRIVATE_NETWORK_NAME`
- neutron-debug --os-tenant-name admin --os-username admin --os-password $ADMIN_PASSWORD probe-create --device-owner compute $private_net_id
+ if [[ -n $private_net_id ]]; then
+ neutron-debug --os-tenant-name admin --os-username admin --os-password $ADMIN_PASSWORD probe-create --device-owner compute $private_net_id
+ fi
fi
}
diff --git a/lib/neutron_plugins/ml2 b/lib/neutron_plugins/ml2
index 0483ef1..30e1b03 100644
--- a/lib/neutron_plugins/ml2
+++ b/lib/neutron_plugins/ml2
@@ -40,12 +40,6 @@
# L3 Plugin to load for ML2
ML2_L3_PLUGIN=${ML2_L3_PLUGIN:-neutron.services.l3_router.l3_router_plugin.L3RouterPlugin}
-# Underlying path MTU for physical network managing br-tun; use '-' instead of
-# ':-' to allow people to explicitly override this to blank, to disable
-# automatic MTU calculation for tunnelled tenant networks
-Q_ML2_PLUGIN_PATH_MTU=${Q_ML2_PLUGIN_PATH_MTU-1500}
-
-
function populate_ml2_config {
CONF=$1
SECTION=$2
@@ -83,12 +77,6 @@
echo "WARNING - The ml2 plugin is using local tenant networks, with no connectivity between hosts."
fi
- # Enable ml2 mtu calculation mechanism for networks by providing path mtu
- # value for physical devices that are used for br-tun traffic
- if [[ "$ENABLE_TENANT_TUNNELS" == "True" ]] && [[ "$Q_ML2_PLUGIN_PATH_MTU" != "" ]]; then
- iniset /$Q_PLUGIN_CONF_FILE ml2 path_mtu "$Q_ML2_PLUGIN_PATH_MTU"
- fi
-
# Allow for overrding VLAN configuration (for example, to configure provider
# VLANs) by first checking if Q_ML2_PLUGIN_VLAN_TYPE_OPTIONS is set.
if [ "$Q_ML2_PLUGIN_VLAN_TYPE_OPTIONS" == "" ]; then
diff --git a/lib/neutron_plugins/openvswitch_agent b/lib/neutron_plugins/openvswitch_agent
index 339d5fd..aba2587 100644
--- a/lib/neutron_plugins/openvswitch_agent
+++ b/lib/neutron_plugins/openvswitch_agent
@@ -96,17 +96,17 @@
# Set up domU's L2 agent:
- # Create a bridge "br-$GUEST_INTERFACE_DEFAULT"
- _neutron_ovs_base_add_bridge "br-$GUEST_INTERFACE_DEFAULT"
- # Add $GUEST_INTERFACE_DEFAULT to that bridge
- sudo ovs-vsctl -- --may-exist add-port "br-$GUEST_INTERFACE_DEFAULT" $GUEST_INTERFACE_DEFAULT
+ # Create a bridge "br-$VLAN_INTERFACE"
+ _neutron_ovs_base_add_bridge "br-$VLAN_INTERFACE"
+ # Add $VLAN_INTERFACE to that bridge
+ sudo ovs-vsctl -- --may-exist add-port "br-$VLAN_INTERFACE" $VLAN_INTERFACE
# Create external bridge and add port
_neutron_ovs_base_add_bridge $PUBLIC_BRIDGE
- sudo ovs-vsctl -- --may-exist add-port $PUBLIC_BRIDGE $PUBLIC_INTERFACE_DEFAULT
+ sudo ovs-vsctl -- --may-exist add-port $PUBLIC_BRIDGE $PUBLIC_INTERFACE
# Set bridge mappings to "physnet1:br-$GUEST_INTERFACE_DEFAULT"
- iniset "/$Q_PLUGIN_CONF_FILE.domU" ovs bridge_mappings "physnet1:br-$GUEST_INTERFACE_DEFAULT,physnet-ex:$PUBLIC_BRIDGE"
+ iniset "/$Q_PLUGIN_CONF_FILE.domU" ovs bridge_mappings "physnet1:br-$VLAN_INTERFACE,physnet-ex:$PUBLIC_BRIDGE"
# Set integration bridge to domU's
iniset "/$Q_PLUGIN_CONF_FILE.domU" ovs integration_bridge $OVS_BRIDGE
# Set root wrap
diff --git a/lib/nova b/lib/nova
index 3a5a47f..8823e1d 100644
--- a/lib/nova
+++ b/lib/nova
@@ -34,6 +34,7 @@
# Set up default directories
GITDIR["python-novaclient"]=$DEST/python-novaclient
+GITDIR["os-vif"]=$DEST/os-vif
NOVA_DIR=$DEST/nova
# Nova virtual environment
@@ -420,17 +421,17 @@
get_or_create_endpoint \
"compute_legacy" \
"$REGION_NAME" \
- "$nova_api_url/v2/\$(tenant_id)s" \
- "$nova_api_url/v2/\$(tenant_id)s" \
- "$nova_api_url/v2/\$(tenant_id)s"
+ "$nova_api_url/v2/\$(project_id)s" \
+ "$nova_api_url/v2/\$(project_id)s" \
+ "$nova_api_url/v2/\$(project_id)s"
get_or_create_service "nova" "compute" "Nova Compute Service"
get_or_create_endpoint \
"compute" \
"$REGION_NAME" \
- "$nova_api_url/v2.1/\$(tenant_id)s" \
- "$nova_api_url/v2.1/\$(tenant_id)s" \
- "$nova_api_url/v2.1/\$(tenant_id)s"
+ "$nova_api_url/v2.1" \
+ "$nova_api_url/v2.1" \
+ "$nova_api_url/v2.1"
fi
if is_service_enabled n-api; then
@@ -492,6 +493,8 @@
iniset $NOVA_CONF DEFAULT bindir "/usr/bin"
fi
+ iniset $NOVA_CONF privsep_osbrick helper_command "sudo nova-rootwrap \$rootwrap_config privsep-helper --config-file $NOVA_CONF"
+
if is_service_enabled n-api; then
if is_service_enabled n-api-meta; then
# If running n-api-meta as a separate service
@@ -569,7 +572,7 @@
iniset $NOVA_CONF vnc enabled true
iniset $NOVA_CONF vnc vncserver_listen "$VNCSERVER_LISTEN"
iniset $NOVA_CONF vnc vncserver_proxyclient_address "$VNCSERVER_PROXYCLIENT_ADDRESS"
- iniset $NOVA_CONF DEFAULT novncproxy_host "$NOVA_SERVICE_LISTEN_ADDRESS"
+ iniset $NOVA_CONF vnc novncproxy_host "$NOVA_SERVICE_LISTEN_ADDRESS"
iniset $NOVA_CONF vnc xvpvncproxy_host "$NOVA_SERVICE_LISTEN_ADDRESS"
else
iniset $NOVA_CONF vnc enabled false
@@ -645,7 +648,7 @@
if is_service_enabled n-cell; then
cp $NOVA_CONF $NOVA_CELLS_CONF
iniset $NOVA_CELLS_CONF database connection `database_connection_url $NOVA_CELLS_DB`
- iniset $NOVA_CELLS_CONF DEFAULT rabbit_virtual_host child_cell
+ iniset $NOVA_CELLS_CONF oslo_messaging_rabbit rabbit_virtual_host child_cell
iniset $NOVA_CELLS_CONF DEFAULT dhcpbridge_flagfile $NOVA_CELLS_CONF
iniset $NOVA_CELLS_CONF cells enable True
iniset $NOVA_CELLS_CONF cells cell_type compute
@@ -707,6 +710,10 @@
recreate_database $NOVA_API_DB
$NOVA_BIN_DIR/nova-manage api_db sync
+
+ # Run online migrations on the new databases
+ # Needed for flavor conversion
+ $NOVA_BIN_DIR/nova-manage db online_data_migrations
fi
create_nova_cache_dir
@@ -728,6 +735,13 @@
# install_nova() - Collect source and prepare
function install_nova {
+
+ # Install os-vif
+ if use_library_from_git "os-vif"; then
+ git_clone_by_name "os-vif"
+ setup_dev_lib "os-vif"
+ fi
+
if is_service_enabled n-cpu && [[ -r $NOVA_PLUGINS/hypervisor-$VIRT_DRIVER ]]; then
install_nova_hypervisor
fi
@@ -918,6 +932,27 @@
stop_nova_compute
}
+# create_instance_types(): Create default flavors
+function create_flavors {
+ if is_service_enabled n-api; then
+ if ! openstack flavor list | grep -q ds512M; then
+ # Note that danms hates these flavors and apologizes for sdague
+ openstack flavor create --id c1 --ram 256 --disk 0 --vcpus 1 cirros256
+ openstack flavor create --id d1 --ram 512 --disk 5 --vcpus 1 ds512M
+ openstack flavor create --id d2 --ram 1024 --disk 10 --vcpus 1 ds1G
+ openstack flavor create --id d3 --ram 2048 --disk 10 --vcpus 2 ds2G
+ openstack flavor create --id d4 --ram 4096 --disk 20 --vcpus 4 ds4G
+ fi
+
+ if ! openstack flavor list | grep -q m1.tiny; then
+ openstack flavor create --id 1 --ram 512 --disk 1 --vcpus 1 m1.tiny
+ openstack flavor create --id 2 --ram 2048 --disk 20 --vcpus 1 m1.small
+ openstack flavor create --id 3 --ram 4096 --disk 40 --vcpus 2 m1.medium
+ openstack flavor create --id 4 --ram 8192 --disk 80 --vcpus 4 m1.large
+ openstack flavor create --id 5 --ram 16384 --disk 160 --vcpus 8 m1.xlarge
+ fi
+ fi
+}
# Restore xtrace
$_XTRACE_LIB_NOVA
diff --git a/lib/swift b/lib/swift
index 8c5aa5e..f47608c 100644
--- a/lib/swift
+++ b/lib/swift
@@ -149,6 +149,11 @@
# Toggle for deploying Swift under HTTPD + mod_wsgi
SWIFT_USE_MOD_WSGI=${SWIFT_USE_MOD_WSGI:-False}
+# A space-separated list of storage node IPs that
+# should be used to create the Swift rings
+SWIFT_STORAGE_IPS=${SWIFT_STORAGE_IPS:-}
+
+
# Functions
# ---------
@@ -495,21 +500,21 @@
iniset ${swift_node_config} DEFAULT bind_ip ${SWIFT_SERVICE_LISTEN_ADDRESS}
done
- # Set new accounts in tempauth to match keystone tenant/user (to make testing easier)
- iniset ${SWIFT_CONFIG_PROXY_SERVER} filter:tempauth user_swifttenanttest1_swiftusertest1 "testing .admin"
- iniset ${SWIFT_CONFIG_PROXY_SERVER} filter:tempauth user_swifttenanttest2_swiftusertest2 "testing2 .admin"
- iniset ${SWIFT_CONFIG_PROXY_SERVER} filter:tempauth user_swifttenanttest1_swiftusertest3 "testing3 .admin"
+ # Set new accounts in tempauth to match keystone project/user (to make testing easier)
+ iniset ${SWIFT_CONFIG_PROXY_SERVER} filter:tempauth user_swiftprojecttest1_swiftusertest1 "testing .admin"
+ iniset ${SWIFT_CONFIG_PROXY_SERVER} filter:tempauth user_swiftprojecttest2_swiftusertest2 "testing2 .admin"
+ iniset ${SWIFT_CONFIG_PROXY_SERVER} filter:tempauth user_swiftprojecttest1_swiftusertest3 "testing3 .admin"
testfile=${SWIFT_CONF_DIR}/test.conf
cp ${SWIFT_DIR}/test/sample.conf ${testfile}
# Set accounts for functional tests
- iniset ${testfile} func_test account swifttenanttest1
+ iniset ${testfile} func_test account swiftprojecttest1
iniset ${testfile} func_test username swiftusertest1
iniset ${testfile} func_test username3 swiftusertest3
- iniset ${testfile} func_test account2 swifttenanttest2
+ iniset ${testfile} func_test account2 swiftprojecttest2
iniset ${testfile} func_test username2 swiftusertest2
- iniset ${testfile} func_test account4 swifttenanttest4
+ iniset ${testfile} func_test account4 swiftprojecttest4
iniset ${testfile} func_test username4 swiftusertest4
iniset ${testfile} func_test password4 testing4
iniset ${testfile} func_test domain4 swift_test
@@ -603,13 +608,13 @@
# since we want to make it compatible with tempauth which use
# underscores for separators.
-# Tenant User Roles Domain
-# ------------------------------------------------------------------
-# service swift service default
-# swifttenanttest1 swiftusertest1 admin default
-# swifttenanttest1 swiftusertest3 anotherrole default
-# swifttenanttest2 swiftusertest2 admin default
-# swifttenanttest4 swiftusertest4 admin swift_test
+# Project User Roles Domain
+# -------------------------------------------------------------------
+# service swift service default
+# swiftprojecttest1 swiftusertest1 admin default
+# swiftprojecttest1 swiftusertest3 anotherrole default
+# swiftprojecttest2 swiftusertest2 admin default
+# swiftprojecttest4 swiftusertest4 admin swift_test
function create_swift_accounts {
# Defines specific passwords used by ``tools/create_userrc.sh``
@@ -631,47 +636,47 @@
get_or_create_endpoint \
"object-store" \
"$REGION_NAME" \
- "$SWIFT_SERVICE_PROTOCOL://$SERVICE_HOST:$SWIFT_DEFAULT_BIND_PORT/v1/AUTH_\$(tenant_id)s" \
+ "$SWIFT_SERVICE_PROTOCOL://$SERVICE_HOST:$SWIFT_DEFAULT_BIND_PORT/v1/AUTH_\$(project_id)s" \
"$SWIFT_SERVICE_PROTOCOL://$SERVICE_HOST:$SWIFT_DEFAULT_BIND_PORT" \
- "$SWIFT_SERVICE_PROTOCOL://$SERVICE_HOST:$SWIFT_DEFAULT_BIND_PORT/v1/AUTH_\$(tenant_id)s"
+ "$SWIFT_SERVICE_PROTOCOL://$SERVICE_HOST:$SWIFT_DEFAULT_BIND_PORT/v1/AUTH_\$(project_id)s"
- local swift_tenant_test1
- swift_tenant_test1=$(get_or_create_project swifttenanttest1 default)
- die_if_not_set $LINENO swift_tenant_test1 "Failure creating swift_tenant_test1"
+ local swift_project_test1
+ swift_project_test1=$(get_or_create_project swiftprojecttest1 default)
+ die_if_not_set $LINENO swift_project_test1 "Failure creating swift_project_test1"
SWIFT_USER_TEST1=$(get_or_create_user swiftusertest1 $swiftusertest1_password \
"default" "test@example.com")
die_if_not_set $LINENO SWIFT_USER_TEST1 "Failure creating SWIFT_USER_TEST1"
- get_or_add_user_project_role admin $SWIFT_USER_TEST1 $swift_tenant_test1
+ get_or_add_user_project_role admin $SWIFT_USER_TEST1 $swift_project_test1
local swift_user_test3
swift_user_test3=$(get_or_create_user swiftusertest3 $swiftusertest3_password \
"default" "test3@example.com")
die_if_not_set $LINENO swift_user_test3 "Failure creating swift_user_test3"
- get_or_add_user_project_role $another_role $swift_user_test3 $swift_tenant_test1
+ get_or_add_user_project_role $another_role $swift_user_test3 $swift_project_test1
- local swift_tenant_test2
- swift_tenant_test2=$(get_or_create_project swifttenanttest2 default)
- die_if_not_set $LINENO swift_tenant_test2 "Failure creating swift_tenant_test2"
+ local swift_project_test2
+ swift_project_test2=$(get_or_create_project swiftprojecttest2 default)
+ die_if_not_set $LINENO swift_project_test2 "Failure creating swift_project_test2"
local swift_user_test2
swift_user_test2=$(get_or_create_user swiftusertest2 $swiftusertest2_password \
"default" "test2@example.com")
die_if_not_set $LINENO swift_user_test2 "Failure creating swift_user_test2"
- get_or_add_user_project_role admin $swift_user_test2 $swift_tenant_test2
+ get_or_add_user_project_role admin $swift_user_test2 $swift_project_test2
local swift_domain
swift_domain=$(get_or_create_domain swift_test 'Used for swift functional testing')
die_if_not_set $LINENO swift_domain "Failure creating swift_test domain"
- local swift_tenant_test4
- swift_tenant_test4=$(get_or_create_project swifttenanttest4 $swift_domain)
- die_if_not_set $LINENO swift_tenant_test4 "Failure creating swift_tenant_test4"
+ local swift_project_test4
+ swift_project_test4=$(get_or_create_project swiftprojecttest4 $swift_domain)
+ die_if_not_set $LINENO swift_project_test4 "Failure creating swift_project_test4"
local swift_user_test4
swift_user_test4=$(get_or_create_user swiftusertest4 $swiftusertest4_password \
$swift_domain "test4@example.com")
die_if_not_set $LINENO swift_user_test4 "Failure creating swift_user_test4"
- get_or_add_user_project_role admin $swift_user_test4 $swift_tenant_test4
+ get_or_add_user_project_role admin $swift_user_test4 $swift_project_test4
}
# init_swift() - Initialize rings
@@ -693,14 +698,35 @@
swift-ring-builder container.builder create ${SWIFT_PARTITION_POWER_SIZE} ${SWIFT_REPLICAS} 1
swift-ring-builder account.builder create ${SWIFT_PARTITION_POWER_SIZE} ${SWIFT_REPLICAS} 1
- for node_number in ${SWIFT_REPLICAS_SEQ}; do
- swift-ring-builder object.builder add z${node_number}-${SWIFT_SERVICE_LOCAL_HOST}:$(( OBJECT_PORT_BASE + 10 * (node_number - 1) ))/sdb1 1
- swift-ring-builder container.builder add z${node_number}-${SWIFT_SERVICE_LOCAL_HOST}:$(( CONTAINER_PORT_BASE + 10 * (node_number - 1) ))/sdb1 1
- swift-ring-builder account.builder add z${node_number}-${SWIFT_SERVICE_LOCAL_HOST}:$(( ACCOUNT_PORT_BASE + 10 * (node_number - 1) ))/sdb1 1
- done
- swift-ring-builder object.builder rebalance
- swift-ring-builder container.builder rebalance
- swift-ring-builder account.builder rebalance
+ # The ring will be created on each node, and because the order of
+ # nodes is identical we can use a seed for rebalancing, making it
+ # possible to get a ring on each node that uses the same partition
+ # assignment.
+ if [[ -n $SWIFT_STORAGE_IPS ]]; then
+ local node_number
+ node_number=1
+
+ for node in ${SWIFT_STORAGE_IPS}; do
+ swift-ring-builder object.builder add z${node_number}-${node}:${OBJECT_PORT_BASE}/sdb1 1
+ swift-ring-builder container.builder add z${node_number}-${node}:${CONTAINER_PORT_BASE}/sdb1 1
+ swift-ring-builder account.builder add z${node_number}-${node}:${ACCOUNT_PORT_BASE}/sdb1 1
+ let "node_number=node_number+1"
+ done
+
+ else
+
+ for node_number in ${SWIFT_REPLICAS_SEQ}; do
+ swift-ring-builder object.builder add z${node_number}-${SWIFT_SERVICE_LOCAL_HOST}:$(( OBJECT_PORT_BASE + 10 * (node_number - 1) ))/sdb1 1
+ swift-ring-builder container.builder add z${node_number}-${SWIFT_SERVICE_LOCAL_HOST}:$(( CONTAINER_PORT_BASE + 10 * (node_number - 1) ))/sdb1 1
+ swift-ring-builder account.builder add z${node_number}-${SWIFT_SERVICE_LOCAL_HOST}:$(( ACCOUNT_PORT_BASE + 10 * (node_number - 1) ))/sdb1 1
+ done
+ fi
+
+ # We use a seed for rebalancing. Doing this allows us to create
+ # identical rings on multiple nodes if SWIFT_STORAGE_IPS is the same
+ swift-ring-builder object.builder rebalance 42
+ swift-ring-builder container.builder rebalance 42
+ swift-ring-builder account.builder rebalance 42
} && popd >/dev/null
# Create cache dir
diff --git a/lib/tempest b/lib/tempest
index 19b63d1..fd98c94 100644
--- a/lib/tempest
+++ b/lib/tempest
@@ -180,14 +180,14 @@
# See ``lib/keystone`` where these users and tenants are set up
local admin_username=${ADMIN_USERNAME:-admin}
- local admin_tenant_name=${ADMIN_TENANT_NAME:-admin}
+ local admin_project_name=${ADMIN_TENANT_NAME:-admin}
local admin_domain_name=${ADMIN_DOMAIN_NAME:-Default}
local tempest_username=${TEMPEST_USERNAME:-demo}
- local tempest_tenant_name=${TEMPEST_TENANT_NAME:-demo}
+ local tempest_project_name=${TEMPEST_TENANT_NAME:-demo}
local alt_username=${ALT_USERNAME:-alt_demo}
- local alt_tenant_name=${ALT_TENANT_NAME:-alt_demo}
- local admin_tenant_id
- admin_tenant_id=$(openstack project list | awk "/ admin / { print \$2 }")
+ local alt_project_name=${ALT_TENANT_NAME:-alt_demo}
+ local admin_project_id
+ admin_project_id=$(openstack project list | awk "/ admin / { print \$2 }")
if is_service_enabled nova; then
# If ``DEFAULT_INSTANCE_TYPE`` is not declared, use the new behavior
@@ -263,8 +263,8 @@
if [[ "$TEMPEST_HAS_ADMIN" == "True" ]]; then
iniset $TEMPEST_CONFIG auth admin_username $admin_username
iniset $TEMPEST_CONFIG auth admin_password "$password"
- iniset $TEMPEST_CONFIG auth admin_tenant_name $admin_tenant_name
- iniset $TEMPEST_CONFIG auth admin_tenant_id $admin_tenant_id
+ iniset $TEMPEST_CONFIG auth admin_tenant_name $admin_project_name
+ iniset $TEMPEST_CONFIG auth admin_tenant_id $admin_project_id
iniset $TEMPEST_CONFIG auth admin_domain_name $admin_domain_name
fi
if [ "$ENABLE_IDENTITY_V2" == "False" ]; then
@@ -317,26 +317,6 @@
fi
# Compute Features
- # Run ``verify_tempest_config -ur`` to retrieve enabled extensions on API endpoints
- # NOTE(mtreinish): This must be done after auth settings are added to the tempest config
- local tmp_cfg_file
- tmp_cfg_file=$(mktemp)
- cd $TEMPEST_DIR
- if [[ "$OFFLINE" != "True" ]]; then
- tox -revenv --notest
- fi
- # NOTE(mtreinish): Respect constraints on tempest verify-config venv
- tox -evenv -- pip install -c $REQUIREMENTS_DIR/upper-constraints.txt -r requirements.txt
- tox -evenv -- tempest verify-config -uro $tmp_cfg_file
-
- local compute_api_extensions=${COMPUTE_API_EXTENSIONS:-"all"}
- if [[ ! -z "$DISABLE_COMPUTE_API_EXTENSIONS" ]]; then
- # Enabled extensions are either the ones explicitly specified or those available on the API endpoint
- compute_api_extensions=${COMPUTE_API_EXTENSIONS:-$(iniget $tmp_cfg_file compute-feature-enabled api_extensions | tr -d " ")}
- # Remove disabled extensions
- compute_api_extensions=$(remove_disabled_extensions $compute_api_extensions $DISABLE_COMPUTE_API_EXTENSIONS)
- fi
-
# Set the microversion range for compute tests.
# This is used to run the Nova microversions tests.
# Setting [None, latest] range of microversion which allow Tempest to run all microversions tests.
@@ -365,7 +345,6 @@
iniset $TEMPEST_CONFIG compute-feature-enabled live_migration ${LIVE_MIGRATION_AVAILABLE:-False}
iniset $TEMPEST_CONFIG compute-feature-enabled change_password False
iniset $TEMPEST_CONFIG compute-feature-enabled block_migration_for_live_migration ${USE_BLOCK_MIGRATION_FOR_LIVE_MIGRATION:-False}
- iniset $TEMPEST_CONFIG compute-feature-enabled api_extensions $compute_api_extensions
# TODO(mriedem): Remove the preserve_ports flag when Juno is end of life.
iniset $TEMPEST_CONFIG compute-feature-enabled preserve_ports True
# TODO(gilliard): Remove the live_migrate_paused_instances flag when Juno is end of life.
@@ -380,6 +359,8 @@
iniset $TEMPEST_CONFIG compute-feature-enabled shelve False
# Cells doesn't support hot-plugging virtual interfaces.
iniset $TEMPEST_CONFIG compute-feature-enabled interface_attach False
+ # Cells v1 doesn't support the rescue/unrescue tests in Tempest
+ iniset $TEMPEST_CONFIG compute-feature-enabled rescue False
if [[ -z "$DEFAULT_INSTANCE_TYPE" ]]; then
# Cells supports resize but does not currently work with devstack
@@ -400,15 +381,6 @@
iniset $TEMPEST_CONFIG network-feature-enabled ipv6 "$IPV6_ENABLED"
iniset $TEMPEST_CONFIG network-feature-enabled ipv6_subnet_attributes "$IPV6_SUBNET_ATTRIBUTES_ENABLED"
- local network_api_extensions=${NETWORK_API_EXTENSIONS:-"all"}
- if [[ ! -z "$DISABLE_NETWORK_API_EXTENSIONS" ]]; then
- # Enabled extensions are either the ones explicitly specified or those available on the API endpoint
- network_api_extensions=${NETWORK_API_EXTENSIONS:-$(iniget $tmp_cfg_file network-feature-enabled api_extensions | tr -d " ")}
- # Remove disabled extensions
- network_api_extensions=$(remove_disabled_extensions $network_api_extensions $DISABLE_NETWORK_API_EXTENSIONS)
- fi
- iniset $TEMPEST_CONFIG network-feature-enabled api_extensions $network_api_extensions
-
# Orchestration Tests
if is_service_enabled heat; then
if [[ ! -z "$HEAT_CFN_IMAGE_URL" ]]; then
@@ -441,16 +413,6 @@
# Telemetry
iniset $TEMPEST_CONFIG telemetry-feature-enabled events "True"
- # Object Store
- local object_storage_api_extensions=${OBJECT_STORAGE_API_EXTENSIONS:-"all"}
- if [[ ! -z "$DISABLE_OBJECT_STORAGE_API_EXTENSIONS" ]]; then
- # Enabled extensions are either the ones explicitly specified or those available on the API endpoint
- object_storage_api_extensions=${OBJECT_STORAGE_API_EXTENSIONS:-$(iniget $tmp_cfg_file object-storage-feature-enabled discoverable_apis | tr -d " ")}
- # Remove disabled extensions
- object_storage_api_extensions=$(remove_disabled_extensions $object_storage_api_extensions $DISABLE_STORAGE_API_EXTENSIONS)
- fi
- iniset $TEMPEST_CONFIG object-storage-feature-enabled discoverable_apis $object_storage_api_extensions
-
# Validation
iniset $TEMPEST_CONFIG validation run_validation ${TEMPEST_RUN_VALIDATION:-False}
iniset $TEMPEST_CONFIG validation ip_version_for_ssh 4
@@ -464,15 +426,6 @@
# TODO(ynesenenko): Remove the volume_services flag when Liberty and Kilo will correct work with host info.
iniset $TEMPEST_CONFIG volume-feature-enabled volume_services True
- local volume_api_extensions=${VOLUME_API_EXTENSIONS:-"all"}
- if [[ ! -z "$DISABLE_VOLUME_API_EXTENSIONS" ]]; then
- # Enabled extensions are either the ones explicitly specified or those available on the API endpoint
- volume_api_extensions=${VOLUME_API_EXTENSIONS:-$(iniget $tmp_cfg_file volume-feature-enabled api_extensions | tr -d " ")}
- # Remove disabled extensions
- volume_api_extensions=$(remove_disabled_extensions $volume_api_extensions $DISABLE_VOLUME_API_EXTENSIONS)
- fi
- iniset $TEMPEST_CONFIG volume-feature-enabled api_extensions $volume_api_extensions
-
if ! is_service_enabled c-bak; then
iniset $TEMPEST_CONFIG volume-feature-enabled backup False
fi
@@ -553,13 +506,25 @@
iniset $TEMPEST_CONFIG service_available cinder "False"
fi
- # Auth
+ # Run tempest configuration utilities. This must be done last during configuration to
+ # ensure as complete a config as possible already exists
+
+ # NOTE(mtreinish): Respect constraints on tempest verify-config venv
+ local tmp_cfg_file
+ tmp_cfg_file=$(mktemp)
+ cd $TEMPEST_DIR
+ if [[ "$OFFLINE" != "True" ]]; then
+ tox -revenv --notest
+ fi
+ tox -evenv -- pip install -c $REQUIREMENTS_DIR/upper-constraints.txt -r requirements.txt
+
+ # Auth:
iniset $TEMPEST_CONFIG auth tempest_roles "Member"
if [[ $TEMPEST_USE_TEST_ACCOUNTS == "True" ]]; then
if [[ $TEMPEST_HAS_ADMIN == "True" ]]; then
- tempest-account-generator -c $TEMPEST_CONFIG --os-username $admin_username --os-password "$password" --os-tenant-name $admin_tenant_name -r $TEMPEST_CONCURRENCY --with-admin etc/accounts.yaml
+ tox -evenv -- tempest-account-generator -c $TEMPEST_CONFIG --os-username $admin_username --os-password "$password" --os-tenant-name $admin_project_name -r $TEMPEST_CONCURRENCY --with-admin etc/accounts.yaml
else
- tempest-account-generator -c $TEMPEST_CONFIG --os-username $admin_username --os-password "$password" --os-tenant-name $admin_tenant_name -r $TEMPEST_CONCURRENCY etc/accounts.yaml
+ tox -evenv -- tempest-account-generator -c $TEMPEST_CONFIG --os-username $admin_username --os-password "$password" --os-tenant-name $admin_project_name -r $TEMPEST_CONCURRENCY etc/accounts.yaml
fi
iniset $TEMPEST_CONFIG auth use_dynamic_credentials False
iniset $TEMPEST_CONFIG auth test_accounts_file "etc/accounts.yaml"
@@ -570,6 +535,47 @@
iniset $TEMPEST_CONFIG auth use_dynamic_credentials ${TEMPEST_ALLOW_TENANT_ISOLATION:-True}
fi
+ # API Extensions
+ # Run ``verify_tempest_config -ur`` to retrieve enabled extensions on API endpoints
+ # NOTE(mtreinish): This must be done after auth settings are added to the tempest config
+ tox -evenv -- tempest verify-config -uro $tmp_cfg_file
+ # Nova API extensions
+ local compute_api_extensions=${COMPUTE_API_EXTENSIONS:-"all"}
+ if [[ ! -z "$DISABLE_COMPUTE_API_EXTENSIONS" ]]; then
+ # Enabled extensions are either the ones explicitly specified or those available on the API endpoint
+ compute_api_extensions=${COMPUTE_API_EXTENSIONS:-$(iniget $tmp_cfg_file compute-feature-enabled api_extensions | tr -d " ")}
+ # Remove disabled extensions
+ compute_api_extensions=$(remove_disabled_extensions $compute_api_extensions $DISABLE_COMPUTE_API_EXTENSIONS)
+ fi
+ iniset $TEMPEST_CONFIG compute-feature-enabled api_extensions $compute_api_extensions
+ # Neutron API Extensions
+ local network_api_extensions=${NETWORK_API_EXTENSIONS:-"all"}
+ if [[ ! -z "$DISABLE_NETWORK_API_EXTENSIONS" ]]; then
+ # Enabled extensions are either the ones explicitly specified or those available on the API endpoint
+ network_api_extensions=${NETWORK_API_EXTENSIONS:-$(iniget $tmp_cfg_file network-feature-enabled api_extensions | tr -d " ")}
+ # Remove disabled extensions
+ network_api_extensions=$(remove_disabled_extensions $network_api_extensions $DISABLE_NETWORK_API_EXTENSIONS)
+ fi
+ iniset $TEMPEST_CONFIG network-feature-enabled api_extensions $network_api_extensions
+ # Swift API Extensions
+ local object_storage_api_extensions=${OBJECT_STORAGE_API_EXTENSIONS:-"all"}
+ if [[ ! -z "$DISABLE_OBJECT_STORAGE_API_EXTENSIONS" ]]; then
+ # Enabled extensions are either the ones explicitly specified or those available on the API endpoint
+ object_storage_api_extensions=${OBJECT_STORAGE_API_EXTENSIONS:-$(iniget $tmp_cfg_file object-storage-feature-enabled discoverable_apis | tr -d " ")}
+ # Remove disabled extensions
+ object_storage_api_extensions=$(remove_disabled_extensions $object_storage_api_extensions $DISABLE_STORAGE_API_EXTENSIONS)
+ fi
+ iniset $TEMPEST_CONFIG object-storage-feature-enabled discoverable_apis $object_storage_api_extensions
+ # Cinder API Extensions
+ local volume_api_extensions=${VOLUME_API_EXTENSIONS:-"all"}
+ if [[ ! -z "$DISABLE_VOLUME_API_EXTENSIONS" ]]; then
+ # Enabled extensions are either the ones explicitly specified or those available on the API endpoint
+ volume_api_extensions=${VOLUME_API_EXTENSIONS:-$(iniget $tmp_cfg_file volume-feature-enabled api_extensions | tr -d " ")}
+ # Remove disabled extensions
+ volume_api_extensions=$(remove_disabled_extensions $volume_api_extensions $DISABLE_VOLUME_API_EXTENSIONS)
+ fi
+ iniset $TEMPEST_CONFIG volume-feature-enabled api_extensions $volume_api_extensions
+
# Restore IFS
IFS=$ifs
}
diff --git a/lib/tls b/lib/tls
index f4740b8..ca57ed4 100644
--- a/lib/tls
+++ b/lib/tls
@@ -257,6 +257,14 @@
local common_name=$3
local alt_names=$4
+ if [ "$common_name" != "$SERVICE_HOST" ]; then
+ if [[ -z "$alt_names" ]]; then
+ alt_names="DNS:$SERVICE_HOST"
+ else
+ alt_names="$alt_names,DNS:$SERVICE_HOST"
+ fi
+ fi
+
# Only generate the certificate if it doesn't exist yet on the disk
if [ ! -r "$ca_dir/$cert_name.crt" ]; then
# Generate a signing request
diff --git a/stack.sh b/stack.sh
index 5c16f04..739d939 100755
--- a/stack.sh
+++ b/stack.sh
@@ -185,7 +185,7 @@
# Warn users who aren't on an explicitly supported distro, but allow them to
# override check and attempt installation with ``FORCE=yes ./stack``
-if [[ ! ${DISTRO} =~ (trusty|vivid|wily|7.0|wheezy|sid|testing|jessie|f22|f23|rhel7|kvmibm1) ]]; then
+if [[ ! ${DISTRO} =~ (trusty|wily|xenial|7.0|wheezy|sid|testing|jessie|f22|f23|rhel7|kvmibm1) ]]; then
echo "WARNING: this script has not been tested on $DISTRO"
if [[ "$FORCE" != "yes" ]]; then
die $LINENO "If you wish to run this script anyway run with FORCE=yes"
@@ -799,7 +799,7 @@
fi
fi
-if is_service_enabled s-proxy; then
+if is_service_enabled swift; then
if is_service_enabled ceilometer; then
install_ceilometermiddleware
fi
@@ -1004,10 +1004,6 @@
bootstrap_keystone
fi
- if is_service_enabled tls-proxy; then
- export OS_CACERT=$INT_CA_DIR/ca-chain.pem
- fi
-
# Rather than just export these, we write them out to a
# intermediate userrc file that can also be used to debug if
# something goes wrong between here and running
@@ -1028,6 +1024,10 @@
EOF
+ if is_service_enabled tls-proxy; then
+ echo "export OS_CACERT=$INT_CA_DIR/ca-chain.pem" >> $TOP_DIR/userrc_early
+ fi
+
source $TOP_DIR/userrc_early
create_keystone_accounts
@@ -1118,7 +1118,7 @@
# Storage Service
# ---------------
-if is_service_enabled s-proxy; then
+if is_service_enabled swift; then
echo_summary "Configuring Swift"
init_swift
fi
@@ -1172,7 +1172,7 @@
# Only run the services specified in ``ENABLED_SERVICES``
# Launch Swift Services
-if is_service_enabled s-proxy; then
+if is_service_enabled swift; then
echo_summary "Starting Swift"
start_swift
fi
@@ -1251,6 +1251,7 @@
if is_service_enabled nova; then
echo_summary "Starting Nova"
start_nova
+ create_flavors
fi
if is_service_enabled cinder; then
echo_summary "Starting Cinder"
diff --git a/stackrc b/stackrc
index 74d507c..17d6047 100644
--- a/stackrc
+++ b/stackrc
@@ -14,9 +14,6 @@
LC_ALL=C
export LC_ALL
-# Make tracing more educational
-export PS4='+ ${BASH_SOURCE:-}:${FUNCNAME[0]:-}:L${LINENO:-}: '
-
# Find the other rc files
RC_DIR=$(cd $(dirname "${BASH_SOURCE:-$0}") && pwd)
@@ -132,6 +129,16 @@
source $RC_DIR/.localrc.auto
fi
+# Use color for logging output (only available if syslog is not used)
+LOG_COLOR=$(trueorfalse True LOG_COLOR)
+
+# Make tracing more educational
+if [[ "$LOG_COLOR" == "True" ]]; then
+ export PS4='+\[$(tput setaf 242)\]$(short_source)\[$(tput sgr0)\] '
+else
+ export PS4='+ $(short_source): '
+fi
+
# Configure Identity API version: 2.0, 3
IDENTITY_API_VERSION=${IDENTITY_API_VERSION:-2.0}
@@ -477,6 +484,10 @@
GITREPO["os-brick"]=${OS_BRICK_REPO:-${GIT_BASE}/openstack/os-brick.git}
GITBRANCH["os-brick"]=${OS_BRICK_BRANCH:-master}
+# os-vif library to communicate between Neutron to Nova
+GITREPO["os-vif"]=${OS_VIF_REPO:-${GIT_BASE}/openstack/os-vif.git}
+GITBRANCH["os-vif"]=${OS_VIF_BRANCH:-master}
+
# ironic common lib
GITREPO["ironic-lib"]=${IRONIC_LIB_REPO:-${GIT_BASE}/openstack/ironic-lib.git}
GITBRANCH["ironic-lib"]=${IRONIC_LIB_BRANCH:-master}
@@ -785,9 +796,6 @@
SYSLOG_HOST=${SYSLOG_HOST:-$HOST_IP}
SYSLOG_PORT=${SYSLOG_PORT:-516}
-# Use color for logging output (only available if syslog is not used)
-LOG_COLOR=$(trueorfalse True LOG_COLOR)
-
# Set global ``GIT_DEPTH=<number>`` to limit the history depth of the git clone
# Set to 0 to disable shallow cloning
GIT_DEPTH=${GIT_DEPTH:-0}
diff --git a/tests/test_functions.sh b/tests/test_functions.sh
index be8dc5e..8aae23d 100755
--- a/tests/test_functions.sh
+++ b/tests/test_functions.sh
@@ -9,6 +9,22 @@
source $TOP/tests/unittest.sh
+echo "Testing generate_hex_string()"
+
+VAL=$(generate_hex_string 16)
+if [[ ${#VAL} -eq 32 ]]; then
+ passed "OK"
+else
+ failed "generate_hex_string 16 failed ${#VAL}"
+fi
+
+VAL=$(generate_hex_string 32)
+if [[ ${#VAL} -eq 64 ]]; then
+ passed "OK"
+else
+ failed "generate_hex_string 32 failed ${#VAL}"
+fi
+
echo "Testing die_if_not_set()"
bash -c "source $TOP/functions; X=`echo Y && true`; die_if_not_set $LINENO X 'not OK'"
diff --git a/tests/test_libs_from_pypi.sh b/tests/test_libs_from_pypi.sh
index ee11fd2..f01db6d 100755
--- a/tests/test_libs_from_pypi.sh
+++ b/tests/test_libs_from_pypi.sh
@@ -42,7 +42,7 @@
ALL_LIBS+=" debtcollector os-brick automaton futurist oslo.service"
ALL_LIBS+=" oslo.cache oslo.reports osprofiler"
ALL_LIBS+=" keystoneauth ironic-lib neutron-lib oslo.privsep"
-ALL_LIBS+=" diskimage-builder"
+ALL_LIBS+=" diskimage-builder os-vif"
# Generate the above list with
# echo ${!GITREPO[@]}
diff --git a/tools/create_userrc.sh b/tools/create_userrc.sh
index 3325c5e..a7278e4 100755
--- a/tools/create_userrc.sh
+++ b/tools/create_userrc.sh
@@ -7,6 +7,22 @@
# Warning: This script just for development purposes
set -o errexit
+
+# short_source prints out the current location of the caller in a way
+# that strips redundant directories. This is useful for PS4
+# usage. Needed before we start tracing due to how we set
+# PS4. Normally we'd pick this up from stackrc, but that's not sourced
+# here.
+function short_source {
+ saveIFS=$IFS
+ IFS=" "
+ called=($(caller 0))
+ IFS=$saveIFS
+ file=${called[2]}
+ file=${file#$RC_DIR/}
+ printf "%-40s " "$file:${called[1]}:${called[0]}"
+}
+
set -o xtrace
ACCOUNT_DIR=./accrc
diff --git a/tools/generate-devstack-plugins-list.py b/tools/generate-devstack-plugins-list.py
index 1fa5501..089a6ef 100644
--- a/tools/generate-devstack-plugins-list.py
+++ b/tools/generate-devstack-plugins-list.py
@@ -23,9 +23,12 @@
# working directory
# * network access to https://git.openstack.org/cgit
+import logging
import json
import requests
+logging.basicConfig(level=logging.DEBUG)
+
url = 'https://review.openstack.org/projects/'
# This is what a project looks like
@@ -37,6 +40,8 @@
'''
def is_in_openstack_namespace(proj):
+ # only interested in openstack namespace (e.g. not retired
+ # stackforge, etc)
return proj.startswith('openstack/')
# Rather than returning a 404 for a nonexistent file, cgit delivers a
@@ -48,12 +53,15 @@
if len(r.text) > 0:
return True
else:
- False
+ return False
+logging.debug("Getting project list from %s" % url)
r = requests.get(url)
projects = sorted(filter(is_in_openstack_namespace, json.loads(r.text[4:])))
+logging.debug("Found %d projects" % len(projects))
found_plugins = filter(has_devstack_plugin, projects)
for project in found_plugins:
- print project[10:]
+ # strip of openstack/
+ print(project[10:])
diff --git a/tools/generate-devstack-plugins-list.sh b/tools/generate-devstack-plugins-list.sh
old mode 100644
new mode 100755
index be3f60a..95f1331
--- a/tools/generate-devstack-plugins-list.sh
+++ b/tools/generate-devstack-plugins-list.sh
@@ -38,6 +38,17 @@
# current working directory, it will be prepended or appended to
# the generated reStructuredText plugins table respectively.
+# Print the title underline for a RST table. Argument is the length
+# of the first column, second column is assumed to be "URL"
+function title_underline {
+ local len=$1
+ while [[ $len -gt 0 ]]; do
+ printf "="
+ len=$(( len - 1))
+ done
+ printf " ===\n"
+}
+
(
declare -A plugins
@@ -47,13 +58,31 @@
sorted_plugins=$(python tools/generate-devstack-plugins-list.py)
-for k in ${sorted_plugins}; do
- project=${k:0:28}
- giturl="git://git.openstack.org/openstack/${k:0:26}"
- printf "|%-28s|%-73s|\n" "${project}" "${giturl}"
- printf "+----------------------------+-------------------------------------------------------------------------+\n"
+# find the length of the name column & pad
+name_col_len=$(echo "${sorted_plugins}" | wc -L)
+name_col_len=$(( name_col_len + 2 ))
+
+# ====================== ===
+# Plugin Name URL
+# ====================== ===
+# foobar `git://... <http://...>`__
+# ...
+
+printf "\n\n"
+title_underline ${name_col_len}
+printf "%-${name_col_len}s %s\n" "Plugin Name" "URL"
+title_underline ${name_col_len}
+
+for plugin in ${sorted_plugins}; do
+ giturl="git://git.openstack.org/openstack/${plugin}"
+ gitlink="https://git.openstack.org/cgit/openstack/${plugin}"
+ printf "%-${name_col_len}s %s\n" "${plugin}" "\`${giturl} <${gitlink}>\`__"
done
+title_underline ${name_col_len}
+
+printf "\n\n"
+
if [[ -r data/devstack-plugins-registry.footer ]]; then
cat data/devstack-plugins-registry.footer
fi
diff --git a/tools/install_pip.sh b/tools/install_pip.sh
index 2a9d813..dfa4f42 100755
--- a/tools/install_pip.sh
+++ b/tools/install_pip.sh
@@ -2,16 +2,12 @@
# **install_pip.sh**
-# install_pip.sh [--pip-version <version>] [--use-get-pip] [--force]
-#
# Update pip and friends to a known common version
# Assumptions:
-# - update pip to $INSTALL_PIP_VERSION
# - if USE_PYTHON3=True, PYTHON3_VERSION refers to a version already installed
set -o errexit
-set -o xtrace
# Keep track of the current directory
TOOLS_DIR=$(cd $(dirname "$0") && pwd)
@@ -23,6 +19,9 @@
# Import common functions
source $TOP_DIR/stackrc
+# don't start tracing until after we've sourced the world
+set -o xtrace
+
FILES=$TOP_DIR/files
PIP_GET_PIP_URL=https://bootstrap.pypa.io/get-pip.py
diff --git a/tools/worlddump.py b/tools/worlddump.py
index 72a257f..8c053e0 100755
--- a/tools/worlddump.py
+++ b/tools/worlddump.py
@@ -14,6 +14,7 @@
# License for the specific language governing permissions and limitations
# under the License.
+
"""Dump the state of the world for post mortem."""
import argparse
@@ -48,32 +49,56 @@
def warn(msg):
- print "WARN: %s" % msg
+ print("WARN: %s" % msg)
def _dump_cmd(cmd):
- print cmd
- print "-" * len(cmd)
- print
+ print(cmd)
+ print("-" * len(cmd))
+ print()
try:
subprocess.check_call(cmd, shell=True)
- print
+ print()
except subprocess.CalledProcessError as e:
- print "*** Failed to run '%(cmd)s': %(err)s" % {'cmd': cmd, 'err': e}
+ print("*** Failed to run '%(cmd)s': %(err)s" % {'cmd': cmd, 'err': e})
def _find_cmd(cmd):
if not spawn.find_executable(cmd):
- print "*** %s not found: skipping" % cmd
+ print("*** %s not found: skipping" % cmd)
return False
return True
def _header(name):
- print
- print name
- print "=" * len(name)
- print
+ print()
+ print(name)
+ print("=" * len(name))
+ print()
+
+
+def _bridge_list():
+ process = subprocess.Popen(['ovs-vsctl', 'list-br'], stdout=subprocess.PIPE)
+ stdout, _ = process.communicate()
+ return stdout.split()
+
+
+# This method gets a max openflow version supported by openvswitch.
+# For example 'ovs-ofctl --version' displays the following:
+#
+# ovs-ofctl (Open vSwitch) 2.0.2
+# Compiled Dec 9 2015 14:08:08
+# OpenFlow versions 0x1:0x4
+#
+# The above shows that openvswitch supports from OpenFlow10 to OpenFlow13.
+# This method gets max version searching 'OpenFlow versions 0x1:0x'.
+# And return a version value converted to an integer type.
+def _get_ofp_version():
+ process = subprocess.Popen(['ovs-ofctl', '--version'], stdout=subprocess.PIPE)
+ stdout, _ = process.communicate()
+ find_str = 'OpenFlow versions 0x1:0x'
+ offset = stdout.find(find_str)
+ return int(stdout[offset + len(find_str):-1]) - 1
def disk_space():
@@ -91,7 +116,7 @@
# if it doesn't look like an int, that's fine
pass
- print dfraw
+ print(dfraw)
def ebtables_dump():
@@ -139,15 +164,17 @@
if not _find_cmd('ovs-vsctl'):
return
- # NOTE(ihrachys): worlddump is used outside of devstack context (f.e. in
- # grenade), so there is no single place to determine the bridge names from.
- # Hardcode for now.
- bridges = ('br-int', 'br-tun', 'br-ex')
+ bridges = _bridge_list()
+ ofctl_cmds = ('show', 'dump-ports-desc', 'dump-ports', 'dump-flows')
+ ofp_max = _get_ofp_version()
+ vers = 'OpenFlow10'
+ for i in range(1, ofp_max + 1):
+ vers += ',OpenFlow1' + str(i)
_dump_cmd("sudo ovs-vsctl show")
- for bridge in bridges:
- _dump_cmd("sudo ovs-ofctl show %s" % bridge)
- for bridge in bridges:
- _dump_cmd("sudo ovs-ofctl dump-flows %s" % bridge)
+ for ofctl_cmd in ofctl_cmds:
+ for bridge in bridges:
+ args = {'vers': vers, 'cmd': ofctl_cmd, 'bridge': bridge}
+ _dump_cmd("sudo ovs-ofctl --protocols=%(vers)s %(cmd)s %(bridge)s" % args)
def process_list():
@@ -170,17 +197,17 @@
try:
subprocess.check_call(["pgrep","nova-compute"])
except subprocess.CalledProcessError:
- print "Skipping as nova-compute does not appear to be running"
+ print("Skipping as nova-compute does not appear to be running")
return
_dump_cmd("kill -s USR2 `pgrep nova-compute`")
- print "guru meditation report in nova-compute log"
+ print("guru meditation report in nova-compute log")
def main():
opts = get_options()
fname = filename(opts.dir, opts.name)
- print "World dumping... see %s for details" % fname
+ print("World dumping... see %s for details" % fname)
sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
with open(fname, 'w') as f:
os.dup2(f.fileno(), sys.stdout.fileno())
diff --git a/tox.ini b/tox.ini
index 3dfc377..4ec2939 100644
--- a/tox.ini
+++ b/tox.ini
@@ -18,6 +18,7 @@
-not \( -type d -name .?\* -prune \) \
-not \( -type d -name doc -prune \) \
-not \( -type d -name shocco -prune \) \
+ -not \( -type f -name localrc -prune \) \
-type f \
-not -name \*~ \
-not -name \*.md \
diff --git a/unstack.sh b/unstack.sh
index 7a7c945..83703ec 100755
--- a/unstack.sh
+++ b/unstack.sh
@@ -175,10 +175,6 @@
stop_dstat
fi
-if is_service_enabled zookeeper; then
- stop_zookeeper
-fi
-
# Clean up the remainder of the screen processes
SCREEN=$(which screen)
if [[ -n "$SCREEN" ]]; then