NSX-T 3.2 API Patch Method Profile Missverständnis

Patch sollte eigentlich Post und Pull kombinieren, bei Segmenten klappt das wunderbar, bei den Profilen macht VMware das ganze leider nicht so.

Wer kennt das nicht, wenn man z.B. mit Python, Powershell oder auch Ansible mit APIs arbeitet, hat man sich schon an die Routine “GET -> Objekt nicht da, POST oder ah Objekt da, PUT” gewöhnt.

Genau so ging es mir beim Schreiben von ein paar kleinen Playbooks für NSX-T. Segmente, Transportzone und Co. sehr komfortable, da die Patch Methode verfügbar war.

Beim Erstellen des Uplink Profiles klappte alles nach wie vor super, doch der Test, den Display Namen vom Profile anzupassen, kam vom Server eine 404 zurück.

Kurzerhand mal bei VMware einen Service Request eröffnet, da es nicht der erste Bug in der API ist.

Nach ein wenig forschen bin ich auf GET POST / GET PUT umgestiegen und da hat sich der Payload genau um einen Parameter geändert: “_revision”.

Kurze Zeit später meldete VMware exakt das zurück, dass der Parameter “_revision” mitgegeben werden muss.

Kurz ausprobiert, updaten klappt, aber das Erstellen klappt nun nicht mehr. Hier kurz nun die Situation

payloadcreateupdate
ohne “_revision”oknot ok
mit “_revision”not okok

Hier die Calls

Endpoint:

https://nsxt/policy/api/v1/infra/host-switch-profiles/testprofile

Method: PATCH
Payload: ohne “_revision” zum Erstellen des Profiles

{
    "teaming": {
        "policy": "LOADBALANCE_SRC_MAC",
        "active_list": [
            {
                "uplink_name": "uplink1",
                "uplink_type": "PNIC"
            }
        ]
    },
    "transport_vlan": 19,
    "overlay_encap": "GENEVE",
    "resource_type": "PolicyUplinkHostSwitchProfile",
    "id": "testprofile",
    "display_name": "CustomLagProfile-LOADBALANCE_SRC_MAC",
    "path": "/infra/host-switch-profiles/uplinkProfile1",
    "relative_path": "uplinkProfile1",
    "parent_path": "/infra",
}

Method: PATCH
Payload: mit “_revision” zum Updaten des Profiles

{
    "teaming": {
        "policy": "LOADBALANCE_SRC_MAC",
        "active_list": [
            {
                "uplink_name": "uplink1",
                "uplink_type": "PNIC"
            }
        ]
    },
    "transport_vlan": 19,
    "overlay_encap": "GENEVE",
    "resource_type": "PolicyUplinkHostSwitchProfile",
    "id": "testprofile",
    "display_name": "CustomLagProfile-LOADBALANCE_SRC_MAC",
    "path": "/infra/host-switch-profiles/uplinkProfile1",
    "relative_path": "uplinkProfile1",
    "parent_path": "/infra",
    "_revision": 0
}

Langer Text, kurzer Sinn, PATCH ist für die meisten Anwendungen perfekt, aber für die Profile schwenkt man aktuell noch auf GET -> POST und GET -> PUT um.

Hoffen wir mal, das VMware das bald mal entsprechend im Sinne von Patch korrigiert.

Leave a Reply

Your email address will not be published. Required fields are marked *