Preview — pending review
This reference is generated from the platform API contract and is still under review. Operations, fields, and descriptions can change before publication.
Update an IPsec (Phase 2) policy
Updates the mutable fields of one IPsec policy - exactly the fields neutron marks allow_put on
ipsecpolicies (name, description, transformProtocol, authAlgorithm, encryptionAlgorithm,
encapsulationMode, lifetimeUnits, lifetimeValue, pfs) and nothing else. Omitted fields are unchanged.
A policy that is in use cannot be updated: neutron-VPNaaS raises IPsecPolicyInUse from
update_ipsecpolicy when any site connection references it, so this endpoint refuses with 409 CONFLICT,
code DEPENDENCY_BLOCKED and details.usedBy listing the referencing connections.
Validation: vpnIpsecPolicyId must exist in the scope (404); supplied values must be enumerated values
neutron accepts and lifetimeValue at least 60 (-> 422); duplicate name -> 409.
Async & state: Asynchronous; 202 with provisioningState PENDING_UPDATE, settled by the worker.
Errors: 401; 403; 404; 409 in-use or duplicate name; 412 stale If-Match; 422; 500.
Idempotency/Concurrency: Idempotency-Key is optional (recommended); If-Match optional.
bearerTokenAuthorizationBearer <token>An API token (pc_live_…) or a service-account key (sak_live_…), created in Identity & Access Management and sent as Authorization: Bearer <token>. Requests are rate limited per credential and per tenant: every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset, and a refused request gets 429 RATE_LIMITED with Retry-After.
scopeId*stringOpaque ownership+authorization scope resolving to tenant + subscription + project.
vpnIpsecPolicyId*stringIdentifier of the IPsec (Phase 2) policy within the scope.
Idempotency-Key?stringOptional; recommended for safe retries. When sent, the same key+body within 24h replays the original result and the same key with a different body is 409 CONFLICT; keys are unique per tenant. When an API token or service-account (bearer) caller omits it, the request is applied once with no replay protection (a retry may apply it again). A console session gets one from the edge.
uuidIf-Match?stringETag for optimistic concurrency on mutations/deletes; mismatch results in 412.
application/json- body
Partial update of an IPsec policy. Every property here is a field neutron marks allow_put on ipsecpolicies; omitted properties are unchanged. Refused with 409 DEPENDENCY_BLOCKED while any site connection references the policy.
name?stringNew display name; must stay unique within the scope.
^[^\p{C}\p{Z}\x{10000}-\x{10FFFF}](?:[^\p{C}\p{Zl}\p{Zp}\x{10000}-\x{10FFFF}]*[^\p{C}\p{Z}\x{10000}-\x{10FFFF}])?$1 <= length <= 255description?stringNew free-text description.
length <= 255transformProtocol?stringNew transform protocol.
"esp""ah""ah-esp"authAlgorithm?stringNew Phase 2 authentication algorithm.
"sha1""sha256""sha384""sha512""aes-xcbc""aes-cmac"encryptionAlgorithm?stringNew Phase 2 encryption algorithm.
"3des""aes-128""aes-192""aes-256""aes-128-ccm-8""aes-192-ccm-8""aes-256-ccm-8""aes-128-ccm-12""aes-192-ccm-12""aes-256-ccm-12""aes-128-ccm-16""aes-192-ccm-16""aes-256-ccm-16""aes-128-gcm-8""aes-192-gcm-8""aes-256-gcm-8""aes-128-gcm-12""aes-192-gcm-12""aes-256-gcm-12""aes-128-gcm-16""aes-192-gcm-16""aes-256-gcm-16"encapsulationMode?stringNew encapsulation mode.
"tunnel""transport"pfs?stringNew Diffie-Hellman group.
"group2""group5""group14""group15""group16""group17""group18""group19""group20""group21""group22""group23""group24""group25""group26""group27""group28""group29""group30""group31"lifetimeUnits?"seconds"New lifetime units.
"seconds"lifetimeValue?integerNew security-association lifetime.
60 <= valueUpdate accepted; returns the policy in provisioningState PENDING_UPDATE.
application/json- response
An IPsec (Phase 2) policy - a standalone, reusable resource mirroring the neutron-VPNaaS ipsecpolicies resource one-for-one. Many site connections may share one policy. While any connection references it, neutron refuses both update and delete (IPsecPolicyInUse).
origin?stringWhere the resource was made -- portal for a create on the console, api for an object made straight against the OpenStack API (CLI, Terraform, the Kubernetes cloud provider) that discovery adopted. Informational; nothing behaves differently. Absent from a backend that predates it, which means portal.
"portal""api""system""imported"id*stringPlatform identifier of the IPsec policy.
name*stringPolicy display name, unique within the scope.
^[^\p{C}\p{Z}\x{10000}-\x{10FFFF}](?:[^\p{C}\p{Zl}\p{Zp}\x{10000}-\x{10FFFF}]*[^\p{C}\p{Z}\x{10000}-\x{10FFFF}])?$1 <= length <= 255description*stringFree-text description; empty string when unset.
transformProtocol*stringIPsec transform protocol.
"esp""ah""ah-esp"authAlgorithm*stringPhase 2 authentication (integrity) algorithm.
"sha1""sha256""sha384""sha512""aes-xcbc""aes-cmac"encryptionAlgorithm*stringPhase 2 encryption algorithm.
"3des""aes-128""aes-192""aes-256""aes-128-ccm-8""aes-192-ccm-8""aes-256-ccm-8""aes-128-ccm-12""aes-192-ccm-12""aes-256-ccm-12""aes-128-ccm-16""aes-192-ccm-16""aes-256-ccm-16""aes-128-gcm-8""aes-192-gcm-8""aes-256-gcm-8""aes-128-gcm-12""aes-192-gcm-12""aes-256-gcm-12""aes-128-gcm-16""aes-192-gcm-16""aes-256-gcm-16"encapsulationMode*stringEncapsulation mode for protected traffic.
"tunnel""transport"pfs*stringDiffie-Hellman group used for the Phase 2 rekey.
"group2""group5""group14""group15""group16""group17""group18""group19""group20""group21""group22""group23""group24""group25""group26""group27""group28""group29""group30""group31"lifetimeUnits*"seconds"Units of the security-association lifetime; neutron accepts only seconds.
"seconds"lifetimeValue*integerSecurity-association lifetime, in the units above.
60 <= valueprovisioningState*stringLifecycle state of this platform record.
"PENDING_CREATE""PENDING_UPDATE""PENDING_DELETE""READY""ERROR"statusReason?|The provider's own message from the last failed write; null when the last write succeeded.
statusReasonCode?|Machine-readable companion to statusReason: a small, OPEN vocabulary of codes the console can branch on without parsing the human text, deliberately a plain string rather than a closed enum so a code the client does not recognize yet degrades to the generic failure message. Today the only value is cancelled: the resource is in its failure state because its create operation was CANCELLED; a provider object the create had already built may be left in place, and the resource's DELETE removes it. Reported only while the resource is in that failure state; null otherwise.
providerId?|neutron's UUID for this policy; null until the worker has created it.
usedByCount*integerHow many IPsec site connections currently reference this policy.
curl -X PATCH "https://example.com/scopes/string/network/vpn/ipsec-policies/string" \ -H "Content-Type: application/json" \ -d '{}'{ "origin": "portal", "id": "string", "name": "string", "description": "string", "transformProtocol": "esp", "authAlgorithm": "sha1", "encryptionAlgorithm": "3des", "encapsulationMode": "tunnel", "pfs": "group2", "lifetimeUnits": "seconds", "lifetimeValue": 60, "provisioningState": "PENDING_CREATE", "statusReason": "string", "statusReasonCode": "string", "providerId": "string", "usedByCount": 0}