#! /usr/bin/env python

import requests

from requests.auth import HTTPBasicAuth
import sys



if len(sys.argv) != 6:
    print "usage: create-flow onos-node name device in-port out-port"
    sys.exit(1)

node = sys.argv[1]
name = sys.argv[2]
device = sys.argv[3]
inPort = sys.argv[4]
outPort = sys.argv[5]

flowJsonTemplate = \
    '{{' + \
        '"priority": 1,' + \
        '"isPermanent": true,' + \
        '"treatment": {{' + \
            '"instructions": [' + \
                '{{' + \
                    '"type": "OUTPUT",' + \
                    '"port": {}' + \
                '}}' + \
            ']' + \
        '}},' + \
        '"selector": {{' + \
            '"criteria": [' + \
                '{{' + \
                    '"type": "IN_PORT",' + \
                    '"port": {}' + \
                '}}' + \
            ']' + \
        '}}' + \
    '}}'

flowJson = flowJsonTemplate.format(inPort, outPort)
intentRequest = requests.post('http://' + node + ':8181/onos/v1/flows/' + device,
                              auth=HTTPBasicAuth('onos', 'rocks'),
                              data=flowJson)

if intentRequest.status_code != 201:
    print intentRequest.text
    sys.exit(1)

location = intentRequest.headers["location"]
print "@stc " + name + "Location=" + location
sys.exit(0)



