vyos.py 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. import requests
  2. import json
  3. import pprint
  4. import sys
  5. #curl -k -X POST -F data='{"op": "set", "path": ["interfaces", "dummy", "dum1", "address"], "value": "203.0.113.76/32"}' -F key=a6ffb742a8a631a65b07ab2026258629da2632fd https://179.127.12.142:44302/configure
  6. sys.path.append('/var/secrets')
  7. import local
  8. from config.models import Instance
  9. def get_url(hostname):
  10. # permcheck
  11. instance = Instance.objects.get(hostname=hostname)
  12. if instance.https == True:
  13. protocol = "https"
  14. else:
  15. protocol = "http"
  16. if (instance.port == None):
  17. instance.port = 443
  18. url = protocol + "://" + instance.hostname + ":" + str(instance.port)
  19. return url
  20. def get_url_manage(hostname):
  21. url = get_url(hostname) + '/config-file'
  22. return url
  23. def get_url_configure(hostname):
  24. url = get_url(hostname) + '/configure'
  25. return url
  26. def get_url_retrieve(hostname):
  27. url = get_url(hostname) + '/retrieve'
  28. return url
  29. def get_key(hostname):
  30. # permcheck
  31. instance = Instance.objects.get(hostname=hostname)
  32. return instance.key
  33. def get_hostname_prefered(request):
  34. hostname = None
  35. if request.session.get('hostname', None) != None:
  36. hostname = request.session.get('hostname', None)
  37. if hostname == None:
  38. instance = Instance.objects.get(main=True)
  39. hostname = instance.hostname
  40. return hostname
  41. #data='{"op": "showConfig", "path": ["interfaces", "dummy"]}
  42. def instance_getall():
  43. instances = Instance.objects.all()
  44. return instances
  45. def conntry(hostname):
  46. cmd = {"op": "showConfig", "path": ["interfaces"]}
  47. print(json.dumps(cmd))
  48. post = {'key': get_key(hostname), 'data': json.dumps(cmd)}
  49. print(post)
  50. # curl -X POST -F data='{"op": "showConfig", "path": ["interfaces", "dummy"]}' -F key=qwerty http://127.0.0.1:8080/retrieve
  51. # {"success": true, "data": " /* So very dummy */\n dummy dum0 {\n address 192.168.168.1/32\n address 192.168.168.2/32\n /* That is a description */\n description \"Test interface\"\n }\n dummy dum1 {\n address 203.0.113.76/32\n address 203.0.113.79/32\n }\n", "error": null}
  52. print(get_url_retrieve(hostname))
  53. try:
  54. resp = requests.post(get_url_retrieve(hostname), verify=False, data=post, timeout=15)
  55. except requests.exceptions.ConnectionError:
  56. return False
  57. print(resp.status_code)
  58. if (resp.status_code == 200):
  59. return True
  60. pprint.pprint(resp)
  61. pprint.pprint(resp.json())
  62. return False
  63. def getall(hostname="179.127.12.142"):
  64. #cmd = {"op": "save", "file": "/config/config.boot"}
  65. cmd = {"op": "showConfig", "path": ["interfaces", "dummy"]}
  66. print(json.dumps(cmd))
  67. post = {'key': get_key(hostname), 'data': json.dumps(cmd)}
  68. print(post)
  69. # curl -X POST -F data='{"op": "showConfig", "path": ["interfaces", "dummy"]}' -F key=qwerty http://127.0.0.1:8080/retrieve
  70. # {"success": true, "data": " /* So very dummy */\n dummy dum0 {\n address 192.168.168.1/32\n address 192.168.168.2/32\n /* That is a description */\n description \"Test interface\"\n }\n dummy dum1 {\n address 203.0.113.76/32\n address 203.0.113.79/32\n }\n", "error": null}
  71. try:
  72. resp = requests.post(get_url_retrieve(hostname), verify=False, data=post, timeout=15)
  73. except requests.exceptions.ConnectionError:
  74. return False
  75. print(resp.status_code)
  76. pprint.pprint(resp)
  77. pprint.pprint(resp.json())
  78. if resp.status_code != 200:
  79. # This means something went wrong.
  80. #raise ApiError('POST /tasks/ {}'.format(resp.status_code))
  81. return "erro"
  82. #for todo_item in resp.json():
  83. #print('{} {}'.format(todo_item['id'], todo_item['summary']))
  84. return resp
  85. def get_interfaces(hostname="179.127.12.142"):
  86. cmd = {"op": "showConfig", "path": ["interfaces"]}
  87. print(json.dumps(cmd))
  88. post = {'key': get_key(hostname), 'data': json.dumps(cmd)}
  89. print(post)
  90. # curl -X POST -F data='{"op": "showConfig", "path": ["interfaces", "dummy"]}' -F key=qwerty http://127.0.0.1:8080/retrieve
  91. # {"success": true, "data": " /* So very dummy */\n dummy dum0 {\n address 192.168.168.1/32\n address 192.168.168.2/32\n /* That is a description */\n description \"Test interface\"\n }\n dummy dum1 {\n address 203.0.113.76/32\n address 203.0.113.79/32\n }\n", "error": null}
  92. try:
  93. resp = requests.post(get_url_retrieve(hostname), verify=False, data=post, timeout=15)
  94. except requests.exceptions.ConnectionError:
  95. return False
  96. print(resp.status_code)
  97. pprint.pprint(resp)
  98. pprint.pprint(resp.json())
  99. if resp.status_code != 200:
  100. # This means something went wrong.
  101. #raise ApiError('POST /tasks/ {}'.format(resp.status_code))
  102. return "erro"
  103. #for todo_item in resp.json():
  104. #print('{} {}'.format(todo_item['id'], todo_item['summary']))
  105. result1 = resp.json()
  106. print(result1['data'])
  107. #result2 = json.loads(result1['data'])
  108. pprint.pprint(result1)
  109. return result1['data']
  110. def get_interface(interface_type, interface_name, hostname):
  111. cmd = {"op": "showConfig", "path": ["interfaces", interface_type, interface_name]}
  112. print(json.dumps(cmd))
  113. post = {'key': get_key(hostname), 'data': json.dumps(cmd)}
  114. print(post)
  115. # curl -X POST -F data='{"op": "showConfig", "path": ["interfaces", "dummy"]}' -F key=qwerty http://127.0.0.1:8080/retrieve
  116. # {"success": true, "data": " /* So very dummy */\n dummy dum0 {\n address 192.168.168.1/32\n address 192.168.168.2/32\n /* That is a description */\n description \"Test interface\"\n }\n dummy dum1 {\n address 203.0.113.76/32\n address 203.0.113.79/32\n }\n", "error": null}
  117. try:
  118. resp = requests.post(get_url_retrieve(hostname), verify=False, data=post, timeout=15)
  119. except requests.exceptions.ConnectionError:
  120. return False
  121. print(resp.status_code)
  122. pprint.pprint(resp)
  123. pprint.pprint(resp.json())
  124. if resp.status_code != 200:
  125. # This means something went wrong.
  126. #raise ApiError('POST /tasks/ {}'.format(resp.status_code))
  127. return "erro"
  128. #for todo_item in resp.json():
  129. #print('{} {}'.format(todo_item['id'], todo_item['summary']))
  130. result1 = resp.json()
  131. print(result1['data'])
  132. #result2 = json.loads(result1['data'])
  133. pprint.pprint(result1)
  134. return result1['data']
  135. def get_firewall_all(hostname):
  136. cmd = {"op": "showConfig", "path": ["firewall"]}
  137. print(json.dumps(cmd))
  138. post = {'key': get_key(hostname), 'data': json.dumps(cmd)}
  139. print(post)
  140. # curl -X POST -F data='{"op": "showConfig", "path": ["interfaces", "dummy"]}' -F key=qwerty http://127.0.0.1:8080/retrieve
  141. # {"success": true, "data": " /* So very dummy */\n dummy dum0 {\n address 192.168.168.1/32\n address 192.168.168.2/32\n /* That is a description */\n description \"Test interface\"\n }\n dummy dum1 {\n address 203.0.113.76/32\n address 203.0.113.79/32\n }\n", "error": null}
  142. try:
  143. resp = requests.post(get_url_retrieve(hostname), verify=False, data=post, timeout=15)
  144. except requests.exceptions.ConnectionError:
  145. return False
  146. print(resp.status_code)
  147. pprint.pprint(resp)
  148. pprint.pprint(resp.json())
  149. if resp.status_code != 200:
  150. # This means something went wrong.
  151. #raise ApiError('POST /tasks/ {}'.format(resp.status_code))
  152. return "erro"
  153. #for todo_item in resp.json():
  154. #print('{} {}'.format(todo_item['id'], todo_item['summary']))
  155. result1 = resp.json()
  156. print(result1['data'])
  157. #result2 = json.loads(result1['data'])
  158. pprint.pprint(result1)
  159. return result1['data']