4 from flask
import Flask
5 from flask
import jsonify
6 from flask
import request
10 HOST = os.environ.get(
"LOCK_KEEPER_HOST")
11 USER = os.environ.get(
"LOCK_KEEPER_USER")
12 SECRET = os.environ.get(
"LOCK_KEEPER_SECRET")
17 client = paramiko.SSHClient()
18 client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
19 client.connect(hostname=HOST, username=USER, password=SECRET, port=PORT)
21 for command
in commands:
22 stdin, stdout, stderr = client.exec_command(command)
23 data.append((stdout.read() + stderr.read()).decode(
'utf-8'))
33 """Common port states: up, down.""" 34 commands = [
"ovs-ofctl mod-port br0 {} {}".
format(str(port), port_state)
40 test_data = (
'NXST_FLOW reply (xid=0x4):\n cookie=0x15, duration=422883.97' 41 '5s, table=0, n_packets=70278, n_bytes=17499222, idle_age=5, ' 42 'hard_age=65534, in_port=7 actions=output:8\n cookie=0x16, du' 43 'ration=422884.022s, table=0, n_packets=69701, n_bytes=173555' 44 '49, idle_age=4, hard_age=65534, in_port=51 actions=output:52' 59 start = string.find(pattern)
60 end = string.find(
' ', start)
63 return int(string[start + len(pattern):end])
67 data = raw[raw.find(
'\n') + 1:]
70 for x
in data.split(
'\n')
if x]
73 @app.route(
'/flows', methods=[
'GET'])
79 @app.route(
'/flows', methods=[
'POST'])
81 payload = request.get_json()
82 commands = [
'ovs-ofctl add-flow br0 in_port={in_port},' \
83 'actions=output={out_port}'.
format(**flow)
for flow
in payload]
85 return jsonify({
'status':
'ok'})
88 @app.route(
'/flows', methods=[
'DELETE'])
90 payload = request.get_json()
91 commands = [
'ovs-ofctl del-flows br0 in_port={in_port}'.
format(**flow)
94 return jsonify({
'status':
'ok'})
97 @app.route(
'/ports', methods=[
'POST'])
100 return jsonify({
'status':
'ok'})
103 @app.route(
'/ports', methods=[
'DELETE'])
106 return jsonify({
'status':
'ok'})
def execute_remote_commands(commands)
def parse_dump_flows(raw)
def execute_remote_command(command)
def change_ports_state(ports, port_state)
def int_from_str_by_pattern(string, pattern)