OPNsense Forum

International Forums => German - Deutsch => Topic started by: FriendOfCarlotta on May 18, 2018, 03:19:04 pm

Title: [SOLVED] Route via Api erstellen
Post by: FriendOfCarlotta on May 18, 2018, 03:19:04 pm
Hallo!

Ich möchte eine Route via Api mit Python 3 und requests erstellen:

Code: [Select]
apikey = 'xxx'
apisecret = 'xxx'
url = 'https://10.0.0.254/api/routes/routes/addroute'
requests.post(url, data=payload, verify=None, auth=(apikey, apisecret))

Payload sieht so aus:
Code: [Select]
{'route': {'network': '10.0.50.0/24', 'gateway': {'Null4': {'value': 'Null4 - 127.0.0.1', 'selected': 0}, 'Null6': {'value': 'Null6 - ::1', 'selected': 0}, 'VLAN_GW': {'value': 'VLAN_GW - 10.0.0.253', 'selected': 1}, 'WAN_DHCP': {'value': 'WAN_DHCP - 192.168.107.2', 'selected': 0}}, 'descr': 'vlan50', 'disabled': '0'}}

Der Post-Request liefert diese Fehlermeldung zurück:
Code: [Select]
{"errorMessage":"Error at /usr/local/opnsense/mvc/app/models/OPNsense/Routes/Route.php:59 - Undefined index:  (errno=8)"}

Andererseits kann ich via
Code: [Select]
/api/routes/routes/setroute/<uuid> mit dem identischen Payload eine existierende Route erfolgreich ändern.

Payload basiert auf dem, was
Code: [Select]
/api/routes/routes/getroute ohne uuid zurückliefert.

Was läuft hier falsch?

Viele Grüße, Thomas
Title: Re: Route via Api erstellen
Post by: fabian on May 18, 2018, 06:35:16 pm
erstellen und bearbeiten sind unterschiedliche endpoints. Auch die Daten schauen leicht anders aus. Add braucht die daten so:

Code: [Select]
'route':  {
  'descr': ''
  'disabled': '1'
  'gateway' : 'Null6'
  'network' '::1/128'
}
Title: Re: Route via Api erstellen
Post by: FriendOfCarlotta on May 18, 2018, 07:40:06 pm
Danke für die Antwort.

Wenn ich also z.B.
Code: [Select]
payload = '{"route":  {"descr": "vlan40", "disabled": "0", "gateway" : "VLAN_GW", "network": "10.0.40.0/24"}}' verwende, bekomme ich nur
Code: [Select]
<Response [200]> zurück. Nichts weiter. Route wird nicht angelegt.
Das Gateway 'VLAN_GW' funktioniert mit per Ui angelegten Routen problemlos.
Title: Re: Route via Api erstellen
Post by: fabian on May 18, 2018, 07:48:21 pm
glaub ich nicht - irgendwas muss im body stehen - und wenn es "{}" ist.
Title: Re: Route via Api erstellen
Post by: FriendOfCarlotta on May 18, 2018, 08:07:23 pm
Alles, was ich der response noch entlocken kann, ist:
Code: [Select]
>>> json.loads(request.text)
{'result': 'failed'}
Title: Re: Route via Api erstellen
Post by: fabian on May 18, 2018, 09:49:04 pm
ja - das ist dann ein anderes problem, denn hier steht der "echte" statuscode.
Den Code dazu findest du hier:
https://github.com/opnsense/core/blob/master/src/opnsense/mvc/app/controllers/OPNsense/Base/ApiMutableModelControllerBase.php#L273

Ich würde mal sagen, du machst da was beim Request falsch, da er offensichtlich nicht in das if rein springt.
Title: Re: Route via Api erstellen
Post by: FriendOfCarlotta on May 19, 2018, 12:55:59 pm
Der Request ist mMn Ok:
Code: [Select]
import json
import requests

apikey = 'xxx'
apisecret = 'xxx'
url = 'https://10.0.0.254/api/routes/routes/addroute'
payload = '{"route":{"descr":"vlan40","disabled":"0","gateway":"VLAN_GW","network":"10.0.40.0/24"}}'
res = requests.post(url, data=payload, verify=None, auth=(apikey, apisecret))
print(res)
print(json.loads(res.text))

<Response [200]>
{'result': 'failed'}

Code: [Select]
# cat /tmp/gateway_list.json
{"WAN_DHCP":"WAN_DHCP - 192.168.107.2","VLAN_GW":"VLAN_GW - 10.0.0.253","Null4":"Null4 - 127.0.0.1","Null6":"Null6 - ::1"}

Entspricht dem Wiki-Beispiel und verwendet die von dir vorgeschlagene Payload-Struktur.
Die so von Hand im Ui angelegte Route funktioniert.

Was mache ich da falsch? Kann man der Api nicht entlocken, welches Element der Datenstruktur ihr Schluckauf bereitet?
Title: Re: Route via Api erstellen
Post by: fabian on May 19, 2018, 05:21:43 pm
Du benutzt die Bibliothek vermutlich falsch:
http://docs.python-requests.org/en/master/user/quickstart/#more-complicated-post-requests

Die Library werde ich hier jetzt aber nicht erklären.
Title: Re: Route via Api erstellen
Post by: FriendOfCarlotta on May 19, 2018, 10:09:09 pm
Danke! Problem gelöst, siehe https://forum.opnsense.org/index.php?topic=8718.msg38810#msg38810