import requests, urllib3
urllib3.disable_warnings()
base = "https://<host>:8006/api2/json"
# Paso 1 — obtener ticket
r = requests.post(f"{base}/access/ticket",
data={"username": "<usuario>@pve", "password": "<contraseña>"},
verify=False)
d = r.json()["data"]
ticket, csrf = d["ticket"], d["CSRFPreventionToken"]
# Paso 2 — añadir ACL
r2 = requests.put(f"{base}/access/acl",
headers={"CSRFPreventionToken": csrf},
cookies={"PVEAuthCookie": ticket},
data={
"path": "/sdn/zones/localnetwork",
"roles": "PVESDNUser",
"tokens": "<usuario>@pve!<token-id>",
"propagate": "1"
},
verify=False)
print(r2.status_code, r2.text) # 200 {"data":null} = éxito