# Copyright (c) 2015 SONATA-NFV and Paderborn University
# ALL RIGHTS RESERVED.
# 
# 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.
#
# Neither the name of the SONATA-NFV, Paderborn University
# nor the names of its contributors may be used to endorse or promote
# products derived from this software without specific prior written
# permission.
#
# This work has been performed in the framework of the SONATA project,
# funded by the European Commission under Grant number 671517 through
# the Horizon 2020 and 5G-PPP programmes. The authors would like to
# acknowledge the contributions of their colleagues of the SONATA
# partner consortium (www.sonata-nfv.eu).


- hosts: localhost
  tasks:
   - name: updates apt
     apt: update_cache=yes
     
   - name: install python3-dev
     apt: pkg=python3-dev state=installed

   - name: install libffi-dev
     apt: pkg=libffi-dev state=installed

   - name: install libssl-dev
     apt: pkg=libssl-dev state=installed

   - name: install pip3
     apt: pkg=python3-pip state=installed

   - name: install libevent-dev
     apt: pkg=libevent-dev state=installed

   - name: install libevent-dev
     apt: pkg=python-all-dev state=installed

   - name: find pip executable
     shell: "which pip3"
     register: pip_path

   - name: install setuptools
     pip: name=setuptools state=latest executable={{pip_path.stdout}}

   - name: install tabulate
     pip: name=tabulate state=latest executable={{pip_path.stdout}}

   - name: install argparse
     pip: name=argparse state=latest executable={{pip_path.stdout}}

   - name: install networkx
     pip: name=networkx version=1.11 executable={{pip_path.stdout}}

   - name: install six
     pip: name=six state=latest executable={{pip_path.stdout}}

   - name: install tinyrpc (fixed version to not break ryu)
     pip: name=tinyrpc version=1.0.3 executable={{pip_path.stdout}}

   - name: install ryu
     pip: name=ryu state=latest executable={{pip_path.stdout}}
     
   - name: install oslo.config
     pip: name=oslo.config state=latest executable={{pip_path.stdout}}

   - name: install pytest
     pip: name=pytest version=4.6.4 executable={{pip_path.stdout}}

   - name: install Flask
     pip: name=Flask  executable={{pip_path.stdout}}

   - name: install flask_restful
     pip: name=flask_restful state=latest executable={{pip_path.stdout}}

   - name: install requests
     pip: name=requests state=latest executable={{pip_path.stdout}}

   - name: install docker
     pip: name=docker version=2.0.2 executable={{pip_path.stdout}}

   - name: install prometheus_client
     pip: name=prometheus_client state=latest executable={{pip_path.stdout}}

   - name: install latest urllib3 (fix error urllib3.connection.match_hostname = match_hostname)
     pip: name=urllib3 version=1.21.1 executable={{pip_path.stdout}}

   - name: install iptc
     pip: name=python-iptables state=latest executable={{pip_path.stdout}}

   - name: install ipaddress
     pip: name=ipaddress state=latest executable={{pip_path.stdout}}

   - name: install gevent
     pip: name=gevent executable={{pip_path.stdout}}




