vycontrol_vyos_api.py 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542
  1. import requests
  2. import json
  3. import pprint
  4. import sys
  5. import logging
  6. import vycontrol_vyos_api_lib as vapilib
  7. import perms
  8. def get_firewall_rulenumber(hostname, firewall, rulenumber):
  9. v = vapilib.api (
  10. hostname= hostname,
  11. api = "get",
  12. op = "showConfig",
  13. cmd = ["firewall", "name", firewall, "rule", rulenumber],
  14. description = "get_firewall_rulenumber",
  15. )
  16. return v
  17. def get_firewall_group(hostname):
  18. v = vapilib.api (
  19. hostname= hostname,
  20. api = "get",
  21. op = "showConfig",
  22. cmd = ["firewall", "group"],
  23. description = "get_firewall_group",
  24. )
  25. return v
  26. def set_firewall_rule_action(hostname, firewall_name, rulenumber, action):
  27. v = vapilib.api (
  28. hostname= hostname,
  29. api = "post",
  30. op = "set",
  31. cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "action", action],
  32. description = "set rule action",
  33. )
  34. return v
  35. def set_firewall_rule_disabled(hostname, firewall_name, rulenumber):
  36. v = vapilib.api (
  37. hostname= hostname,
  38. api = "post",
  39. op = "set",
  40. cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "disable"],
  41. description = "disable rule",
  42. )
  43. return v
  44. def set_firewall_rule_enabled(hostname, firewall_name, rulenumber):
  45. v = vapilib.api (
  46. hostname= hostname,
  47. api = "post",
  48. op = "delete",
  49. cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "disable"],
  50. description = "enable rule",
  51. )
  52. return v
  53. def set_firewall_rule_description(hostname, firewall_name, rulenumber, description):
  54. v = vapilib.api (
  55. hostname= hostname,
  56. api = "post",
  57. op = "set",
  58. cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "description", description],
  59. description = "set rule description",
  60. )
  61. return v
  62. def set_firewall_rule_protocol(hostname, firewall_name, rulenumber, protocol_criteria_txt):
  63. v = vapilib.api (
  64. hostname= hostname,
  65. api = "post",
  66. op = "set",
  67. cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "protocol", protocol_criteria_txt],
  68. description = "set rule protocol",
  69. )
  70. return v
  71. def set_firewall_rule_protocol_delete(hostname, firewall_name, rulenumber):
  72. v = vapilib.api (
  73. hostname= hostname,
  74. api = "post",
  75. op = "delete",
  76. cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "protocol"],
  77. description = "delete rule protocol",
  78. )
  79. return v
  80. def set_firewall_rule_destination_ports(hostname, firewall_name, rulenumber, ports):
  81. ports_text = ','.join(ports)
  82. v = vapilib.api (
  83. hostname= hostname,
  84. api = "post",
  85. op = "set",
  86. cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "destination", "port", ports_text],
  87. description = "set destination ports",
  88. )
  89. return v
  90. def set_firewall_rule_source_ports(hostname, firewall_name, rulenumber, ports):
  91. ports_text = ','.join(ports)
  92. v = vapilib.api (
  93. hostname= hostname,
  94. api = "post",
  95. op = "set",
  96. cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "source", "port", ports_text],
  97. description = "set source ports",
  98. )
  99. return v
  100. def set_firewall_rule_destination_ports_delete(hostname, firewall_name, rulenumber):
  101. v = vapilib.api (
  102. hostname= hostname,
  103. api = "post",
  104. op = "delete",
  105. cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "destination", "port"],
  106. description = "delete destination port",
  107. )
  108. return v
  109. def set_firewall_rule_source_ports_delete(hostname, firewall_name, rulenumber):
  110. v = vapilib.api (
  111. hostname= hostname,
  112. api = "post",
  113. op = "delete",
  114. cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "source", "port"],
  115. description = "delete source port",
  116. )
  117. return v
  118. def set_firewall_rule_tcpflags(hostname, firewall_name, rulenumber, tcpflags):
  119. if len(tcpflags) > 0:
  120. tcpflags_txt = ",".join(tcpflags)
  121. v = vapilib.api (
  122. hostname= hostname,
  123. api = "post",
  124. op = "set",
  125. cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "tcp", "flags", tcpflags_txt],
  126. description = "set tcpflags",
  127. )
  128. return v
  129. def set_firewall_rule_tcpflags_delete(hostname, firewall_name, rulenumber):
  130. v = vapilib.api (
  131. hostname= hostname,
  132. api = "post",
  133. op = "delete",
  134. cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "tcp", "flags"],
  135. description = "delete tcpflags",
  136. )
  137. return v
  138. def set_firewall_rule_source_address(hostname, firewall_name, rulenumber, address):
  139. v = vapilib.api (
  140. hostname= hostname,
  141. api = "post",
  142. op = "set",
  143. cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "source", "address", address],
  144. description = "set saddress",
  145. )
  146. return v
  147. def set_firewall_rule_destination_address(hostname, firewall_name, rulenumber, address):
  148. v = vapilib.api (
  149. hostname= hostname,
  150. api = "post",
  151. op = "set",
  152. cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "destination", "address", address],
  153. description = "set daddress",
  154. )
  155. return v
  156. def set_firewall_rule_source_address_delete(hostname, firewall_name, rulenumber):
  157. v = vapilib.api (
  158. hostname= hostname,
  159. api = "post",
  160. op = "delete",
  161. cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "source", "address"],
  162. description = "set saddress",
  163. )
  164. return v
  165. def set_firewall_rule_destination_address_delete(hostname, firewall_name, rulenumber):
  166. v = vapilib.api (
  167. hostname= hostname,
  168. api = "post",
  169. op = "delete",
  170. cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "destination", "address"],
  171. description = "set daddress",
  172. )
  173. return v
  174. def set_firewall_rule_source_addressgroup(hostname, firewall_name, rulenumber, saddressgroup):
  175. v = vapilib.api (
  176. hostname= hostname,
  177. api = "post",
  178. op = "set",
  179. cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "source", "group", "address-group", saddressgroup],
  180. description = "set saddressgroup",
  181. )
  182. return v
  183. def set_firewall_rule_destination_addressgroup(hostname, firewall_name, rulenumber, daddressgroup):
  184. v = vapilib.api (
  185. hostname= hostname,
  186. api = "post",
  187. op = "set",
  188. cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "destination", "group", "address-group", daddressgroup],
  189. description = "set daddressgroup",
  190. )
  191. return v
  192. def set_firewall_rule_source_addressgroup_delete(hostname, firewall_name, rulenumber):
  193. v = vapilib.api (
  194. hostname= hostname,
  195. api = "post",
  196. op = "delete",
  197. cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "source", "group", "address-group"],
  198. description = "delete saddressgroup",
  199. )
  200. return v
  201. def set_firewall_rule_destination_addressgroup_delete(hostname, firewall_name, rulenumber):
  202. v = vapilib.api (
  203. hostname= hostname,
  204. api = "post",
  205. op = "delete",
  206. cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "destination", "group", "address-group"],
  207. description = "delete daddressgroup",
  208. )
  209. return v
  210. def set_firewall_rule_source_networkgroup(hostname, firewall_name, rulenumber, snetworkgroup):
  211. v = vapilib.api (
  212. hostname= hostname,
  213. api = "post",
  214. op = "set",
  215. cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "source", "group", "network-group", snetworkgroup],
  216. description = "set snetworkgroup",
  217. )
  218. return v
  219. def set_firewall_rule_destination_networkgroup(hostname, firewall_name, rulenumber, dnetworkgroup):
  220. v = vapilib.api (
  221. hostname= hostname,
  222. api = "post",
  223. op = "set",
  224. cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "destination", "group", "network-group", dnetworkgroup],
  225. description = "set dnetworkgroup",
  226. )
  227. return v
  228. def set_firewall_rule_source_networkgroup_delete(hostname, firewall_name, rulenumber):
  229. v = vapilib.api (
  230. hostname= hostname,
  231. api = "post",
  232. op = "delete",
  233. cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "source", "group", "network-group"],
  234. description = "delete snetworkgroup",
  235. )
  236. return v
  237. def set_firewall_rule_destination_networkgroup_delete(hostname, firewall_name, rulenumber):
  238. v = vapilib.api (
  239. hostname= hostname,
  240. api = "post",
  241. op = "delete",
  242. cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "destination", "group", "network-group"],
  243. description = "delete dnetworkgroup",
  244. )
  245. return v
  246. def set_firewall_rule_source_portgroup(hostname, firewall_name, rulenumber, sportgroup):
  247. v = vapilib.api (
  248. hostname= hostname,
  249. api = "post",
  250. op = "set",
  251. cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "source", "group", "port-group", sportgroup],
  252. description = "set sportgroup",
  253. )
  254. return v
  255. def set_firewall_rule_destination_portgroup(hostname, firewall_name, rulenumber, dportgroup):
  256. v = vapilib.api (
  257. hostname= hostname,
  258. api = "post",
  259. op = "set",
  260. cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "destination", "group", "port-group", dportgroup],
  261. description = "set dportgroup",
  262. )
  263. return v
  264. def set_firewall_rule_source_portgroup_delete(hostname, firewall_name, rulenumber):
  265. v = vapilib.api (
  266. hostname= hostname,
  267. api = "post",
  268. op = "delete",
  269. cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "source", "group", "port-group"],
  270. description = "delete sportgroup",
  271. )
  272. return v
  273. def set_firewall_rule_destination_portgroup_delete(hostname, firewall_name, rulenumber):
  274. v = vapilib.api (
  275. hostname= hostname,
  276. api = "post",
  277. op = "delete",
  278. cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "destination", "group", "port-group"],
  279. description = "delete dportgroup",
  280. )
  281. return v
  282. def set_firewall_rule_source_mac(hostname, firewall_name, rulenumber, smac_txt):
  283. v = vapilib.api (
  284. hostname= hostname,
  285. api = "post",
  286. op = "set",
  287. cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "source", "mac-address", smac_txt],
  288. description = "set source mac",
  289. )
  290. return v
  291. def set_firewall_rule_source_mac_delete(hostname, firewall_name, rulenumber):
  292. v = vapilib.api (
  293. hostname= hostname,
  294. api = "post",
  295. op = "delete",
  296. cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "source", "mac-address"],
  297. description = "delete dportgroup",
  298. )
  299. return v
  300. def set_firewall_rule_packetstate(hostname, firewall_name, rulenumber, packetstate):
  301. v = vapilib.api (
  302. hostname= hostname,
  303. api = "post",
  304. op = "set",
  305. cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "state", packetstate, "enable"],
  306. description = "set packetstate",
  307. )
  308. return v
  309. def set_firewall_rule_packetstate_delete(hostname, firewall_name, rulenumber, packetstate):
  310. v = vapilib.api (
  311. hostname= hostname,
  312. api = "post",
  313. op = "delete",
  314. cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "state", packetstate],
  315. description = "delete packetstate",
  316. )
  317. return v
  318. def set_route_static(hostname, subnet, nexthop):
  319. v = vapilib.api (
  320. hostname= hostname,
  321. api = "post",
  322. op = "set",
  323. cmd = ["protocols", "static", "route", subnet, "next-hop", nexthop],
  324. description = "set_route_static",
  325. )
  326. return v
  327. def set_firewall_zone_localzone(hostname, zonename):
  328. v = vapilib.api (
  329. hostname= hostname,
  330. api = "post",
  331. op = "set",
  332. cmd = ["zone-policy", "zone", zonename, "local-zone"],
  333. description = "set_firewall_zone_localzone",
  334. )
  335. return v
  336. def set_firewall_zone_description(hostname, zonename, description):
  337. v = vapilib.api (
  338. hostname= hostname,
  339. api = "post",
  340. op = "set",
  341. cmd = ["zone-policy", "zone", zonename, "description", description],
  342. description = "set_firewall_zone_description",
  343. )
  344. return v
  345. def set_firewall_zone_defaultaction(hostname, zonename, defaultaction):
  346. v = vapilib.api (
  347. hostname= hostname,
  348. api = "post",
  349. op = "set",
  350. cmd = ["zone-policy", "zone", zonename, "default-action", defaultaction],
  351. description = "set_firewall_zone_defaultaction",
  352. )
  353. return v
  354. def set_firewall_zone_interface(hostname, zonename, interface):
  355. v = vapilib.api (
  356. hostname= hostname,
  357. api = "post",
  358. op = "set",
  359. cmd = ["zone-policy", "zone", zonename, "interface", interface],
  360. description = "set_firewall_zone_interface",
  361. )
  362. return v
  363. def delete_firewall_zone_interface(hostname, zonename, interface):
  364. v = vapilib.api (
  365. hostname= hostname,
  366. api = "post",
  367. op = "delete",
  368. cmd = ["zone-policy", "zone", zonename, "interface", interface],
  369. description = "delete_firewall_zone_interface",
  370. )
  371. return v
  372. def delete_firewall_zone(hostname, zonename):
  373. v = vapilib.api (
  374. hostname= hostname,
  375. api = "post",
  376. op = "delete",
  377. cmd = ["zone-policy", "zone", zonename],
  378. description = "delete_firewall_zone",
  379. )
  380. return v
  381. def get_firewall_zones(hostname):
  382. v = vapilib.api (
  383. hostname= hostname,
  384. api = "get",
  385. op = "showConfig",
  386. cmd = ["zone-policy"],
  387. description = "get_firewall_zones",
  388. )
  389. return v
  390. def get_firewall_zone(hostname, zone):
  391. v = vapilib.api (
  392. hostname= hostname,
  393. api = "get",
  394. op = "showConfig",
  395. cmd = ["zone-policy", "zone", zone],
  396. description = "get_firewall_zone",
  397. )
  398. return v
  399. def set_interface_firewall_ipv4(hostname, interface_type, interface_name, direction, firewall_name, vif=None):
  400. if vif == None:
  401. v = vapilib.api (
  402. hostname= hostname,
  403. api = "post",
  404. op = "set",
  405. cmd = ["interfaces", interface_type, interface_name, "firewall", direction, "name", firewall_name],
  406. description = "set_interface_firewall_ipv4",
  407. )
  408. else:
  409. v = vapilib.api (
  410. hostname= hostname,
  411. api = "post",
  412. op = "set",
  413. cmd = ["interfaces", interface_type, interface_name, "vif", vif, "firewall", direction, "name", firewall_name],
  414. description = "set_interface_firewall_ipv4",
  415. )
  416. return v
  417. def delete_interface_firewall_ipv4(hostname, interface_type, interface_name, direction, vif=None):
  418. if vif == None:
  419. v = vapilib.api (
  420. hostname= hostname,
  421. api = "post",
  422. op = "delete",
  423. cmd = ["interfaces", interface_type, interface_name, "firewall", direction],
  424. description = "delete_interface_firewall_ipv4",
  425. )
  426. else:
  427. v = vapilib.api (
  428. hostname= hostname,
  429. api = "post",
  430. op = "delete",
  431. cmd = ["interfaces", interface_type, interface_name, "vif", vif, "firewall", direction],
  432. description = "delete_interface_firewall_ipv4",
  433. )
  434. return v
  435. def set_interface_firewall_zone_addrule(hostname, dstzone, srczone, firewall):
  436. v = vapilib.api (
  437. hostname= hostname,
  438. api = "post",
  439. op = "set",
  440. cmd = ["zone-policy", "zone", dstzone, "from", srczone, "firewall", "name", firewall],
  441. description = "set_interface_firewall_zone_addrule",
  442. )
  443. return v
  444. def delete_interface_firewall_zone_rule(hostname, dstzone, srczone):
  445. v = vapilib.api (
  446. hostname= hostname,
  447. api = "post",
  448. op = "delete",
  449. cmd = ["zone-policy", "zone", dstzone, "from", srczone],
  450. description = "delete_interface_firewall_zone_rule",
  451. )
  452. return v
  453. def delete_interface_firewall_zone_rule_firewall(hostname, dstzone, srczone, firewall):
  454. v = vapilib.api (
  455. hostname= hostname,
  456. api = "post",
  457. op = "delete",
  458. cmd = ["zone-policy", "zone", dstzone, "from", srczone, "firewall", "name", firewall],
  459. description = "delete_interface_firewall_zone_rule",
  460. )
  461. return v
  462. def get_ntp(hostname):
  463. v = vapilib.api (
  464. hostname= hostname,
  465. api = "get",
  466. op = "showConfig",
  467. cmd = ["system","ntp"],
  468. description = "get_ntp",
  469. )
  470. return v