# The order of packages is significant, because pip processes them in the order
# of appearance. Changing the order has an impact on the overall integration
# process, which may cause wedges in the gate later.
eventlet!=0.18.3,!=0.20.1,<0.21.0,>=0.18.2 # MIT
keystoneauth1>=3.2.0 # Apache-2.0
oslo.config>=4.6.0 # Apache-2.0
oslo.log>=3.30.0 # Apache-2.0
oslo.messaging>=5.29.0 # Apache-2.0
paramiko>=2.0.0 # LGPLv2.1+
python-cinderclient>=3.2.0 # Apache-2.0
gnocchiclient>=3.3.1 # Apache-2.0
python-heatclient>=1.10.0 # Apache-2.0
python-neutronclient>=6.3.0 # Apache-2.0
python-novaclient>=9.1.0 # Apache-2.0
python-swiftclient>=3.2.0 # Apache-2.0
python-zaqarclient>=1.0.0 # Apache-2.0
testtools>=1.4.0 # MIT
testscenarios>=0.4 # Apache-2.0/BSD
tempest>=16.1.0 # Apache-2.0
gabbi>=1.35.0 # Apache-2.0
kombu!=4.0.2,>=4.0.0 # BSD
