# 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.

cryptography>=2.1 # BSD/Apache-2.0
python-dateutil>=2.5.3 # BSD
ipaddress>=1.0.17;python_version<'3.3' # PSF
pbr!=2.1.0,>=2.0.0 # Apache-2.0
octavia-lib>=1.0.0 # Apache-2.0
oslo.config>=5.2.0 # Apache-2.0
oslo.log>=3.36.0  # Apache-2.0
oslo.utils>=3.33.0  # Apache-2.0
oslotest>=3.2.0 # Apache-2.0
python-barbicanclient>=4.5.2 # Apache-2.0
pyOpenSSL>=17.1.0 # Apache-2.0
requests>=2.14.2  # Apache-2.0
six>=1.10.0 # MIT
tempest>=17.1.0 # Apache-2.0
tenacity>=4.4.0 # Apache-2.0
