OPNsense
  • Home
  • Help
  • Search
  • Login
  • Register

  • OPNsense Forum »
  • International Forums »
  • German - Deutsch (Moderator: Patrick M. Hausen) »
  • [SOLVED] Route via Api erstellen
« previous next »
  • Print
Pages: [1]

Author Topic: [SOLVED] Route via Api erstellen  (Read 5633 times)

FriendOfCarlotta

  • Newbie
  • *
  • Posts: 13
  • Karma: 1
    • View Profile
[SOLVED] Route via Api erstellen
« 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
« Last Edit: May 19, 2018, 10:09:33 pm by FriendOfCarlotta »
Logged

fabian

  • Hero Member
  • *****
  • Posts: 2769
  • Karma: 200
  • OPNsense Contributor (Language, VPN, Proxy, etc.)
    • View Profile
    • Personal Homepage
Re: Route via Api erstellen
« Reply #1 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'
}
Logged

FriendOfCarlotta

  • Newbie
  • *
  • Posts: 13
  • Karma: 1
    • View Profile
Re: Route via Api erstellen
« Reply #2 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.
Logged

fabian

  • Hero Member
  • *****
  • Posts: 2769
  • Karma: 200
  • OPNsense Contributor (Language, VPN, Proxy, etc.)
    • View Profile
    • Personal Homepage
Re: Route via Api erstellen
« Reply #3 on: May 18, 2018, 07:48:21 pm »
glaub ich nicht - irgendwas muss im body stehen - und wenn es "{}" ist.
Logged

FriendOfCarlotta

  • Newbie
  • *
  • Posts: 13
  • Karma: 1
    • View Profile
Re: Route via Api erstellen
« Reply #4 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'}
Logged

fabian

  • Hero Member
  • *****
  • Posts: 2769
  • Karma: 200
  • OPNsense Contributor (Language, VPN, Proxy, etc.)
    • View Profile
    • Personal Homepage
Re: Route via Api erstellen
« Reply #5 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.
Logged

FriendOfCarlotta

  • Newbie
  • *
  • Posts: 13
  • Karma: 1
    • View Profile
Re: Route via Api erstellen
« Reply #6 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?
Logged

fabian

  • Hero Member
  • *****
  • Posts: 2769
  • Karma: 200
  • OPNsense Contributor (Language, VPN, Proxy, etc.)
    • View Profile
    • Personal Homepage
Re: Route via Api erstellen
« Reply #7 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.
Logged

FriendOfCarlotta

  • Newbie
  • *
  • Posts: 13
  • Karma: 1
    • View Profile
Re: Route via Api erstellen
« Reply #8 on: May 19, 2018, 10:09:09 pm »
Danke! Problem gelöst, siehe https://forum.opnsense.org/index.php?topic=8718.msg38810#msg38810
Logged

  • Print
Pages: [1]
« previous next »
  • OPNsense Forum »
  • International Forums »
  • German - Deutsch (Moderator: Patrick M. Hausen) »
  • [SOLVED] Route via Api erstellen
 

OPNsense is an OSS project © Deciso B.V. 2015 - 2024 All rights reserved
  • SMF 2.0.19 | SMF © 2021, Simple Machines
    Privacy Policy
    | XHTML | RSS | WAP2