# Copyright 2017 Intel Research and Development Ireland Limited
# *************************************************************

# This file is part of OSM Monitoring module
# All Rights Reserved to Intel Corporation

# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at

#         http://www.apache.org/licenses/LICENSE-2.0

# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.

# For those usages not covered by the Apache License, Version 2.0 please
# contact: prithiv.mohan@intel.com or adrian.hoban@intel.com
aiokafka==0.6.0
requests==2.18.*
python-keystoneclient==3.15.*
six==1.11.*
peewee==3.8.*
pyyaml>=5.1.2
prometheus_client==0.4.*
gnocchiclient==7.0.*
pymysql==0.9.*
pyvcloud==19.1.*
python-ceilometerclient==2.9.*
peewee-migrate==1.1.*
python-novaclient==12.0.*
python-neutronclient==5.1.*
git+https://osm.etsi.org/gerrit/osm/common.git#egg=osm-common
git+https://osm.etsi.org/gerrit/osm/N2VC.git@v8.0.2#egg=n2vc
