Help us shape the future of Go! Take the 2026 Go Developer Survey

blockstorage

package
v0.0.0-...-84b5455 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 24, 2026 License: Apache-2.0 Imports: 38 Imported by: 0

README

Blockstorage

This guide describes the public Go APIs and their contracts against the pinned Gophercloud and Python openstacksdk sources. Support decisions apply to each operation below.

See the support ledger for status definitions and shared limitations.

Operation contracts

python:cloud/_block_storage/BlockStorageCloudMixin/attach_volume

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk.Connection.AttachVolume

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.AttachVolume

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithAttachVolumeOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithAttachVolumeDevice

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithAttachVolumeWait

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithAttachVolumeWaitPolicy

  • AttachVolume defaults to omitted device, enabled waiting, no SDK wait deadline, two-second polling and exact case-insensitive error failure state. Explicit IDs perform fresh Cinder GET200, Nova POST200 with volumeAttachment.volumeId and optional nonempty device, then fresh fixed-ID Cinder waiting GET200; Wait(false) keeps the precondition GET and omits polling. Tests: blockstorage/attach_volume_contracts_test.go:TestAttachVolumeContractsDefaultSequenceAndIndependentProof, blockstorage/attach_volume_contracts_test.go:TestAttachVolumeContractsExplicitNoWaitAndLiteralDevice, blockstorage/attach_volume_options_test.go:TestAttachVolumeOptionsConcreteDefaultsAndReplacementOrder.

  • Nil or canceled contexts, invalid request references, either invalid source, malformed device or wait policy and nil options stop before name resolution and workflow requests. Disabled wait fields still receive complete validation. Ordered callbacks are applied once and pointer/slice values are copied after callbacks; whole and subtree replacement helpers preserve nil versus nonnil empty failures. Tests: blockstorage/attach_volume_contracts_test.go:TestAttachVolumeContractsPreflightBeforeCallbacksOrHTTP, blockstorage/attach_volume_options_test.go:TestAttachVolumeOptionsFactoriesOwnReusablePointersAndSlices, blockstorage/attach_volume_options_test.go:TestAttachVolumeOptionsExternalCallbacksRunOnceAndRetainedConfigIsolated, blockstorage/attach_volume_options_test.go:TestAttachVolumeOptionsValidateInactiveWaitPolicyAndStopOnGuardFailure.

  • Server and volume names use their existing ordinary native Resources.ResolveID once in order with exact names, duplicate and missing handling; explicit IDs do not fetch the server. Resolved IDs become fixed routes, and response IDs, Location and mutable source configuration cannot select another logical target. Tests: blockstorage/attach_volume_contracts_test.go:TestAttachVolumeContractsNamesResolveOnceBeforeFreshCheck.

  • The fresh Cinder precondition requires canonical id equal to the fixed volume ID, exact available status and an explicit nonnull attachments array. It rejects any association with the target server even if device is omitted or empty, rejects null rows and preserves the accepted Checked evidence without a Nova POST on failure. Tests: blockstorage/attach_volume_contracts_test.go:TestAttachVolumeContractsFreshPreconditionForbidsUnsafeMutation.

  • Nova POST uses the actual server os-volume_attachments route and the minimal volumeAttachment envelope rather than Cinder attachments. Canonical volumeId must match the fixed volume ID; present nonnull serverId must match the server. Attachment id, attachment_id and bdm_uuid remain passive response fields and a mismatch preserves actual Created proof before stopping. Tests: blockstorage/attach_volume_contracts_test.go:TestAttachVolumeContractsNovaStatusAndCreatedDecodeFailuresAreTerminal, blockstorage/attach_volume_transport_test.go:TestAttachVolumeContractsDistinctProvidersAndNullableOptionalServer.

  • Owned Cinder observation, nested association and Nova attachment models decode exact canonical keys atomically. Known optional fields distinguish nullable pointers while raw metadata retains omission versus null, unknown fields, exact large numeric literals and literal timestamps; malformed UTF-8, nonobject envelopes, wrong known field types and malformed attachment rows fail without partial typed assignment. Tests: blockstorage/attach_volume_models_test.go:TestAttachVolumeModelsCanonicalNullableFieldsAndRawExtensions, blockstorage/attach_volume_models_test.go:TestAttachVolumeModelsDistinguishAbsentNullAndEmptyAttachments, blockstorage/attach_volume_models_test.go:TestAttachVolumeModelsRejectInvalidFieldsAtomically.

  • Checked, Created and LastAccepted retain actual accepted response bytes, cloned headers and status before read, Close, decode or later guard failures. Responses, raw fields, typed models and Ready from separate phases own independent data. A nonnil result alone does not establish a mutation; Created HTTP200 records acknowledgement and only successful waiting populates Ready. Tests: blockstorage/attach_volume_contracts_test.go:TestAttachVolumeContractsDefaultSequenceAndIndependentProof, blockstorage/attach_volume_transport_test.go:TestAttachVolumeContractsAcceptedBodyFailuresRetainPhaseProofWithoutResend.

  • Waiting begins after the Nova response is decoded and verified. Nil or zero timeout is unlimited; positive timeout is wait-only and caller context bounds all phases. Each poll requires matching canonical Cinder id and known status, checks case-insensitive in-use before exact failures and does not infer error-prefix states. Nonnil empty failure states disable failure matching. Negative timeout fails before lookup or mutation even when waiting is disabled. A positive wait deadline cancels polling HTTP and timer waits through context; this deliberately differs from Python zero/negative and between-fetch timer semantics. Tests: blockstorage/attach_volume_transport_test.go:TestAttachVolumeContractsWaitBudgetStartsAfterCreatedResponse, blockstorage/attach_volume_contracts_test.go:TestAttachVolumeContractsExactWaitStatesTargetFirstAndCallback, blockstorage/attach_volume_contracts_test.go:TestAttachVolumeContractsWaitTimeoutAndCancellationKeepLastAccepted.

  • Nonterminal waiting responses invoke a synchronous ProgressCallback with zero rather than reading an unmodeled extension progress field. Callback errors and cancellation retain their original inspectable causes and already accepted evidence; target and failure observations do not invoke progress and timer/context waiting remains cancellable. Tests: blockstorage/attach_volume_contracts_test.go:TestAttachVolumeContractsExactWaitStatesTargetFirstAndCallback, blockstorage/attach_volume_contracts_test.go:TestAttachVolumeContractsWaitTimeoutAndCancellationKeepLastAccepted.

  • Rejected HTTP errors preserve native method, URL, accepted-code policy, physical status/body/header and original causes without synthesizing accepted phase wrappers. LastAccepted means the last accepted waiting Cinder response and remains intact when a later rejected request or context error occurs. Later failure never triggers automatic detach, delete or a new logical attach operation. Tests: blockstorage/attach_volume_contracts_test.go:TestAttachVolumeContractsCreatedProofSurvivesWaitFailures, blockstorage/attach_volume_contracts_test.go:TestAttachVolumeContractsWaitTimeoutAndCancellationKeepLastAccepted, blockstorage/attach_volume_contracts_test.go:TestAttachVolumeContractsNovaStatusAndCreatedDecodeFailuresAreTerminal.

  • Both selected clients retain their effective prefixed ResourceBase, validated service type and microversion with entry-snapshotted canonical ordinary source headers and original live provider authentication. Provider/Endpoint/ResourceBase/Type/Microversion changes are terminal before another phase. Native configured reauthentication and retry remain distinct from SDK guards for method, URL, serialized JSON and accepted-response ownership. Tests: blockstorage/attach_volume_transport_test.go:TestAttachVolumeContractsSourceSnapshotsLiveTokenAndConsistentVersions, blockstorage/attach_volume_transport_test.go:TestAttachVolumeContractsRejectSourceChangesAtOptionsAndAfterMutation, blockstorage/attach_volume_transport_test.go:TestAttachVolumeContractsNativeReauthenticationBackoffAndOwnedRetry, blockstorage/attach_volume_transport_test.go:TestAttachVolumeContractsNativeRetryCannotReplaceOwnedRequestOrStatusPolicy.

  • Connection.AttachVolume validates context, receiver and references before selecting cached ComputeV2 and BlockStorageV3 clients, then delegates to the package workflow without holding a Connection mutex through callbacks. Lazy service initialization or microversion discovery can precede package option validation, while options still complete before name/precondition/mutation/poll requests. Tests: connection_attach_volume_test.go:TestConnectionAttachVolumeSharesCachedClientsAndLiveToken, connection_attach_volume_test.go:TestConnectionAttachVolumeDiscoveryPrecedesOptionsAndIsCached, connection_attach_volume_test.go:TestConnectionAttachVolumeValidatesBeforeClientDiscovery, connection_attach_volume_test.go:TestConnectionAttachVolumeServiceInitializationCancellationCause.

  • The workflow owns exact case-insensitive error matching without changing the existing high-level Cinder Collection waiter, which retains its error-prefix failure policy. Tests: blockstorage/attach_volume_contracts_test.go:TestAttachVolumeContractsExactWaitStatesTargetFirstAndCallback, blockstorage/blockstorage_test.go:TestCinderFailurePrefixAndMicroversion.

Python/Go differences:

  • Go accepts resource.Ref inputs and performs fresh Cinder checks after optional name resolution. Pinned Python accepts caller-owned mutable server and volume Resource/dict values, reads their supplied available status and attachment records and only rejects a matching server when get_volume_attach_device returns a truthy device. Go deliberately rejects a matching association independent of device and requires explicit canonical identity/status/attachments proof.
  • Go waiting always fetches fresh fixed-ID Cinder responses and uses its owned exact-error policy. Python may immediately return a supplied Resource whose cached status already equals in-use; dict inputs are refetched before passing a Resource into the waiter. Both default to enabled wait, two-second polls and an unlimited wait-only SDK timeout, while caller context and error-returning progress callbacks are Go controls.
  • Go returns completed accepted phase proof and last accepted waiting evidence alongside read/decode/callback/context/native errors and leaves existing side effects to the caller. Python raises on waiting failure without returning the Nova attachment. Raw evidence is separate from successfully decoded typed results and is not a complete physical-attempt log.
  • Go uses strict owned canonical JSON fields, nullable response pointers, raw extension precision, literal timestamps and fixed route identities. Absent Nova id stays nil rather than adopting volumeId as Python alternate identity; serverId reads only actual response data, while selected server identity remains in the workflow result. It does not reproduce Python descriptor coercion or Resource object mutation to choose status or route. Optional Nova response attributes remain passive and no arbitrary attachment attrs are added to this device-only cloud helper.
  • Go captures selected source clients and normal headers while using their original live provider authentication. Source configuration changes between phases are terminal; Connection may initialize or discover services before package callback application. Configured native retry/reauthentication remain in place and packet-level exactly-once is not claimed.
  • Go intentionally uses nil or numeric-zero Timeout as no SDK wait deadline and rejects negative Timeout before any name lookup or workflow mutation, including when Wait is false. Pinned Python forwards timeout to Resource waiting after the Nova mutation; utils.iterate_timeout treats numeric zero or negative timeout as immediate ResourceTimeout before its first poll unless an already-target Resource short-circuits first. Positive Go wait deadlines cancel HTTP and timers via context, whereas Python checks elapsed time between fetches and does not interrupt an in-flight fetch or sleep with that loop deadline.
  • This mapping closes the directly declared cloud attach_volume parameter/control-flow contract using the documented Go-native representation. It does not promote the separately inventoried Compute create_volume_attachment, Cinder get_volume or generic wait_for_status declarations or their inherited Resource/session/cache behavior; their full SDK reviews remain independent.
python:cloud/_block_storage/BlockStorageCloudMixin/detach_volume

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk.Connection.DetachVolume

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.DetachVolume

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.PrepareDetachVolumeOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithDetachVolumeOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithDetachVolumeWait

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithDetachVolumeWaitPolicy

  • DetachVolume maps the directly declared cloud helper with fixed Server and Volume references, enabled wait by default, an unlimited SDK wait deadline, two-second polling and exact case-insensitive error failure state. Explicit IDs perform bodyless Nova DELETE accepted only at202/204 followed by an immediate fresh fixed-ID Cinder GET200; no pre-delete server, attachment or Cinder state GET is added. Tests: blockstorage/detach_volume_contracts_test.go:TestDetachVolumeContractsDefaultDeleteThenFreshAvailableAndIndependentProof, blockstorage/detach_volume_contracts_test.go:TestDetachVolumeContractsNoWaitIDsNeedOnlyNovaAndOpaqueAcknowledgement, blockstorage/detach_volume_options_test.go:TestDetachVolumeOptionsPreparationOwnsEffectiveDefaultsAndReplacementOrder, blockstorage/detach_volume_contracts_test.go:TestDetachVolumeContractsAvailableBeforeExactFailuresAndStatusOnlyReadiness.

  • Wait(false) with a volume ID supports a Nova-only package call with nil Cinder and returns only the accepted Deleted proof. A server Name resolves through Nova without requiring Cinder; a volume Name still requires Cinder. All selected source, reference, context and concrete option policies are validated before name lookup or deletion, and invalid inactive wait policy is rejected even when waiting is false. Tests: blockstorage/detach_volume_contracts_test.go:TestDetachVolumeContractsNoWaitIDsNeedOnlyNovaAndOpaqueAcknowledgement, blockstorage/detach_volume_contracts_test.go:TestDetachVolumeContractsPreflightAndRequiredCinderBeforeNameLookup, blockstorage/detach_volume_contracts_test.go:TestDetachVolumeContractsNamesResolveOnceServerThenVolumeWithoutSwap, blockstorage/detach_volume_options_test.go:TestDetachVolumeOptionsValidateInactivePolicyAndContextCauses.

  • Whole and wait-subtree factories snapshot reusable pointers and slices, preserve nil versus nonnil empty failures and apply replacement in order. PrepareDetachVolumeOptions applies original external callbacks once, validates the complete effective policy and returns an independently owned DetachVolumeOpts without SDK HTTP or service initialization. Reapplying its concrete result never reruns the original callbacks. Tests: blockstorage/detach_volume_options_test.go:TestDetachVolumeOptionsPreparationOwnsEffectiveDefaultsAndReplacementOrder, blockstorage/detach_volume_options_test.go:TestDetachVolumeOptionsFactoriesAreReusableOwnedSnapshots, blockstorage/detach_volume_options_test.go:TestDetachVolumeOptionsCallbacksRunOnceAndCannotRetainPreparedPolicy, blockstorage/detach_volume_options_test.go:TestDetachVolumeOptionsValidateInactivePolicyAndContextCauses, connection_detach_volume_test.go:TestConnectionDetachVolumeSharesCachedClientsAndLiveToken.

  • Direct package preparation captures the required selected client sources before original option callbacks, retaining live provider authentication and entry headers. Connection validates context, receiver and references, prepares the original options before service discovery, selects cached Nova and only necessary Cinder, then delegates with the concrete prepared policy without a mutex around caller callbacks. Tests: blockstorage/detach_volume_transport_test.go:TestDetachVolumeTransportSnapshotsHeadersLiveDistinctProvidersAndSourceGuards, connection_detach_volume_test.go:TestConnectionDetachVolumeOptionsPrecedeDiscoveryAndAreCached, connection_detach_volume_test.go:TestConnectionDetachVolumeSharesCachedClientsAndLiveToken, connection_detach_volume_test.go:TestConnectionDetachVolumeValidatesBeforeClientDiscovery, connection_detach_volume_test.go:TestConnectionDetachVolumeNoWaitNeedsOnlyNova.

  • Server and volume Name references resolve once in their existing exact native collections, server then volume, with missing/duplicate failures before mutation. Resolved IDs stay fixed, the final Nova route segment is the volume ID and the workflow does not apply Python server-volume argument swapping, attachment-ID substitution, Location retargeting or fixed-ID fallback searches. Tests: blockstorage/detach_volume_contracts_test.go:TestDetachVolumeContractsNamesResolveOnceServerThenVolumeWithoutSwap, resource/resolve_test.go:TestResolveIDUsesExactNamesAndNeverFetchesExplicitIDs, blockstorage/detach_volume_contracts_test.go:TestDetachVolumeContractsDefaultDeleteThenFreshAvailableAndIndependentProof.

  • Only actual Nova202/204 responses populate Deleted with opaque original body bytes, cloned headers and actual status. Empty, binary and non-JSON accepted bodies require no JSON decoding. Accepted read, Close, cancellation or post-source-check errors retain partial or complete Deleted proof and original causes without starting waiting or resending the completed phase. Tests: blockstorage/detach_volume_contracts_test.go:TestDetachVolumeContractsNoWaitIDsNeedOnlyNovaAndOpaqueAcknowledgement, blockstorage/detach_volume_contracts_test.go:TestDetachVolumeContractsDefaultDeleteThenFreshAvailableAndIndependentProof, blockstorage/detach_volume_transport_test.go:TestDetachVolumeTransportAcceptedReadCloseContextAndSourceFailuresRetainOpaqueProof, blockstorage/detach_volume_transport_test.go:TestDetachVolumeTransportSnapshotsHeadersLiveDistinctProvidersAndSourceGuards.

  • Nova404 is a failure rather than an ignored missing attachment. Other rejected status codes preserve native method, URL, expected202204, physical status/body/header and original cause, leave Deleted nil and never poll. The workflow does not call Cinder os-detach, delete the volume, force cleanup or attach again as compensation. Tests: blockstorage/detach_volume_contracts_test.go:TestDetachVolumeContractsMissingAndUnexpectedDeleteCodesKeepNativeFailure, blockstorage/detach_volume_transport_test.go:TestDetachVolumeTransportRejectedIOAndContextDoNotInventAcceptedAcknowledgement, blockstorage/detach_volume_contracts_test.go:TestDetachVolumeContractsDefaultDeleteThenFreshAvailableAndIndependentProof.

  • Waiting always fetches the selected fixed Cinder volume ID and requires matching canonical nonnull id and status. It tests exact case-insensitive available before configured failures, uses error rather than error-prefix matching, permits absent/null attachments and rejects malformed known fields or null array rows. A multiattach volume remaining in-use is nonterminal even when the target association is absent; Cinder404 or disappearance fails rather than completing the operation. Tests: blockstorage/detach_volume_contracts_test.go:TestDetachVolumeContractsAvailableBeforeExactFailuresAndStatusOnlyReadiness, blockstorage/detach_volume_contracts_test.go:TestDetachVolumeContractsAcceptedInvalidPollsAnd404PreserveAcknowledgement, blockstorage/detach_volume_contracts_test.go:TestDetachVolumeContractsDefaultDeleteThenFreshAvailableAndIndependentProof, blockstorage/detach_volume_transport_test.go:TestDetachVolumeTransportSnapshotsHeadersLiveDistinctProvidersAndSourceGuards, blockstorage/attach_volume_models_test.go:TestAttachVolumeModelsCanonicalNullableFieldsAndRawExtensions, blockstorage/attach_volume_models_test.go:TestAttachVolumeModelsDistinguishAbsentNullAndEmptyAttachments, blockstorage/attach_volume_models_test.go:TestAttachVolumeModelsRejectInvalidFieldsAtomically.

  • Nil or zero Timeout is unlimited, positive Timeout begins after accepted DELETE body reading/Close and source validation, and negative Timeout fails before lookup or deletion even with wait disabled. Positive deadline and caller context cancel poll HTTP and timer waits. This implements a functional Go wait policy while pinned Python declares timeout but never forwards it to its post-delete lookup or waiter. Tests: blockstorage/detach_volume_transport_test.go:TestDetachVolumeTransportWaitBudgetStartsAfterDeleteAndZeroRemainsUnlimited, blockstorage/detach_volume_contracts_test.go:TestDetachVolumeContractsWaitTimeoutCancellationAndLaterRejectionKeepLastAccepted, blockstorage/detach_volume_transport_test.go:TestDetachVolumeTransportBlockedPollCancellationKeepsPriorAcceptedObservation, blockstorage/detach_volume_options_test.go:TestDetachVolumeOptionsValidateInactivePolicyAndContextCauses.

  • Only nonterminal observations invoke ProgressCallback with zero. Its error or custom context cancellation preserves original inspectable causes alongside accepted Deleted and LastAccepted proof; target and failure observations do not invoke it. Nonnil empty FailureStates disable exact failure matching and an available target wins even when also configured as a failure. Tests: blockstorage/detach_volume_contracts_test.go:TestDetachVolumeContractsAvailableBeforeExactFailuresAndStatusOnlyReadiness, blockstorage/detach_volume_contracts_test.go:TestDetachVolumeContractsWaitTimeoutCancellationAndLaterRejectionKeepLastAccepted, blockstorage/detach_volume_transport_test.go:TestDetachVolumeTransportWaitBudgetStartsAfterDeleteAndZeroRemainsUnlimited.

  • LastAccepted is captured from each actual accepted Cinder response before read, Close, canonical decode or later guard failures; later rejected HTTP/transport errors keep their own native evidence without overwriting it. Ready is independently decoded from successful available proof so model pointers, headers, raw metadata and nested association records do not alias LastAccepted.Volume or earlier phases. Tests: blockstorage/detach_volume_contracts_test.go:TestDetachVolumeContractsDefaultDeleteThenFreshAvailableAndIndependentProof, blockstorage/detach_volume_contracts_test.go:TestDetachVolumeContractsAcceptedInvalidPollsAnd404PreserveAcknowledgement, blockstorage/detach_volume_transport_test.go:TestDetachVolumeTransportAcceptedReadCloseContextAndSourceFailuresRetainOpaqueProof, blockstorage/detach_volume_contracts_test.go:TestDetachVolumeContractsWaitTimeoutCancellationAndLaterRejectionKeepLastAccepted, blockstorage/detach_volume_transport_test.go:TestDetachVolumeTransportBlockedPollCancellationKeepsPriorAcceptedObservation, blockstorage/detach_volume_transport_test.go:TestDetachVolumeTransportLaterFailureKeepsPriorAcceptedProof.

  • Captured effective ResourceBase prefixes, consistent service type/microversion and canonical ordinary headers remain fixed while original live tokens, configured reauthentication, backoff and RetryFunc remain provider-owned. Required source Provider/Endpoint/ResourceBase/Type/Microversion replacement is terminal. SDK fixed-request ownership prevents native callback replacement of logical method, URL, bodyless request or accepted response policy without claiming packet-level exactly-once. Tests: blockstorage/detach_volume_contracts_test.go:TestDetachVolumeContractsDefaultDeleteThenFreshAvailableAndIndependentProof, blockstorage/detach_volume_transport_test.go:TestDetachVolumeTransportSnapshotsHeadersLiveDistinctProvidersAndSourceGuards, blockstorage/detach_volume_transport_test.go:TestDetachVolumeTransportNativeAuthBackoffAndRetryPreserveBodylessFixedDelete, blockstorage/detach_volume_transport_test.go:TestDetachVolumeTransportNativeRetryCannotAddBodyOrExpandAcceptedProof.

  • Connection no-wait volume-ID calls initialize only cached Nova, while default wait and volume Name require cached Cinder. Preparation errors and invalid receiver/context/references precede service discovery; client-initialization cancellation retains context.Canceled and a custom cause. Reuse of attachment source/model/wait helpers preserves existing AttachVolume POST200, fresh available/association guards, options, proof ownership and the older Cinder Collection error-prefix waiter. Tests: connection_detach_volume_test.go:TestConnectionDetachVolumeNoWaitNeedsOnlyNova, connection_detach_volume_test.go:TestConnectionDetachVolumeOptionsPrecedeDiscoveryAndAreCached, connection_detach_volume_test.go:TestConnectionDetachVolumeValidatesBeforeClientDiscovery, connection_detach_volume_test.go:TestConnectionDetachVolumeServiceInitializationCancellationCause, connection_detach_volume_test.go:TestConnectionDetachVolumeSharesCachedClientsAndLiveToken, blockstorage/attach_volume_contracts_test.go:TestAttachVolumeContractsDefaultSequenceAndIndependentProof, blockstorage/attach_volume_contracts_test.go:TestAttachVolumeContractsFreshPreconditionForbidsUnsafeMutation, blockstorage/attach_volume_contracts_test.go:TestAttachVolumeContractsExactWaitStatesTargetFirstAndCallback, blockstorage/attach_volume_contracts_test.go:TestAttachVolumeContractsWaitTimeoutAndCancellationKeepLastAccepted, blockstorage/attach_volume_transport_test.go:TestAttachVolumeContractsAcceptedBodyFailuresRetainPhaseProofWithoutResend, blockstorage/attach_volume_transport_test.go:TestAttachVolumeContractsSourceSnapshotsLiveTokenAndConsistentVersions, blockstorage/attach_volume_transport_test.go:TestAttachVolumeContractsNativeRetryCannotReplaceOwnedRequestOrStatusPolicy, blockstorage/attach_volume_options_test.go:TestAttachVolumeOptionsConcreteDefaultsAndReplacementOrder, blockstorage/attach_volume_models_test.go:TestAttachVolumeModelsRejectInvalidFieldsAtomically, blockstorage/blockstorage_test.go:TestCinderFailurePrefixAndMicroversion.

Python/Go differences:

  • Go accepts explicit Server/Volume resource.Ref values and resolves names once. Pinned cloud helper indexes caller Resource/dict values for IDs and passes strings into the Compute proxy; that proxy may find_server and reverse server/volume arguments through a compatibility heuristic. Go never guesses or swaps the caller roles and fixes deletion to the chosen volume ID, not attachment identity.
  • Go defaults to the same enabled available wait with two-second polling, exact error failure detection and no SDK wait deadline, but every post-delete observation is a fresh fixed-ID GET with canonical identity/status proof. Pinned cloud helper calls cloud get_volume, which delegates to find_volume and may obtain a Resource that immediately short-circuits on cached available state. Missing post-delete Cinder observations remain failures in both workflows.
  • Pinned Python declares timeout but ignores it: it is never passed to get_volume or wait_for_status. Go intentionally honors a positive wait-only Timeout after the Nova acknowledgement has been read and closed, uses nil/zero for unlimited waiting and rejects negative/invalid inactive policies before mutation. Caller context additionally controls every phase; positive context deadlines interrupt polling HTTP and timers rather than only checking elapsed time between Python fetches.
  • Python success returns None and an exception exposes no accepted delete or last observed volume through the helper result. Go returns Deleted, LastAccepted and independently owned Ready alongside processing/native/callback/context errors, retains opaque202/204 body bytes without JSON parsing and leaves accepted side effects for caller follow-up. The accepted-phase result is not a complete physical-attempt trace.
  • Go provides a concrete owned policy and a local PrepareDetachVolumeOptions seam. Connection applies original option callbacks before service discovery and selects Cinder only for waiting or volume Name; package callers may use only Nova with wait false and a volume ID. Direct package calls capture required sources before original callbacks; both use frozen selected client settings and current authentication from original providers.
  • Go retains raw JSON precision, nullable canonical fields and literal timestamps in its reused volume observation models rather than reproducing mutable Python Resource descriptors, alternate identity, dirty state, cache and injected session/adapter objects. ProgressCallback and caller-selectable failure states are explicit Go extensions; this helper does not expose Cinder force/connector detach action controls.
  • This go_mapping closes only the directly declared cloud detach_volume parameter/control-flow contract and its documented Go adaptation. Separately inventoried Compute delete_volume_attachment, cloud get_volume, Cinder find/wait and inherited Resource declarations retain independent reviews; native leaves and other volume workflows are not promoted.
python:cloud/_block_storage/BlockStorageCloudMixin/create_volume

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk.Connection.CreateVolume

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.CreateVolume

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.PrepareCreateVolumeOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithCreateVolumeOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithCreateVolumeAttributes

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithCreateVolumeWait

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithCreateVolumeBootable

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithCreateVolumeWaitPolicy

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithCreateVolumeName

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithCreateVolumeDescription

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithCreateVolumeSnapshot

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithCreateVolumeType

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithCreateVolumeMetadata

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithCreateVolumeSchedulerHints

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithCreateVolumeFields

  • CreateVolume maps required Size and optional Image reference with default enabled fresh available waiting, unlimited SDK deadline, two-second interval and exact error failure policy. Cinder POST accepts only202; explicit Size, including0 or negative, always overrides any attribute size rather than being omitted. No initial volume, snapshot/source/backup lookup, Nova server creation or attachment operation is introduced. Tests: blockstorage/create_volume_contracts_test.go:TestCreateVolumeContractsDefaultFreshWaitAndIndependentOwnedResults, blockstorage/create_volume_contracts_test.go:TestCreateVolumeContractsNoWaitSizeAndLiteralSourcesAreOwnedWithoutLookups, blockstorage/create_volume_options_test.go:TestCreateVolumeOptionsEffectiveDefaultsAndBootableForcesWaitAfterReplacement.

  • Optional image ID is captured and used without a Glance client or request; image Name requires Glance and resolves once through the existing exact Collection before Cinder creation. Missing/ambiguous/unsafe image identity aborts creation, the selected imageRef overrides normalized attributes and later caller reference mutation cannot change the selection. Tests: blockstorage/create_volume_contracts_test.go:TestCreateVolumeContractsImageNameResolvesOnceAndReferenceWinsAllAttributes, blockstorage/create_volume_contracts_test.go:TestCreateVolumeContractsNoWaitSizeAndLiteralSourcesAreOwnedWithoutLookups, connection_create_volume_test.go:TestConnectionCreateVolumeCachedCinderLiveTokenAndOwnedImageSelection, resource/resolve_test.go:TestResolveIDUsesExactNamesAndNeverFetchesExplicitIDs.

  • The owned attribute schema covers all34 pinned direct Cinder v3 Volume Body declarations and inherited id/name/metadata by Python attribute or exact wire key, with source_replica an explicit Go-native extension. Unknown attributes and base_path/microversion/private route controls fail before lookup/POST. Caller request builders are unnecessary. Tests: blockstorage/create_volume_contracts_test.go:TestCreateVolumeContractsAllPinnedAttributesAndWireAliasesAreSerialized, blockstorage/create_volume_contracts_test.go:TestCreateVolumeContractsPreflightValidatesEveryProvidedSourceBeforeCallbacks, blockstorage/create_volume_options_test.go:TestCreateVolumeOptionsValidateKnownFieldBoundaryInactiveWaitAndCancellation.

  • Alias mapping preserves source_volume_id/source_volid, image_id/imageRef, consistency_group_id/consistencygroup_id, bool names and host/project/migration/replication extension wires. When both attribute alias and wire key exist the wire key wins deterministically; nonnil concrete common attributes replace corresponding raw canonical values. Literal raw JSON values keep false/zero/null/empty and large numeric precision rather than applying Python descriptor coercion. Tests: blockstorage/create_volume_contracts_test.go:TestCreateVolumeContractsAllPinnedAttributesAndWireAliasesAreSerialized, blockstorage/create_volume_contracts_test.go:TestCreateVolumeContractsEveryTypedCommonAttributeOverridesRawWireValues, blockstorage/create_volume_contracts_test.go:TestCreateVolumeContractsAliasesPresenceConcreteOverridesMetadataAndHints.

  • Canonical name and description presence wins over display_name/display_description; selected null,false,numeric-zero,empty string/array/object is omitted and aliases never leak into the body. Required input Size and selected Image still override the resulting volume envelope independently of attribute order. Tests: blockstorage/create_volume_contracts_test.go:TestCreateVolumeContractsAliasesPresenceConcreteOverridesMetadataAndHints, blockstorage/create_volume_contracts_test.go:TestCreateVolumeContractsNoWaitSizeAndLiteralSourcesAreOwnedWithoutLookups, blockstorage/create_volume_contracts_test.go:TestCreateVolumeContractsImageNameResolvesOnceAndReferenceWinsAllAttributes.

  • String Metadata nil omits, nonnil empty emits{}, and raw Fields metadata:null is retained. Scheduler hints accept an object or null; null/empty object is omitted while a nonempty object moves to the top-level OS-SCH-HNT:scheduler_hints key outside volume without losing raw values, duplicates within arrays or unknown numeric precision. Tests: blockstorage/create_volume_contracts_test.go:TestCreateVolumeContractsDefaultFreshWaitAndIndependentOwnedResults, blockstorage/create_volume_contracts_test.go:TestCreateVolumeContractsAliasesPresenceConcreteOverridesMetadataAndHints, blockstorage/create_volume_contracts_test.go:TestCreateVolumeContractsEveryTypedCommonAttributeOverridesRawWireValues, blockstorage/create_volume_options_test.go:TestCreateVolumeOptionsFactoriesOwnPointersMapsRawValuesAndReusableSnapshots.

  • Whole/attribute/wait replacement factories and scalar/map helpers own pointers, maps, slices and raw JSON at factory capture and after each ordered callback. Retained callback configuration or reusable caller data cannot change the prepared execution. All inactive wait, JSON, attribute and selected source policies are validated before lookup or mutation, preserving nil versus empty behavior. Tests: blockstorage/create_volume_options_test.go:TestCreateVolumeOptionsEffectiveDefaultsAndBootableForcesWaitAfterReplacement, blockstorage/create_volume_options_test.go:TestCreateVolumeOptionsFactoriesOwnPointersMapsRawValuesAndReusableSnapshots, blockstorage/create_volume_options_test.go:TestCreateVolumeOptionsCallbacksRunOnceAndPreparedStateDoesNotAliasRetainedHandles, blockstorage/create_volume_options_test.go:TestCreateVolumeOptionsValidateKnownFieldBoundaryInactiveWaitAndCancellation, blockstorage/create_volume_contracts_test.go:TestCreateVolumeContractsPreflightValidatesEveryProvidedSourceBeforeCallbacks.

  • PrepareCreateVolumeOptions applies original callbacks once locally and returns an independently owned complete effective policy. Connection validates context/receiver/image reference, prepares before cached Cinder/required Glance discovery, and delegates with that policy without rerunning originals or holding a mutex through callback phases. Explicit image ID or absent Image selects no Glance. Tests: blockstorage/create_volume_options_test.go:TestCreateVolumeOptionsCallbacksRunOnceAndPreparedStateDoesNotAliasRetainedHandles, connection_create_volume_test.go:TestConnectionCreateVolumeCachedCinderLiveTokenAndOwnedImageSelection, connection_create_volume_test.go:TestConnectionCreateVolumeOptionsPrecedeDiscoveryAndReuseMicroversion, connection_create_volume_test.go:TestConnectionCreateVolumePreflightBeforeCallbacksAndServiceSelection.

  • Only the actual lower-case canonical creation id, validated as a nonempty safe segment, binds VolumeID and future GET/action paths. Canonical nonnull status is required; actual literal lowercase initial error fails immediately even with waiting disabled, while differently cased ERROR follows the separate no-wait or waiter semantics. Response aliases, request attribute id, foreign Location or later response id cannot retarget the workflow. Tests: blockstorage/create_volume_contracts_test.go:TestCreateVolumeContractsDefaultFreshWaitAndIndependentOwnedResults, blockstorage/create_volume_contracts_test.go:TestCreateVolumeContractsAllPinnedAttributesAndWireAliasesAreSerialized, blockstorage/create_volume_contracts_test.go:TestCreateVolumeContractsInitialLiteralErrorAndExactFreshWaitStates, blockstorage/create_volume_contracts_test.go:TestCreateVolumeContractsAcceptedCreateAndActionFailuresPreservePhaseEvidence, blockstorage/create_volume_transport_test.go:TestCreateVolumeTransportWaitCancellationAndLaterFailuresRetainAcceptedCreation.

  • Any nonnil Bootable forces effective waiting regardless of Wait option order. False waits but sends no false bootable action; true sends fixed POST200 os-set_bootable true only after a fresh successful available observation. Omitted Bootable with Wait(false) returns after valid202 creation without polling or an action. Tests: blockstorage/create_volume_contracts_test.go:TestCreateVolumeContractsBootableTriStateAlwaysWaitsButOnlyTrueSendsAction, blockstorage/create_volume_options_test.go:TestCreateVolumeOptionsEffectiveDefaultsAndBootableForcesWaitAfterReplacement, connection_create_volume_test.go:TestConnectionCreateVolumeOptionsPrecedeDiscoveryAndReuseMicroversion.

  • Waiting begins after creation response reading, Close, canonical identity binding and source validation. Nil/zero Timeout is unlimited and negative/inactive-invalid policy fails before mutation. Positive context deadline cancels Cinder poll HTTP and timers; parent context bounds every phase. Target available is tested before exact case-insensitive failures, no error-prefix inference occurs and nonnil empty failure states disable matching. Tests: blockstorage/create_volume_transport_test.go:TestCreateVolumeTransportWaitBudgetExcludesCreateAndBootableUsesParentContext, blockstorage/create_volume_transport_test.go:TestCreateVolumeTransportWaitCancellationAndLaterFailuresRetainAcceptedCreation, blockstorage/create_volume_options_test.go:TestCreateVolumeOptionsEffectiveDefaultsAndBootableForcesWaitAfterReplacement, blockstorage/create_volume_options_test.go:TestCreateVolumeOptionsValidateKnownFieldBoundaryInactiveWaitAndCancellation, blockstorage/create_volume_contracts_test.go:TestCreateVolumeContractsInitialLiteralErrorAndExactFreshWaitStates.

  • Nonterminal ProgressCallback receives zero rather than arbitrary response progress extensions. Its error, source change or caller cancellation preserves inspectable callback/context/custom causes and prior Created plus LastAccepted proof. Target/failure observations suppress callback and source/context violations prevent another poll or action. Tests: blockstorage/create_volume_contracts_test.go:TestCreateVolumeContractsInitialLiteralErrorAndExactFreshWaitStates, blockstorage/create_volume_transport_test.go:TestCreateVolumeTransportWaitCancellationAndLaterFailuresRetainAcceptedCreation, blockstorage/create_volume_transport_test.go:TestCreateVolumeTransportAcceptedPhaseReadCloseContextAndSourceFailuresKeepProof, blockstorage/create_volume_transport_test.go:TestCreateVolumeTransportEntrySnapshotsLiveImageTokenAndSourceMutationGuards.

  • Created and LastAccepted capture independent actual accepted202/200 raw bytes, cloned headers and status before read/Close/decode/post-source failures. Ready independently owns the successful available VolumeInfo. Later rejected HTTP/transport failures preserve native physical status/body/header/method/URL or original causes without overwriting prior LastAccepted or fabricating accepted evidence. Accepted processing failures never start a new logical creation or cleanup. Tests: blockstorage/create_volume_contracts_test.go:TestCreateVolumeContractsDefaultFreshWaitAndIndependentOwnedResults, blockstorage/create_volume_contracts_test.go:TestCreateVolumeContractsAcceptedCreateAndActionFailuresPreservePhaseEvidence, blockstorage/create_volume_transport_test.go:TestCreateVolumeTransportAcceptedPhaseReadCloseContextAndSourceFailuresKeepProof, blockstorage/create_volume_transport_test.go:TestCreateVolumeTransportWaitCancellationAndLaterFailuresRetainAcceptedCreation, blockstorage/create_volume_transport_test.go:TestCreateVolumeTransportUnacceptedCauseAndCanceledContextDoNotInventProof, blockstorage/create_volume_transport_test.go:TestCreateVolumeTransportNativeRetryCannotRewritePhaseBodyOrPromoteStatus.

  • VolumeInfo atomically decodes exact canonical nullable string/int/flag fields, literal timestamps, inherited links, raw MetadataFields and reused attachment records. Bootable/encrypted accept bool or exact case-insensitive true/false strings; other typed flags require JSON bool. Absent/null/empty metadata or attachment containers retain distinct raw evidence, wrong known types/UTF8/null rows fail without partial assignment, and remaining response fields keep raw JSON precision rather than falsely gaining typed Python parity. Tests: blockstorage/create_volume_models_test.go:TestCreateVolumeModelsCanonicalNullableTypesAndLiteralMetadataPrecision, blockstorage/create_volume_models_test.go:TestCreateVolumeModelsKnownFieldFailuresAreAtomicAndNullEmptyRemainDistinct, blockstorage/attach_volume_models_test.go:TestAttachVolumeModelsRejectInvalidFieldsAtomically.

  • BootableSet retains actual opaque POST200 body/header/status on action acknowledgement or accepted handling errors without requiring JSON decoding, rewriting Ready.IsBootable, fetching again or certifying a later bootable observation. The action uses the original caller context after the wait-only budget has ended; action failure leaves Created/LastAccepted/Ready and its own native or accepted proof intact. Tests: blockstorage/create_volume_contracts_test.go:TestCreateVolumeContractsBootableTriStateAlwaysWaitsButOnlyTrueSendsAction, blockstorage/create_volume_contracts_test.go:TestCreateVolumeContractsAcceptedCreateAndActionFailuresPreservePhaseEvidence, blockstorage/create_volume_transport_test.go:TestCreateVolumeTransportWaitBudgetExcludesCreateAndBootableUsesParentContext, blockstorage/create_volume_transport_test.go:TestCreateVolumeTransportAcceptedPhaseReadCloseContextAndSourceFailuresKeepProof, blockstorage/create_volume_transport_test.go:TestCreateVolumeTransportNativeAuthBackoffRetryOwnsCreateAndBootableJSON.

  • Provided Cinder/Glance sources are captured before original package options, keep effective prefixed bases, canonical ordinary entry headers and consistent service role/microversion, and use original live providers for authentication. Provider/Endpoint/ResourceBase/Type/Microversion replacements are terminal after callbacks, lookup or phase handling. Configured native reauthentication/backoff/retry remain separate from SDK method/URL/serialized-body/accepted-policy ownership guards. Tests: blockstorage/create_volume_transport_test.go:TestCreateVolumeTransportEntrySnapshotsLiveImageTokenAndSourceMutationGuards, blockstorage/create_volume_transport_test.go:TestCreateVolumeTransportNativeAuthBackoffRetryOwnsCreateAndBootableJSON, blockstorage/create_volume_transport_test.go:TestCreateVolumeTransportNativeRetryCannotRewritePhaseBodyOrPromoteStatus, blockstorage/create_volume_contracts_test.go:TestCreateVolumeContractsPreflightValidatesEveryProvidedSourceBeforeCallbacks.

  • Connection cache reuse, optional Glance selection, local preparation failures before discovery and service-initialization cancellation/custom causes are exposed through CreateVolume/volume operation errors. Existing native Cinder Create/SetBootable APIs, generated inventory, attachment workflows and Collection error-prefix waiter remain independent; no dependency declaration is promoted by this direct cloud-helper review. Tests: connection_create_volume_test.go:TestConnectionCreateVolumeCachedCinderLiveTokenAndOwnedImageSelection, connection_create_volume_test.go:TestConnectionCreateVolumeOptionsPrecedeDiscoveryAndReuseMicroversion, connection_create_volume_test.go:TestConnectionCreateVolumePreflightBeforeCallbacksAndServiceSelection, connection_create_volume_test.go:TestConnectionCreateVolumeInitializationRetainsCancellationCause.

Python/Go differences:

  • Go uses an explicit optional resource.Ref Image instead of Python image dict/Resource/string identity polymorphism; ID requires no Glance request/client and Name resolves exactly once. Snapshot/source volume/backup attrs remain literal IDs with no extra lookup in either helper. SourceReplica is a declared native Go extension, not a missing pinned Python Body field.
  • Go covers known Cinder attribute/wire names with concrete common controls and owned raw JSON. It deliberately preserves chosen JSON values without Python int/bool/BoolStr/dict/list descriptor coercion and rejects unknown/private/base_path/microversion controls instead of changing the selected route/session. Wire keys win duplicate alias representations deterministically because Go maps have no Python insertion-order contract; canonical name/description presence and falsey omission still match the cloud helper.
  • Go fixes every follow-up route to a validated canonical creation id and requires usable canonical status, rejecting unsafe/missing/contradictory response identity without adopting request id, alternate identity or Location. Rich nullable models and raw precision are independent from mutable Python Resource hydration/descriptors, and fields without public typed projection remain in Metadata.Body.
  • Go always fetches a fresh available observation after creation when effective waiting is enabled; Python may short-circuit a created Resource already in the target cached state. Both apply the literal initial lowercase error check even with wait disabled. Both nonnull bootable values force waiting, false sends no action and true sends a true action after readiness; Go preserves opaque action proof without synthesizing observed bootable state.
  • Go intentionally uses nil/numeric-zero Timeout as unlimited waiting and rejects negative/inactive-invalid policies before mutation. Python forwards timeout and its iterate_timeout treats numeric zero/negative as immediate post-creation timeout unless an already-target Resource short-circuits. Positive Go wait context interrupts HTTP/timers while Python checks between fetches. The bootable action uses the original parent context after the wait-only phase, and caller context bounds the full Go workflow.
  • Go returns Created/LastAccepted/Ready/BootableSet evidence and original errors after accepted side effects rather than Python returning one mutable Volume or raising without phase results. Error-returning progress callbacks, explicit failure controls and local preparation are Go extensions; no automatic delete or second logical create is added. Accepted phases are not a complete physical-attempt trace.
  • Connection prepares original callbacks once before cached service selection and chooses Glance only for image Name; package calls capture every supplied source before originals. Configured current authentication and native retry/reauthentication remain in place while source and request ownership are guarded. This is not a packet-level exactly-once promise or arbitrary mutable provider configuration contract.
  • This mapping closes only the directly declared cloud create_volume size/wait/timeout/image/bootable/known-kwargs workflow under documented Go policies. Separate Python Cinder create/wait/set_bootable, Glance find, inherited Resource/session/cache/API-version declarations retain independent reviews. Connection selects Cinder v3 and this row does not assert full Cinder v2 Resource object semantics or whole-SDK completion.
python:cloud/_block_storage/BlockStorageCloudMixin/delete_volume

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk.Connection.DeleteVolume

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.DeleteVolume

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.PrepareDeleteVolumeOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithDeleteVolumeOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithDeleteVolumeWait

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithDeleteVolumeForce

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithDeleteVolumeWaitPolicy

  • DeleteVolume maps the direct cloud name_or_id/wait/timeout/force controls using explicit Volume Ref, default enabled waiting, Forcefalse, unlimited SDK deadline and two-second polling. Explicit IDs always perform an initial fixed-ID GET200/404 before any deletion, even with Waitfalse; no other service is selected. Tests: blockstorage/delete_volume_contracts_test.go:TestDeleteVolumeContractsDefaultFreshWaitAndIndependentPhaseEvidence, blockstorage/delete_volume_contracts_test.go:TestDeleteVolumeContractsNoWaitAlwaysLooksUpAndMutation404StillReturnsTrue, blockstorage/delete_volume_options_test.go:TestDeleteVolumeOptionsEffectiveDefaultsReplacementAndLastWins.

  • Direct package preparation validates caller context, safe owned Ref, required Cinder source and canonical selected microversion before original callbacks. It checks sources and context before/after each ordered callback, owns the resulting policy, rejects nil callbacks and validates inactive timeout/interval policies before lookup or mutation. Tests: blockstorage/delete_volume_contracts_test.go:TestDeleteVolumeContractsPreflightRejectsInvalidMicroversionsSourceAndReferenceBeforeCallbacks, blockstorage/delete_volume_options_test.go:TestDeleteVolumeOptionsValidateInactivePolicyAndPreserveCancellationCause, blockstorage/delete_volume_transport_test.go:TestDeleteVolumeTransportCapturedHeadersLiveAuthAndSourceGuards.

  • Whole and wait-subtree factories snapshot reusable nullable pointers and apply ordered complete replacement. PrepareDeleteVolumeOptions locally applies originals once and fills independent effective defaults without HTTP. The deletion policy exposes no FailureStates and does not inherit attachment error-state behavior. Tests: blockstorage/delete_volume_options_test.go:TestDeleteVolumeOptionsEffectiveDefaultsReplacementAndLastWins, blockstorage/delete_volume_options_test.go:TestDeleteVolumeOptionsOwnFactoryPointersAndConcurrentReusablePolicies, blockstorage/delete_volume_options_test.go:TestDeleteVolumeOptionsCallbacksRunOnceAndRetainedHandlesCannotRewritePreparedState, blockstorage/delete_volume_options_test.go:TestDeleteVolumeOptionsValidateInactivePolicyAndPreserveCancellationCause.

  • Connection validates receiver/context/Ref and locally prepares original callbacks once before cached Cinder v3 discovery. It delegates with an owned complete replacement without rerunning originals or holding its mutex around callbacks. NoWait still requires Cinder and the initial existence GET; initialization cancellation retains custom context causes. Tests: connection_delete_volume_test.go:TestConnectionDeleteVolumeCachedCinderLiveTokenAndNoWaitStillLocates, connection_delete_volume_test.go:TestConnectionDeleteVolumeOptionsPrecedeDiscoveryAndReuseSelectedForceProtocol, connection_delete_volume_test.go:TestConnectionDeleteVolumePreflightSelectsNoService, connection_delete_volume_test.go:TestConnectionDeleteVolumeInitializationRetainsCancellationCause.

  • Volume Name resolves once through the existing exact Cinder Collection. Only a direct logical NotFoundError with nil Cause and a clean source/context guard produces an initial false result with no mutation or invented404 evidence. Ambiguity, unsafe returned IDs, paging/decode/transport/list HTTP failures and nested missing errors remain errors. Tests: blockstorage/delete_volume_contracts_test.go:TestDeleteVolumeContractsInitialMissingHasFalseResultAndOnlyActualGET404Proof, blockstorage/delete_volume_contracts_test.go:TestDeleteVolumeContractsNameResolutionIsExactOnceAndErrorsNeverMutate, blockstorage/delete_volume_transport_test.go:TestDeleteVolumeTransportNestedNative404NeverBecomesLogicalAbsence, blockstorage/delete_volume_transport_test.go:TestDeleteVolumeTransportCapturedHeadersLiveAuthAndSourceGuards, resource/resolve_test.go:TestResolveIDUsesExactNamesAndNeverFetchesExplicitIDs.

  • Resolved or explicit ID binds fixed volume/action/deletion routes once. Initial GET200 requires a safe nonnull exact canonical id matching that selection; status may be absent/null and no current-state predicate blocks deletion. Located.Volume and Foundtrue are assigned only after clean identity/source processing; request names, response aliases and Location never retarget routes. Tests: blockstorage/delete_volume_contracts_test.go:TestDeleteVolumeContractsNameResolutionIsExactOnceAndErrorsNeverMutate, blockstorage/delete_volume_contracts_test.go:TestDeleteVolumeContractsNoWaitAlwaysLooksUpAndMutation404StillReturnsTrue, blockstorage/delete_volume_contracts_test.go:TestDeleteVolumeContractsCanonicalIdentityAndAcceptedDecodeFailuresNeverRetarget, blockstorage/delete_volume_contracts_test.go:TestDeleteVolumeContractsDefaultFreshWaitAndIndependentPhaseEvidence.

  • Initial clean GET404 returns Foundfalse/Deletedfalse without mutation, retaining independent Located and Absent raw physical proof. GET404 bodies are opaque. Admitted404 read/Close/context/source handling failures retain evidence and remain terminal errors rather than logical absence. Tests: blockstorage/delete_volume_contracts_test.go:TestDeleteVolumeContractsInitialMissingHasFalseResultAndOnlyActualGET404Proof, blockstorage/delete_volume_transport_test.go:TestDeleteVolumeTransportAccepted404ReadCloseContextAndSourceFailuresAreTerminal, blockstorage/delete_volume_transport_test.go:TestDeleteVolumeTransportNestedNative404NeverBecomesLogicalAbsence.

  • Selected microversion is either empty or canonical ASCII3. without leading zeros, overflow or another major. Values at least3.23 select modern behavior; empty or lower selects legacy without helper discovery, capability inference or branch fallback. Empty original Type is normalized only in the copied client to volumev3 while the original source facts remain guarded. Tests: blockstorage/delete_volume_contracts_test.go:TestDeleteVolumeContractsFiniteMicroversionsChooseExactNormalOrForceWireContract, blockstorage/delete_volume_contracts_test.go:TestDeleteVolumeContractsPreflightRejectsInvalidMicroversionsSourceAndReferenceBeforeCallbacks, connection_delete_volume_test.go:TestConnectionDeleteVolumeOptionsPrecedeDiscoveryAndReuseSelectedForceProtocol.

  • Normal deletion is a bodyless fixed DELETE admitting202/204/404 and always sends exact lowercase cascade=false. Modern selected3.23+ also sends owned force=true/false, including explicitfalse. No arbitrary query, cascade, JSON/body/header builder control or second normal-to-force mutation is exposed. Tests: blockstorage/delete_volume_contracts_test.go:TestDeleteVolumeContractsFiniteMicroversionsChooseExactNormalOrForceWireContract, blockstorage/delete_volume_contracts_test.go:TestDeleteVolumeContractsDefaultFreshWaitAndIndependentPhaseEvidence, blockstorage/delete_volume_contracts_test.go:TestDeleteVolumeContractsNoWaitAlwaysLooksUpAndMutation404StillReturnsTrue, blockstorage/delete_volume_contracts_test.go:TestDeleteVolumeContractsRejectedMutationsReturnCurrentNativeProofAndNoFallback, blockstorage/delete_volume_transport_test.go:TestDeleteVolumeTransportRedirectCannotChangeOwnedFiniteQueryOrActionRoute.

  • Legacy Force=true sends only fixed POST /volumes/{id}/action with exact os-force_delete:null JSON, no query, and admits201/202/404. Its null body deliberately follows pinned Python while leaving native ForceDelete empty-string behavior independent. Tests: blockstorage/delete_volume_contracts_test.go:TestDeleteVolumeContractsFiniteMicroversionsChooseExactNormalOrForceWireContract, blockstorage/delete_volume_contracts_test.go:TestDeleteVolumeContractsRejectedMutationsReturnCurrentNativeProofAndNoFallback, blockstorage/delete_volume_transport_test.go:TestDeleteVolumeTransportNativeAuthBackoffRetryPreservesNormalAndForceRequests, blockstorage/delete_volume_transport_test.go:TestDeleteVolumeTransportNativeRetryCannotChangeOwnedBodyResponseOrSuccessCodes.

  • A clean deletion/action404 after a clean initial200 is an ignored race. NoWait then sets Deletedtrue while preserving Foundtrue and Deletion404; waiting instead continues with an immediate fresh GET. Absent never borrows a mutation404. Read/Close/source/context failures or nested native404 causes never establish a clean race. Tests: blockstorage/delete_volume_contracts_test.go:TestDeleteVolumeContractsNoWaitAlwaysLooksUpAndMutation404StillReturnsTrue, blockstorage/delete_volume_contracts_test.go:TestDeleteVolumeContractsFiniteMicroversionsChooseExactNormalOrForceWireContract, blockstorage/delete_volume_contracts_test.go:TestDeleteVolumeContractsWaitHasNoFailureStatesAndFresh404OwnsAbsenceProof, blockstorage/delete_volume_transport_test.go:TestDeleteVolumeTransportAccepted404ReadCloseContextAndSourceFailuresAreTerminal, blockstorage/delete_volume_transport_test.go:TestDeleteVolumeTransportNestedNative404NeverBecomesLogicalAbsence.

  • Wait-only positive deadline begins after initial lookup and clean mutation acknowledgement reading/Close/guard. Nil/zero Timeout is unlimited; negative Timeout or nonpositive interval fails before HTTP even with waiting disabled. Parent context bounds all phases, while positive wait context interrupts polling HTTP and timers. Tests: blockstorage/delete_volume_transport_test.go:TestDeleteVolumeTransportWaitBudgetStartsAfterLookupAndMutationAndZeroIsUnlimited, blockstorage/delete_volume_transport_test.go:TestDeleteVolumeTransportWaitCancellationAndLaterRejectionsRetainPreviousProof, blockstorage/delete_volume_options_test.go:TestDeleteVolumeOptionsEffectiveDefaultsReplacementAndLastWins, blockstorage/delete_volume_options_test.go:TestDeleteVolumeOptionsValidateInactivePolicyAndPreserveCancellationCause.

  • Every waiting GET is fresh, fixed-ID and admits only200/404. Clean404 completes with Deletedtrue and independent Absent proof without synthesizing Ready; clean200 requires matching canonical ID. Exact case-insensitive deleted produces independently decoded Ready. Missing/null/empty status and error/error_deleting/in-use continue with no failure-state predicate; wrong known field types or mismatched IDs fail. Tests: blockstorage/delete_volume_contracts_test.go:TestDeleteVolumeContractsWaitHasNoFailureStatesAndFresh404OwnsAbsenceProof, blockstorage/delete_volume_contracts_test.go:TestDeleteVolumeContractsDefaultFreshWaitAndIndependentPhaseEvidence, blockstorage/delete_volume_contracts_test.go:TestDeleteVolumeContractsCanonicalIdentityAndAcceptedDecodeFailuresNeverRetarget, blockstorage/create_volume_models_test.go:TestCreateVolumeModelsCanonicalNullableTypesAndLiteralMetadataPrecision, blockstorage/create_volume_models_test.go:TestCreateVolumeModelsKnownFieldFailuresAreAtomicAndNullEmptyRemainDistinct.

  • ProgressCallback receives0 only for nonterminal200 observations, and terminal404/deleted suppresses it. Its original error, cancellation custom cause or source change prevents another poll, preserves accepted proof and exposes inspectable causes. Timer expiration retains the latest accepted observation; blocked/rejected HTTP never gains an older accepted ResponseError wrapper. Tests: blockstorage/delete_volume_contracts_test.go:TestDeleteVolumeContractsWaitHasNoFailureStatesAndFresh404OwnsAbsenceProof, blockstorage/delete_volume_transport_test.go:TestDeleteVolumeTransportWaitCancellationAndLaterRejectionsRetainPreviousProof, blockstorage/delete_volume_transport_test.go:TestDeleteVolumeTransportCapturedHeadersLiveAuthAndSourceGuards, blockstorage/delete_volume_transport_test.go:TestDeleteVolumeTransportWaitBudgetStartsAfterLookupAndMutationAndZeroIsUnlimited.

  • VolumeID, Found and Deleted retain their actual phase meanings: Found marks clean initial200; Deleted maps successful no-wait mutation/race handling or completed waiting and remainsfalse on earlier handling errors. Located/Deletion/LastAccepted/Absent capture actual admitted raw response before read/Close/decode/guard errors, and Ready/raw bodies/headers/nested model fields own independent data. Later rejected/native/plain transport errors preserve their own evidence without overwriting prior LastAccepted. Tests: blockstorage/delete_volume_contracts_test.go:TestDeleteVolumeContractsDefaultFreshWaitAndIndependentPhaseEvidence, blockstorage/delete_volume_contracts_test.go:TestDeleteVolumeContractsInitialMissingHasFalseResultAndOnlyActualGET404Proof, blockstorage/delete_volume_contracts_test.go:TestDeleteVolumeContractsNoWaitAlwaysLooksUpAndMutation404StillReturnsTrue, blockstorage/delete_volume_contracts_test.go:TestDeleteVolumeContractsCanonicalIdentityAndAcceptedDecodeFailuresNeverRetarget, blockstorage/delete_volume_transport_test.go:TestDeleteVolumeTransportAccepted404ReadCloseContextAndSourceFailuresAreTerminal, blockstorage/delete_volume_transport_test.go:TestDeleteVolumeTransportNestedNative404NeverBecomesLogicalAbsence, blockstorage/delete_volume_transport_test.go:TestDeleteVolumeTransportWaitCancellationAndLaterRejectionsRetainPreviousProof.

  • Captured effective Cinder bases, selected type/microversion and ordinary entry headers remain fixed while original provider authentication is live. Provider/Endpoint/ResourceBase/Type/Microversion replacement is terminal. Configured native reauthentication/backoff/retry remain provider-owned while fixed-request guards reject changes to logical method/URL/query/serialized body or accepted response policy; SDK does not orchestrate replay or rollback. Tests: blockstorage/delete_volume_transport_test.go:TestDeleteVolumeTransportCapturedHeadersLiveAuthAndSourceGuards, blockstorage/delete_volume_transport_test.go:TestDeleteVolumeTransportNativeAuthBackoffRetryPreservesNormalAndForceRequests, blockstorage/delete_volume_transport_test.go:TestDeleteVolumeTransportNativeRetryCannotChangeOwnedBodyResponseOrSuccessCodes, blockstorage/delete_volume_transport_test.go:TestDeleteVolumeTransportRedirectCannotChangeOwnedFiniteQueryOrActionRoute.

  • The direct cloud helper mapping leaves native Delete/ForceDelete/Get/List, standalone Collection removal and waiter defaults, attachment/create workflows and generated inventories independent. Connection cache/options/source/model regressions remain validated without promoting separately reviewed Python find/delete/wait or inherited Resource/session/cache/discovery declarations. Tests: connection_delete_volume_test.go:TestConnectionDeleteVolumeCachedCinderLiveTokenAndNoWaitStillLocates, connection_delete_volume_test.go:TestConnectionDeleteVolumeOptionsPrecedeDiscoveryAndReuseSelectedForceProtocol, connection_delete_volume_test.go:TestConnectionDeleteVolumePreflightSelectsNoService, connection_delete_volume_test.go:TestConnectionDeleteVolumeInitializationRetainsCancellationCause, blockstorage/create_volume_models_test.go:TestCreateVolumeModelsKnownFieldFailuresAreAtomicAndNullEmptyRemainDistinct.

Python/Go differences:

  • Go replaces ambiguous Python name_or_id strings with explicit resource.Ref. IDs use only an initial member GET; Names use exact Collection resolution and then a fresh fixed-ID confirmation GET. Python Resource.find first tries member GET and can fall back after400/403/404 to a detail list matching ID or name. The extra Go confirmation shifts initial absence after a name-list race: Go can returnfalse where Python would ignore a later mutation404 and returntrue.
  • Go branches on the selected Cinder Microversion, with strict canonical3. validation and3.23 as the threshold, rather than Python utils.supports_microversion endpoint/default support discovery. Connection may discover a configured latest/range before helper capture; direct helper does no discovery or fallback. Empty Type is normalized on the copied client for consistent native version headers.
  • Go normal DELETE always includes canonical lowercase cascade=false and selected modern force=true/false. Legacy Force sends pinned Python os-force_delete:null rather than native Gophercloud empty string. Go admits only the documented/native finite mutation status sets plus clean404, preserves opaque responses and rejects arbitrary route/query/body/session controls; existing native leaves retain independent behavior.
  • Both helpers default to waiting forever after deletion rather than proxy standalone120s. Go nil/numeric-zero Timeout is unlimited and negative/inactive-invalid policy is rejected before HTTP. Python iterate_timeout treats numeric-zero/negative wait as immediate post-mutation timeout before the first deletion fetch. Positive Go context deadlines interrupt HTTP/timers while Python checks elapsed time between fetches; caller context additionally controls lookup and mutation.
  • Go fresh200 observations require matching safe canonical IDs and strict known nullable types. Missing/null/empty status continues with no failure predicate; pinned Resource.wait_for_delete invokes resource.status.lower() when the Resource has status and may fail forNone. Python falsy fetch and mutable cached Resource behavior are represented by explicit Go404/deleted proof rather than arbitrary object truthiness or seeded hydration.
  • Python returns one bool or raises. Go exposes Found/Deleted plus independently owned Located/Deletion/LastAccepted/Absent/Ready evidence even after accepted processing errors. Waitfalse Deletedtrue denotes completed request handling, not an observed absence. GET404 is independent absence evidence; mutation404 is retained only as Deletion proof. Error-returning callback0, raw nullable models and local option preparation are explicit Go extensions.
  • Go only treats a clean direct logical Name miss or clean admitted physical404 as absence/race. Nested transport/native/list/read/Close/context/source failures remain errors with original causes. Captured client settings and fixed request ownership preserve current native authentication/retry without claiming packet-level exactly-once, arbitrary provider mutation, cleanup or rollback.
  • This candidate maps only the direct cloud delete_volume declaration under its documented Go policies after implementation and meaningful QA. Separately inventoried Python find_volume/delete_volume/wait_for_delete and inherited Resource/session/cache/API-version behavior keep independent reviews. Cinder v3 selection does not assert full Cinder v2 Resource semantics or whole-SDK completion.
python:cloud/_block_storage/BlockStorageCloudMixin/get_volume_attach_device

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.GetVolumeAttachDevice

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.GetVolumeAttachDeviceFields

  • The direct cloud helper maps to two pure package functions: typed GetVolumeAttachDevice accepts the closed four-model constraint covering both SDK-owned models and native Cinder v2/v3 Volume pointers, and GetVolumeAttachDeviceFields consumes supplied raw JSON fields. Neither takes clients/context/Ref/options nor performs lookup, HTTP, refresh or status validation; existing workflow VolumeInfo values require no caller adapter. Tests: blockstorage/volume_attachment_device_test.go:TestVolumeAttachDeviceOwnedModelsUseLiteralCurrentSelectionWithoutCloudState, blockstorage/volume_attachment_device_test.go:TestVolumeAttachDeviceNativeV2V3ModelsExposeDeclaredZeroStringPresenceLoss, blockstorage/volume_attachment_device_test.go:TestVolumeAttachDevicePureOwnershipAndTypedCurrentVersusOriginalRawEvidence.

  • Typed nil pointers for all four accepted concrete types and nil Attachments produce local invalid-input errors; a nonnil empty attachment slice returns nil success. Current supplied owned attachments remain authoritative even when original volume Body lacks attachments or contains stale/null evidence. Tests: blockstorage/volume_attachment_device_test.go:TestVolumeAttachDeviceOwnedModelsUseLiteralCurrentSelectionWithoutCloudState, blockstorage/volume_attachment_device_test.go:TestVolumeAttachDeviceOwnedManualPresenceAndTypedCurrentAuthority, blockstorage/volume_attachment_device_test.go:TestVolumeAttachDeviceNativeV2V3ModelsExposeDeclaredZeroStringPresenceLoss.

  • Owned selection reads attachment order and compares current ServerID literally with case-sensitive equality, including empty strings, spaces and path/query punctuation. Returned device text is unchanged; unmatched rows do not require a device, and unrelated volume ID/status and attachment metadata do not affect selection. Tests: blockstorage/volume_attachment_device_test.go:TestVolumeAttachDeviceOwnedModelsUseLiteralCurrentSelectionWithoutCloudState, blockstorage/volume_attachment_device_test.go:TestVolumeAttachDeviceOwnedManualPresenceAndTypedCurrentAuthority.

  • The first owned match immediately returns a copied nonnil empty/nonempty device or nil for explicit null. Missing canonical device on that first match errors with no later duplicate fallback. Visited nil rows or absent/wrong-case canonical server_id error in order; schema-invalid rows after an accepted empty/null match remain unvisited. Tests: blockstorage/volume_attachment_device_test.go:TestVolumeAttachDeviceOwnedFirstMatchStopsOnEmptyNullOrMissingAndVisitsOnlyPrefix.

  • Manual owned records with Body nil interpret nil ServerID as explicit null/nonmatch and matching nil Device as explicit null success. A nonnil Body distinguishes missing consumed canonical keys; present canonical keys with nil typed pointers represent current null without decoding stale raw values. Tests: blockstorage/volume_attachment_device_test.go:TestVolumeAttachDeviceOwnedFirstMatchStopsOnEmptyNullOrMissingAndVisitsOnlyPrefix, blockstorage/volume_attachment_device_test.go:TestVolumeAttachDeviceOwnedManualPresenceAndTypedCurrentAuthority.

  • Nonnull caller-supplied/current owned ServerID and Device override original absent/stale/wrong-type Body fields. Typed-current selection never silently hydrates original raw evidence; the explicit raw companion reading VolumeInfo.Body observes the original response rather than later edited typed values. Tests: blockstorage/volume_attachment_device_test.go:TestVolumeAttachDeviceOwnedManualPresenceAndTypedCurrentAuthority, blockstorage/volume_attachment_device_test.go:TestVolumeAttachDevicePureOwnershipAndTypedCurrentVersusOriginalRawEvidence.

  • Both native Cinder model versions expose their current ordered string fields directly without an adapter or invented raw proof. Omitted/null/empty native Device becomes a copied nonnil empty string, and zero ServerID can match an empty selector; the native decoder case-folding and presence loss are declared representation differences. Tests: blockstorage/volume_attachment_device_test.go:TestVolumeAttachDeviceNativeV2V3ModelsExposeDeclaredZeroStringPresenceLoss.

  • Raw access reads only the exact top-level attachments key and ignores unrelated supplied field types, including invalid raw JSON in unconsumed fields. Nil/missing/wrong-case top-level input and a present nil RawMessage are local consumed-input errors; unrelated id/status/attachment metadata need no owned-model schema validation. Tests: blockstorage/volume_attachment_device_test.go:TestVolumeAttachDeviceRawIterableBoundaryAndLocalConsumedInputErrors, blockstorage/volume_attachment_device_test.go:TestVolumeAttachDeviceRawFirstMatchPreservesTypingCastValuesAndNumericPrecision, blockstorage/volume_attachment_device_test.go:TestVolumeAttachDeviceWholeModelDecoderAndDirectRawHaveExplicitDifferentBoundaries.

  • Raw attachments valid empty array, object or string return nil success as ordinary plain JSON mapping iterables. Null/bool/number and nonempty object/string fail locally; arrays preserve ordered prefix consumption and reject visited null/nonobject rows or missing exact server_id/device only when those fields are consumed. Tests: blockstorage/volume_attachment_device_test.go:TestVolumeAttachDeviceRawIterableBoundaryAndLocalConsumedInputErrors, blockstorage/volume_attachment_device_test.go:TestVolumeAttachDeviceRawFirstMatchPreservesTypingCastValuesAndNumericPrecision.

  • Raw attachments syntax and UTF-8 are validated across the entire supplied JSON before selection. Empty/whitespace-only bytes, trailing extra JSON, malformed tail syntax and invalid UTF-8 including an unvisited tail return local errors; JSON SyntaxError remains available in the error chain. Tests: blockstorage/volume_attachment_device_test.go:TestVolumeAttachDeviceRawIterableBoundaryAndLocalConsumedInputErrors.

  • Raw row server_id must have the exact canonical key. Null and every nonstring JSON value are nonmatches against the supplied Go string, without text coercion or device inspection. JSON strings compare literally and case-sensitively, including punctuation and empty selectors. Tests: blockstorage/volume_attachment_device_test.go:TestVolumeAttachDeviceRawIterableBoundaryAndLocalConsumedInputErrors, blockstorage/volume_attachment_device_test.go:TestVolumeAttachDeviceRawFirstMatchPreservesTypingCastValuesAndNumericPrecision.

  • The first raw matching device is returned unchanged as a copied nonnull RawMessage for strings, empty strings, escaped strings, bool, zero, arbitrary-precision integer/decimal, arrays and objects. Null match and no match both return nil success. Missing first matched device cannot fall back, and a schema-invalid tail after a match is not visited. Tests: blockstorage/volume_attachment_device_test.go:TestVolumeAttachDeviceRawIterableBoundaryAndLocalConsumedInputErrors, blockstorage/volume_attachment_device_test.go:TestVolumeAttachDeviceRawFirstMatchPreservesTypingCastValuesAndNumericPrecision.

  • All consumed-input failures use resource.OperationError with the actual public operation name, Resource volume, ErrInvalidOption identity and visited key/index where applicable. Parsing causes are preserved, and local failures never manufacture ResponseError or NotFoundError. Tests: blockstorage/volume_attachment_device_test.go:TestVolumeAttachDeviceOwnedModelsUseLiteralCurrentSelectionWithoutCloudState, blockstorage/volume_attachment_device_test.go:TestVolumeAttachDeviceOwnedFirstMatchStopsOnEmptyNullOrMissingAndVisitsOnlyPrefix, blockstorage/volume_attachment_device_test.go:TestVolumeAttachDeviceOwnedManualPresenceAndTypedCurrentAuthority, blockstorage/volume_attachment_device_test.go:TestVolumeAttachDeviceNativeV2V3ModelsExposeDeclaredZeroStringPresenceLoss, blockstorage/volume_attachment_device_test.go:TestVolumeAttachDeviceRawIterableBoundaryAndLocalConsumedInputErrors.

  • Accessors do not mutate supplied model fields, attachments, Body, headers or status evidence. Returned owned/native device pointers and raw JSON bytes are independent copies; caller mutation of results does not change a repeated selection. Concurrent mutation of the supplied mutable input is outside the contract. Tests: blockstorage/volume_attachment_device_test.go:TestVolumeAttachDeviceNativeV2V3ModelsExposeDeclaredZeroStringPresenceLoss, blockstorage/volume_attachment_device_test.go:TestVolumeAttachDevicePureOwnershipAndTypedCurrentVersusOriginalRawEvidence.

  • Raw prefix consumption is independent from existing strict whole-model decoding: ignored wrong-type known fields and schema-invalid tails may be accepted by the direct raw helper after the first match, while the unchanged owned observation/VolumeInfo decoders reject full malformed models. JSON syntax/UTF-8 validity remains a whole-input boundary. Tests: blockstorage/volume_attachment_device_test.go:TestVolumeAttachDeviceRawIterableBoundaryAndLocalConsumedInputErrors, blockstorage/volume_attachment_device_test.go:TestVolumeAttachDeviceWholeModelDecoderAndDirectRawHaveExplicitDifferentBoundaries.

Python/Go differences:

  • This direct declaration is pinned to openstacksdk ef55d7d1666099f50bf1e1c40b59d7e7b72a51fe; native accepted models are pinned to Gophercloud v2.15.0. Only get_volume_attach_device is mapped here. The helper uses no self/session/cache calls; separately inventoried Resource descriptors, attachment workflows, native operations and other SDK declarations retain independent review statuses.
  • Python volume/server_id duck-typed values are represented by a library-owned closed Go generic constraint for four existing model pointers plus an explicit ordinary-JSON raw-fields companion. Go serverID is a string and equality is literal; custom mapping/equality/iterables, sets/tuples and user-defined object behavior are outside this Go representation, rather than requirements for caller interfaces or adapters.
  • Python typing.cast returns the matched device unchanged, including nonstrings, with Python object identity. The Go typed function returns copied string/null values already representable in the selected model; the raw function returns copied arbitrary nonnull JSON values, preserving bytes and numeric precision without coercion. Neither returns aliasing Python object identity.
  • Go owned mutable current fields are authoritative; passive original Body is consulted only for canonical-key presence when a typed pointer is nil. Manual Body nil treats nullable pointers as explicit null, while nonnil Body can retain omission. Calling the raw companion with volume.Body explicitly chooses original evidence and never silently overrides edited typed values.
  • Native Gophercloud v2/v3 Volume attachment ServerID/Device strings collapse omitted/null/empty evidence, and native decoding can fold key case or eagerly reject other known fields/timestamps. The typed accessor uses those current strings literally, including zero ServerID matching an empty selector and nonnil empty Device, without reconstructing lost null/presence proof. Raw fields are the explicit presence-sensitive alternative.
  • Go raw input validates full attachments JSON syntax and UTF-8 before ordered field consumption; a schema-invalid unvisited tail can be ignored, but syntax/encoding errors anywhere fail. Python operates on already supplied objects and has no corresponding JSON parser boundary. Go decoding/string equality follows Go JSON/UTF-8 representation; arbitrary Python Unicode/custom object semantics are not silently reproduced.
  • Python plain dict empty attachments []/{} or empty string iterates empty, which the raw Go function represents. Inherited Python v2 attachments Body is untyped, whereas v3 type=list can wrap a nonnull object/string into a singleton list. Descriptor conversion is independent Resource behavior rather than an additional HTTP/control flow in this direct helper. Go typed nil attachments is invalid evidence and nonnil empty slices represent an empty list.
  • Python missing consumed keys/noniterable values raise KeyError/TypeError and runtime cast performs no validation. Go uses local OperationError wrapping ErrInvalidOption with function/resource/key/index context and JSON causes; no HTTP/NotFound evidence is invented. The nil successful result deliberately joins first matched null with no match, and empty string remains a nonnil first match.
  • Existing owned whole-model strict decoding remains independent from this direct accessor. It validates all rows and known field types before selection, while raw direct access examines only fields consumed by the pinned helper after a full JSON syntax/UTF-8 check. This mapping does not promote whole-Resource/session/cache or whole-SDK completeness.
python:cloud/_block_storage/BlockStorageCloudMixin/get_volumes

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk.Connection.GetVolumes

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.GetVolumes

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.PrepareGetVolumesOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithGetVolumesOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithGetVolumesServerFields

  • github.com/JSYoo5B/go-openstacksdk/resource.RawResource.Decode

  • github.com/JSYoo5B/go-openstacksdk/resource.RawResource.Clone

  • GetVolumes maps the supplied server ID through GetVolumesRequest.ServerID as a literal local JSON string, including empty/space/punctuation values. The package and Connection workflows return RawResource matches plus independent admitted Pages evidence; no UUID/Ref/name validation, Nova selection, server lookup, member GET, refresh, wait or SDK deadline is introduced. Tests: blockstorage/get_volumes_test.go:TestGetVolumesCompletePagingPreservesAttachmentDuplicatesAndDistinctRawRows, blockstorage/get_volumes_test.go:TestGetVolumesV3ListifiedAttachmentsAndFullJSONServerEqualityIgnoreDeviceSchema, connection_get_volumes_test.go:TestConnectionGetVolumesUsesOnlyCachedCinderAndOriginalOptionsOnce.

  • GetVolumesOpts.ServerFields nil pointer uses the request string, while a nonnil pointer selects an owned raw-fields map, including nil map for explicit missing evidence. WithGetVolumesServerFields and whole-replacement WithGetVolumesOptions snapshot pointers/maps/raw bytes and original callbacks apply once in order; no id/key/JSON validation occurs before source consumption. Tests: blockstorage/get_volumes_test.go:TestGetVolumesOptionsSnapshotsReplacementOrderedCallbacksAndDelayedFields, blockstorage/get_volumes_test.go:TestGetVolumesConsumesAssociationAndServerEvidenceOnlyAfterCompleteList, blockstorage/get_volumes_test.go:TestGetVolumesV3ListifiedAttachmentsAndFullJSONServerEqualityIgnoreDeviceSchema.

  • PrepareGetVolumesOptions applies original options locally once with context guards and snapshots all retained maps/raw bytes without HTTP. Direct package captures required Cinder source before callbacks and guards context/source during preparation and execution. Provided server id is validated lazily only after list materialization and a visited attachment server_id. Tests: blockstorage/get_volumes_test.go:TestGetVolumesOptionsSnapshotsReplacementOrderedCallbacksAndDelayedFields, blockstorage/get_volumes_test.go:TestGetVolumesPreflightAndCapturedSourceFactsBeforeOptionsOrSubsequentPages, blockstorage/get_volumes_test.go:TestGetVolumesConsumesAssociationAndServerEvidenceOnlyAfterCompleteList.

  • Connection validates context/receiver, prepares original callbacks once before selecting cached Cinder v3 and delegates complete owned options without rerunning originals. No Nova service is initialized; copied execution clients preserve current provider authentication and configured selected microversion. Tests: connection_get_volumes_test.go:TestConnectionGetVolumesUsesOnlyCachedCinderAndOriginalOptionsOnce, connection_get_volumes_test.go:TestConnectionGetVolumesPreparesOptionsBeforeGetterAndDelaysUnusedServerFields, connection_get_volumes_test.go:TestConnectionGetVolumesInvalidEntryNilOptionsAndOptionCancellationSelectNoService, connection_get_volumes_test.go:TestConnectionGetVolumesGetterCancellationKeepsOriginalCause.

  • Captured source facts Provider/Endpoint/ResourceBase/Type/Microversion are sticky throughout callbacks, HTTP and selection. Ordinary headers are captured independently and current provider tokens remain live; empty Type is normalized only on the private copied Cinder source. Source drift or caller cancellation is terminal and retains native causes without borrowing stale response evidence. Tests: blockstorage/get_volumes_test.go:TestGetVolumesNativeAuthBackoffRetryKeepsBodylessExactListAndLiveHeaders, blockstorage/get_volumes_test.go:TestGetVolumesPreflightAndCapturedSourceFactsBeforeOptionsOrSubsequentPages, blockstorage/get_volumes_test.go:TestGetVolumesAcceptedPageFailuresKeepCurrentProofAndLaterRejectionsNeverBorrowOldPage, connection_get_volumes_test.go:TestConnectionGetVolumesUsesOnlyCachedCinderAndOriginalOptionsOnce.

  • The initial fixed request is bodyless GET200 /volumes/detail with no filters/all_projects/name/status/server query and no cap/first-page shortcut. Every page up to actual EOF and every raw volume object is completely materialized before any attachments or supplied server fields are consumed; later page failures take precedence over earlier association/server errors. Tests: blockstorage/get_volumes_test.go:TestGetVolumesCompletePagingPreservesAttachmentDuplicatesAndDistinctRawRows, blockstorage/get_volumes_test.go:TestGetVolumesConsumesAssociationAndServerEvidenceOnlyAfterCompleteList, blockstorage/get_volumes_test.go:TestGetVolumesContinuationScopeCyclesAndCanonicalEnvelopeUseActualPageProof.

  • Accepted list pages require complete valid UTF-8 JSON with canonical nonnull volumes array and object rows, without typed known-field decoding. Each returned raw volume owns its Body/header/status evidence; wrong-type id/status/device/timestamp or extensions are preserved rather than eagerly schema-validated. Tests: blockstorage/get_volumes_test.go:TestGetVolumesCompletePagingPreservesAttachmentDuplicatesAndDistinctRawRows, blockstorage/get_volumes_test.go:TestGetVolumesContinuationScopeCyclesAndCanonicalEnvelopeUseActualPageProof, blockstorage/get_volumes_test.go:TestGetVolumesAcceptedPageFailuresKeepCurrentProofAndLaterRejectionsNeverBorrowOldPage, resource/raw_resource_test.go:TestRawResourceAcceptsFlexibleCanonicalObjectsAndFailedDecodeIsAtomic.

  • Canonical volumes [] terminates immediately as pinned Resource.list EOF and does not inspect or request its advertised next links, including malformed or unsafe links. The collector judges raw array length without native IsEmpty/ExtractVolumes. On nonempty pages, continuation extraction delegates to actual pinned native VolumePage.NextPageURL for the exact canonical volumes_links envelope; relative next URLs resolve against the current URL and remain on the initial escaped collection path and origin/authority. Userinfo/fragment/opaque/malformed query/path changes and canonical URL cycles including query reordering are rejected before the next request. Advertised query keys remain allowed; no synthetic marker, HTTP Link, envelope substitution or local restart is invented. Tests: blockstorage/get_volumes_test.go:TestGetVolumesContinuationScopeCyclesAndCanonicalEnvelopeUseActualPageProof, blockstorage/get_volumes_test.go:TestGetVolumesCompletePagingPreservesAttachmentDuplicatesAndDistinctRawRows.

  • Each physically admitted200 response contributes independently owned Pages Body/header/status before read/Close/decode/source/context failure. Rejected HTTP/native/transport failures add no successful page and use their own actual evidence, never an old200 ResponseError. Fixed request ownership and native auth/reauth/retry behavior are preserved. Tests: blockstorage/get_volumes_test.go:TestGetVolumesAcceptedPageFailuresKeepCurrentProofAndLaterRejectionsNeverBorrowOldPage, blockstorage/get_volumes_test.go:TestGetVolumesNativeAuthBackoffRetryKeepsBodylessExactListAndLiveHeaders.

  • Raw response/attachment shape or missing-key failures carry their actual originating page response evidence even when detected after all pages materialize. Provided-server missing/invalid id is local ErrInvalidOption without invented ResponseError. On every error Volumes remains nil, while actual admitted Pages remains available; only full success assigns a new nonnil result slice, including empty. Tests: blockstorage/get_volumes_test.go:TestGetVolumesConsumesAssociationAndServerEvidenceOnlyAfterCompleteList, blockstorage/get_volumes_test.go:TestGetVolumesAcceptedPageFailuresKeepCurrentProofAndLaterRejectionsNeverBorrowOldPage, blockstorage/get_volumes_test.go:TestGetVolumesContinuationScopeCyclesAndCanonicalEnvelopeUseActualPageProof.

  • Actual Cinder v3 attachments type=list consumption is preserved: arrays retain order, nonnull nonarray wraps one row, and null/missing fails iteration. A wrapped object with canonical server_id is consumable, whereas wrapped empty object/string/nonobject rows fail. This differs deliberately from the separate pure device accessor plain-mapping empty-iterable interpretation. Tests: blockstorage/get_volumes_test.go:TestGetVolumesV3ListifiedAttachmentsAndFullJSONServerEqualityIgnoreDeviceSchema.

  • Every visited attachment must be an object and consume exact canonical server_id before supplied server id. Missing attachment key errors first when both inputs are malformed. Empty volume lists and empty attachment arrays do not consume missing/invalid supplied server evidence. Raw nil server id value is explicit JSON null; invalid JSON/UTF-8 is delayed until the server id is actually read. Tests: blockstorage/get_volumes_test.go:TestGetVolumesConsumesAssociationAndServerEvidenceOnlyAfterCompleteList, blockstorage/get_volumes_test.go:TestGetVolumesV3ListifiedAttachmentsAndFullJSONServerEqualityIgnoreDeviceSchema, connection_get_volumes_test.go:TestConnectionGetVolumesPreparesOptionsBeforeGetterAndDelaysUnusedServerFields.

  • Association equality covers ordinary JSON string/null/bool/number/array/object without float64 conversion. New EqualPythonJSON supports recursive Python bool-number equality while preserving exact decimal number normalization; existing EqualJSON/MatchFilters semantics remain unchanged. Default request strings are never coerced into numeric/null/bool values. Tests: blockstorage/get_volumes_test.go:TestGetVolumesV3ListifiedAttachmentsAndFullJSONServerEqualityIgnoreDeviceSchema, internal/jsonfilter/python_equal_test.go:TestEqualPythonJSONSupportsRecursiveBooleanNumberEqualityAndCompleteShape, internal/jsonfilter/python_equal_test.go:TestEqualPythonJSONPreservesExactDecimalPrecisionAndLargeExponents, internal/jsonfilter/python_equal_test.go:TestEqualPythonJSONErrorsOwnInputsAndExistingFiltersKeepBooleanNumberDistinction.

  • Every matching attachment appends the same corresponding owned RawResource pointer in volume and attachment order. Duplicate associations are retained without deduplication/break, while separate source rows with the same id remain distinct. Device is never consumed, regardless of absent/null/empty/bool/object values, and volume ID/status/timestamp do not filter results. Tests: blockstorage/get_volumes_test.go:TestGetVolumesCompletePagingPreservesAttachmentDuplicatesAndDistinctRawRows, blockstorage/get_volumes_test.go:TestGetVolumesV3ListifiedAttachmentsAndFullJSONServerEqualityIgnoreDeviceSchema.

  • A malformed later attachment fails after an earlier match without exposing a partial Volumes slice. Context/source guards also apply across association processing. A successful result uses a new slice with intentional duplicate row-pointer aliasing; independent per-occurrence mutation is available through explicit Clone. Tests: blockstorage/get_volumes_test.go:TestGetVolumesConsumesAssociationAndServerEvidenceOnlyAfterCompleteList, blockstorage/get_volumes_test.go:TestGetVolumesAcceptedPageFailuresKeepCurrentProofAndLaterRejectionsNeverBorrowOldPage, blockstorage/get_volumes_test.go:TestGetVolumesPreflightAndCapturedSourceFactsBeforeOptionsOrSubsequentPages, connection_get_volumes_test.go:TestConnectionGetVolumesInvalidEntryNilOptionsAndOptionCancellationSelectNoService.

  • RawResource.UnmarshalJSON atomically accepts only a full UTF-8 nonnull JSON object and retains all fields without known-type coercion; MarshalJSON emits its current Body. This library-owned flexible result supports the direct helper device-independent behavior without weakening existing VolumeInfo/native decoders or claiming inherited Python Resource behavior. Tests: resource/raw_resource_test.go:TestRawResourceAcceptsFlexibleCanonicalObjectsAndFailedDecodeIsAtomic.

  • RawResource.Decode atomically projects current Body into a fresh nonnil pointer target, preserves its strict custom known-field decoder behavior and commits caller state only on success. Directly declared exported exact Metadata field seeding transfers independently owned source evidence to compatible SDK targets; projection errors are local and do not manufacture HTTP response failures. Tests: resource/raw_resource_test.go:TestRawResourceDecodeProjectsStrictTypedModelAtomicallyWithIndependentMetadata, resource/raw_resource_test.go:TestRawResourceDecodeRejectsInvalidTargetAndRetainsLocalConversionCauses.

  • RawResource.Clone deeply owns Body/raw bytes/header/nullable metadata, making explicit independent copies of otherwise repeated matching row pointers. Options, Pages and separate materialized rows likewise own their captured mutable evidence; caller/result mutations do not rewrite in-flight policy or another independently owned proof. Tests: resource/raw_resource_test.go:TestRawResourceCloneOwnsRawHeaderNullableMetadataAndLinks, resource/raw_resource_test.go:TestRawResourceDecodeProjectsStrictTypedModelAtomicallyWithIndependentMetadata, blockstorage/get_volumes_test.go:TestGetVolumesCompletePagingPreservesAttachmentDuplicatesAndDistinctRawRows, blockstorage/get_volumes_test.go:TestGetVolumesOptionsSnapshotsReplacementOrderedCallbacksAndDelayedFields.

  • The pinned cloud cache parameter is deprecated warning-only/no-op and is deliberately omitted in Go. Review maps only this direct get_volumes declaration and its explicit Go policies; separate cloud list/get/id/exists/search, native/Proxy operations and inherited Resource/session/cache remain independently reviewed. Tests: blockstorage/get_volumes_test.go:TestGetVolumesCompletePagingPreservesAttachmentDuplicatesAndDistinctRawRows, connection_get_volumes_test.go:TestConnectionGetVolumesUsesOnlyCachedCinderAndOriginalOptionsOnce, connection_get_volumes_test.go:TestConnectionGetVolumesPreparesOptionsBeforeGetterAndDelaysUnusedServerFields.

Python/Go differences:

  • Pinned direct source is openstacksdk ef55d7d1666099f50bf1e1c40b59d7e7b72a51fe get_volumes. Go composes selected Cinder v3 detailed-list behavior under Gophercloud v2.15.0 and omits the Python deprecated cache argument/warning, which never changes listing. This unit does not promote list_volumes or any separate get/id/exists/search/native/Proxy/inherited declaration.
  • Go request ServerID is an explicit string projection of supplied server[id]; ServerFields represents ordinary JSON plain mapping id values with lazy consumption. Custom Python mapping/equality/iterables, Resource missing-default/server descriptor behavior and arbitrary object values are outside this JSON representation. Explicit null uses present id:null/nil RawMessage, while missing id remains a local error only when consumed.
  • Go uses library-owned RawResource to preserve device-independent direct selection and unrelated raw field precision, rather than eagerly forcing known VolumeInfo/native types. Explicit atomic Decode provides stricter typed projection and copied Metadata evidence. No arbitrary Python Resource descriptor/session/cache behavior is implicitly recreated; Cinder v3 attachment type=list wrapping is mapped for this workflow separately from the pure plain-mapping device accessor.
  • Go ordinary JSON equality supports recursive bool-number equality as Python does, but exact decimal normalization avoids float64 rounding. This deliberately differs from Python floating-point/custom numeric objects and arbitrary Unicode/equality semantics. Existing collection EqualJSON/MatchFilters behavior remains independent and unchanged.
  • Python returns a new list of original Volume object references and raises on failure. Go returns a new slice of owned raw row pointers with duplicate occurrences intentionally aliasing the same row, plus independently owned actual Pages evidence; any error leaves Volumes nil. Explicit Clone produces per-occurrence independent copies, rather than silently deduplicating or splitting repeated pointer identity.
  • Go requires complete UTF-8 object pages with canonical nonnull volumes array/object rows; pinned Resource.list can wrap a nonarray resources value and strips a self key during Resource construction, while Go raw results preserve complete row fields. These are explicit canonical-response/raw-ownership boundaries rather than automatic reproduction of inherited Resource hydration. Empty volumes [] is still actual EOF and suppresses all unused next-link processing. Nonempty continuation uses only canonical native volumes_links plus fixed same-origin escaped collection routing/source/context policies; response selection examines consumed attachments/server_id and ignores device/other known field types. Accepted proof survives processing errors without being borrowed for later rejected/blocked requests.
  • Go context controls preparation, discovery, HTTP and selection; policy callbacks are owned and run once. Ordinary captured headers coexist with live provider authentication and existing native retries. Direct package does no version discovery/fallback or partial successful selection, and no rollback/replay/member GET is added.
  • This go_mapping covers only the direct pinned get_volumes declaration under the explicit documented Go policies. Generic RawResource and jsonfilter additions are library-owned support extensions rather than blanket promotion of unrelated Python Resource/session/cache/native/Proxy or whole-SDK capabilities.
python:cloud/_block_storage/BlockStorageCloudMixin/search_volumes

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk.Connection.SearchVolumes

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.SearchVolumes

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.PrepareVolumeSearchOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeSearchOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeSearchFilters

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeSearchExpression

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeSearchLocation

  • github.com/JSYoo5B/go-openstacksdk.Connection.CurrentLocation

  • github.com/JSYoo5B/go-openstacksdk.WithCloudLocation

  • The public Connection and direct ServiceClient entry points always request Cinder v3 detailed collection with no caller identifier query/member GET shortcut; complete accepted pages are collected before local identifier/filter/expression phases. Every known descriptor of every row is normalized eagerly before continuation, so a malformed unselected row blocks the next page and wins over caller filter errors. Tests: blockstorage/volume_search_test.go:TestSearchVolumesCompletePagesExactOrGlobPreservesDuplicatesAndWireOwnership, blockstorage/volume_search_test.go:TestSearchVolumesNormalizesEveryRowBeforeNextAndConsumesFiltersAfterFullList.

  • Identifier matching is a per-row exact ID/name shortcut followed by full case-sensitive CPython-style glob; exact matches do not remove wildcard matches on other rows, row order/duplicate physical rows remain distinct, and slash/newline/dot/Unicode/backslash/classes/reversed ranges/unmatched brackets are ordinary pattern semantics. Tests: blockstorage/volume_search_test.go:TestSearchVolumesCompletePagesExactOrGlobPreservesDuplicatesAndWireOwnership, internal/cloudfilter/identifier_test.go:TestCloudFilterIdentifierPreservesPerRowExactGlobMatchesDuplicatesAndSourceOrder, internal/cloudfilter/identifier_test.go:TestCloudFilterGlobUsesCPythonRuneDotAllClassesAndLiteralBackslashes.

  • Untyped id/name values use Python JSON-domain strings including None/True/False and insertion-ordered quoted containers; null/missing differ from empty strings and case is never folded. Empty search NameOrID bypasses local identity selection without a member route. Tests: internal/cloudfilter/identifier_test.go:TestCloudFilterIdentifiersUsePythonJSONDomainStringAndContainerRepresentation, internal/cloudfilter/identifier_test.go:TestCloudFilterMissingAndNullIdentifiersDifferFromEmptyStringsAndRemainCaseSensitive.

  • Raw filters are consumed only after complete list and identifier phases. Omitted/null and ordinary falsey JSON filters return selected rows; truthy nonmapping filters remain lazy on empty selections. Invalid full syntax/UTF8 still errors after an empty identifier result, without an old physical ResponseError. Tests: internal/cloudfilter/mapping_test.go:TestCloudFilterNonmappingFilterShapeIsLazyAfterIdentifierAndActualTruthiness, internal/cloudfilter/mapping_test.go:TestCloudFilterInvalidJSONIsLocalAtomicAndStillValidatedAfterEmptyIdentifierSelection, blockstorage/volume_search_test.go:TestSearchVolumesNormalizesEveryRowBeforeNextAndConsumesFiltersAfterFullList.

  • Filter keys retain raw insertion order and duplicate last-value/first-position semantics; earlier mismatches hide later missing keys. Nested objects recurse as subsets only when consumed, checking actual truthiness before nested shape/membership, so empty nested objects match truthy values but not falsey ones. Leaves keep complete array/object equality and exact Python bool-number compatibility. Tests: internal/cloudfilter/mapping_test.go:TestCloudFilterOrderedMappingConsumesOnlyReachedKeysAndKeepsDuplicateFirstPosition, internal/cloudfilter/mapping_test.go:TestCloudFilterNestedEmptyObjectsUseActualTruthinessBeforeShapeOrMissingKeys, internal/cloudfilter/mapping_test.go:TestCloudFilterLeafEqualityKeepsExactArrayShapeAndPythonBooleanNumberPrecision.

  • A nonempty filter JSON string uses full JMESPath, even after no identifier matches; parser and evaluated runtime/function errors propagate atomically and lazy unvisited projection/boolean branches remain unvisited. Value can be arbitrary object/array/string/number/bool/null; expressions never fabricate physical source rows, IDs or HTTP metadata. Tests: internal/cloudfilter/results_test.go:TestCloudFilterExpressionBridgeReturnsArbitraryOwnedJSONWithoutInventedRowIndices, internal/cloudfilter/results_test.go:TestCloudFilterExpressionsStillParseEmptySelectionAndKeepRuntimeFailuresAtomic, blockstorage/volume_search_test.go:TestSearchAndGetVolumeExpressionsKeepDynamicValuesAndSingleFalseyElement, blockstorage/volume_search_test.go:TestSearchVolumesExpressionErrorsEvenWithoutIdentifierMatchesKeepOnlyPageEvidence.

  • The service view exposes all 38 known normalized keys and excludes unknown wire-only fields, preserving raw originals separately. Aliases are consumed in textual order before eager descriptor conversion, including hidden invalid earlier alias; list/dict/BoolStr/bool/size conversions retain source presence/null/untyped semantics without borrowed strict workflow-model extraction. Tests: blockstorage/volume_search_view_test.go:TestVolumeSearchViewKnownNullsAliasesAndIndependentLocation, blockstorage/volume_search_view_test.go:TestVolumeSearchViewDescriptorConversionsAndSourceSize, blockstorage/volume_search_view_test.go:TestVolumeSearchViewEagerErrorsAndDiscardedAlias, blockstorage/volume_search_mapping_boundaries_test.go:TestSearchVolumesMappingDuplicateWireKeysKeepTextualAliasOrderAndRawEvidence.

  • Computed independent row location uses current recorded scope plus known configuration, preserves raw zone and truthy foreign project ID, clears current project human names for foreign rows, and ignores wire location. Connection config, direct/adopted unknown facts and owned per-call complete overrides need no caller adapter or location lookup request. Tests: connection_volume_search_test.go:TestConnectionVolumeSearchCachedCinderOriginalCallbacksOnceAndOwnedLocation, connection_volume_search_test.go:TestConnectionCloudLocationOverrideAndOperationLocationFactoriesOwnInputs, connection_location_test.go:TestConnectVolumeSearchCapturesAutomaticCloudRegionConfiguredProjectAndForeignOwner, resource/cloud_location_test.go:TestCloudLocationForeignProjectsAndRawZoneSourceTruthiness, internal/cloudlocation/provider_test.go:TestRecordedCloudLocationNativeScopeShapesNeedNoExpiryOrHTTP, connection_location_mapping_boundaries_test.go:TestConnectCloudLocationMappingIDScopeLosesNativeDomainFactsAndOwnedOverrideRestores.

  • Original callback slice/inputs/retained config/result bytes, raw rows, page proof and headers are independently owned; original callbacks run once in order and cannot replace a later option slot. Direct source/header capture precedes original callbacks while native authentication remains live; reusable owned options preserve lazy malformed filters for operation phase. Tests: blockstorage/volume_search_test.go:TestSearchVolumesOwnedOptionsOriginalCallbacksAndSliceSnapshot, internal/cloudfilter/results_test.go:TestCloudFilterSelectOwnsViewsFiltersIndicesAndResultsBeforeGuardCallbacks, connection_volume_search_test.go:TestConnectionVolumeSearchCachedCinderOriginalCallbacksOnceAndOwnedLocation.

  • Preflight nil/canceled context, wrong/missing service role/source, nil options and terminal callback source mutation/cancel prevent HTTP and later callbacks. Connection applies originals before cached Cinder getter and propagates explicit cancellation cause without selecting a service on option failure. Tests: blockstorage/volume_search_test.go:TestSearchVolumesPreflightContextOptionsAndFixedSourceRejectBeforeHTTP, connection_volume_search_test.go:TestConnectionVolumeSearchOptionsBeforeGetterAndNilCancellationPreventSelection, internal/cloudfilter/results_test.go:TestCloudFilterGuardInterruptsTraversalAndRetainsCancellationCauseWithoutPartialSelection.

  • Native continuation is authoritative only for exact canonical volumes_links; same-origin escaped collection path is fixed, physical query spelling remains advertised and canonical query-cycle equivalence cannot restart traversal. Empty volumes[] ends before unused unsafe next; physical malformed/UTF8/null envelope or read/Close failures retain actual admitted page without Value/Volumes. Tests: blockstorage/volume_search_transport_test.go:TestSearchVolumesContinuationAuthorityCyclesAndEmptySourceEOF, blockstorage/volume_search_transport_test.go:TestSearchVolumesAcceptedReadCloseEnvelopeAndUTF8ErrorsKeepPhysicalProof.

  • Later native HTTP/transport/cancellation errors never replace their actual cause with old accepted evidence; earlier admitted Pages remain independent. Cancellation while blocked continuation preserves cause and prior Pages, and all five source facts mutated after response are terminal with current admitted proof and no next exchange. Tests: blockstorage/volume_search_transport_test.go:TestSearchVolumesLaterNativeAndTransportErrorsNeverBorrowAcceptedPage, blockstorage/volume_search_transport_test.go:TestSearchVolumesBlockedContinuationCancellationKeepsPriorPageAndCause, blockstorage/volume_search_transport_test.go:TestSearchVolumesPostResponseSourceMutationIsTerminalWithCurrentEvidence.

  • The shared physical reader retains native 401 reauthentication,429 backoff and503 retry behavior with live token, owned snapshot headers/microversion, fixed bodyless route and original200 policy; hook body/response ownership violations and expanded non200 acceptance cannot produce admitted helper success. Tests: blockstorage/get_volumes_test.go:TestGetVolumesNativeAuthBackoffRetryKeepsBodylessExactListAndLiveHeaders.

  • Repaired unchanged pinned Python AST reference cases retain values and meaningful lazy error phases; exact-decimal truthiness and local guard interruptions are deliberate Go boundaries rather than source error swallowing. Tests: internal/cloudfilter/reference_test.go:TestCloudFilterRepairedPinnedReferenceSnapshotsRetainValuesAndErrorPhases, internal/cloudfilter/results_test.go:TestCloudFilterPythonTruthyPreservesExactDecimalZeroPolicyAndNullableResults.

  • The full JMESPath fork retains all26 standard functions and grammar composition, arbitrary values, lazy unvisited branches and propagated evaluated child errors; an independently generated146-case fixture separates110 selected Python runtime goldens from36 explicit Go ordering/numeric/grammar boundaries, with every case checking input immutability. Literal numbers stay json.Number; compiled literal results are deeply independent and concurrent compiled evaluation cannot inherit result mutation. Corrected syntax rejects third-colon slices and declared malformed repeated bounds/function comma spellings. Tests: internal/jmespath/engine_test.go:TestSearchReferenceAndDeclaredBoundaries, internal/jmespath/engine_test.go:TestSearchLiteralNumberRepresentation, internal/jmespath/engine_test.go:TestCompiledLiteralResultOwnership, internal/jmespath/engine_test.go:TestCompiledSearchConcurrent, internal/jmespath/engine_test.go:TestCompiledLiteralConcurrentOwnership, internal/jmespath/engine_test.go:TestLexerSyntaxBoundaries.

Python/Go differences:

  • Only the two direct BlockStorageCloudMixin declarations search_volumes and get_volume are proposed here, pinned to openstacksdk ef55d7d1666099f50bf1e1c40b59d7e7b72a51fe and native Gophercloud v2.15.0. Related list_volumes/get_volumes/get_volume_id/volume_exists, proxy/resource/native APIs and full SDK completeness retain independent review status.
  • The public typed NameOrID string replaces Python duck-typed call values and None search input; empty search string means no local identifier restriction. JSON response id/name preserve untyped values and are stringified with Python-style null/bool/ordered-container representation. Identifier floating spellings use Go shortest float64 rendering at Python cutoffs, including overflow inf and underflow signed zero; exact CPython float repr and Unicode printability database behavior are explicit representation boundaries.
  • The source mutable Volume Resource/Munch and class descriptors are represented by an owned normalized 38-key JSON view plus independent original RawResource wire evidence. The view covers the 34 direct v3 Body members, inherited id/name/metadata and computed location used by these helpers, without implementing mutable Resource identity, custom mappings/equality, arbitrary Python objects, plugin/session cache, resource mutation or arbitrary inherited APIs. Python typing.cast does not constrain expression results; Go Value likewise permits any ordinary JSON shape.
  • Ordinary mapping equality and location project equality keep Python bool-number recursive compatibility but compare mathematical JSON decimals exactly rather than binary-float JSON rounding. Ordinary truthiness also uses exact mantissa zero; for example 1e-9999 stays truthy rather than underflowing to Python float zero. JMESPath scalar boolean-number equality is distinct, container/contains equality follows the selected Python reference, and JMESPath numeric zero stays truthy.
  • The engine is a licensed adapted source fork of official go-jmespath v0.4.0 with full grammar and all 26 standard functions. Independently selected jmespath.py 1.0.1 is a comparison reference satisfying SDK jmespath>=0.9.0, not an installed-version SDK pin or a claim that every version in that range has identical runtime behavior. Custom Python functions/classes and nonordinary JSON values are outside this API representation.
  • JMESPath equality/order/min/max/sort/by-key preserve exact decimals, including large integers and arbitrary exponent text. Exact abs/ceil/floor and integral sum differ from Python float spelling/rounding; nonintegral sum/avg/floating to_number use finite IEEE-754 conversion and return errors on nonfinite results. Integer arithmetic needing more than 1048576 coefficient digits errors instead of allocating unbounded memory. Numeric ordering never rounds or expands exponent-sized coefficients.
  • JMESPath object keys/values/object projections/JSON serialization use deterministic lexical key order, replacing Python dictionary insertion order for expression evaluation. Raw cloud filter objects retain original key order and duplicate last-value at first insertion position. Original nested wire JSON order is retained for identifier container representation; normalized top-level Volume descriptor order follows source MRO.
  • Response aliases and duplicate exact response keys use textual last-consumed-wins. Python JSON dictionary duplicate collapse preserves first insertion position before Resource alias consumption, so duplicates interleaved with distinct aliases can produce a different value. This is an explicit ambiguous-wire Go policy, not an assertion of every possible duplicate-key Python response equivalence.
  • Volume size uses source int descriptor behavior: bool remains bool, JSON integers are arbitrary precision, finite float JSON truncates its actual float64 value, decimal digit strings convert, signed/padded/nondigit strings and nonnumeric containers become zero, and digit-only nondecimal strings fail. The volume descriptor uses audited Unicode16 tables and does not emulate CPython configurable decimal string digit limits. JMESPath numeric-string digits and identifier printability follow Go Unicode tables; ordinary UTF-8/JSON parser and byte syntax offsets differ from arbitrary Python Unicode objects.
  • Computed location never trusts HTTP location: Connection retains known selected cloud/region/auth name/domain facts and the provider recorded native token project scope; row project/zone are raw JSON values with foreign-project names cleared. Direct ServiceClient calls and FromProvider manual/custom auth results cannot reconstruct absent cloud/configuration facts and leave them null unless explicit owned options supply them. Recorded scope does not force authentication refresh; native HTTP reauthentication remains live.
  • Native clouds.Parse discards configured project-domain metadata when selecting project ID scope and collapses absent versus empty configuration strings. Go cannot reconstruct those facts from returned AuthOptions or token names; WithCloudLocation/WithVolumeSearchLocation are explicit complete owned overrides. This configuration parser representation boundary is independent from the direct helper body control flow.
  • The library owns concrete option callbacks/defaults rather than requiring caller builders. Direct calls capture source facts/header snapshot before original callbacks; Connection applies originals once before cached Cinder selection, then direct delegation snapshots the resulting source. Retained config pointers, callback-slice slot edits and ordinary MoreHeaders edits cannot change prepared owned options. Provider authentication stays live; source fact mutation/cancellation is terminal at checked boundaries.
  • Go retains only actually admitted response Body/Header/StatusCode in independent Pages/Observed. Accepted read/Close/schema/source/context errors keep that physical proof without SDK replay; rejected native HTTP/transport failures retain their own native error and never borrow an older accepted page. Safe same-origin/same escaped collection continuation and cycle checks intentionally reject unsafe routes instead of following Python session pagination beyond those guards. Empty arrays terminate before unused continuation links are inspected.
  • Go errors are OperationError with actual operation/resource and original causes; local consumed filter/selection errors wrap ErrInvalidOption, ambiguity wraps ErrAmbiguous, and no fabricated HTTP/NotFound evidence is attached. Python deprecation warnings and diagnostic log messages are not reproduced. Concurrent mutation of caller mutable source/config/model data is outside the race-safe contract; independent-result ownership does not claim such mutations are safe.
  • Standard function arity and types are validated for every variadic argument, so merge requires all arguments to be objects; selected Python1.0.1 can accept some iterable key/value pairs through dict.update. Standard grammar rejects repeated slice bounds without intervening colons, omitted function commas and trailing commas that the selected Python parser permissively accepts. These stricter malformed-input boundaries are declared rather than falsely reported as matching every Python parser spelling. All valid grammar branches and26 standard function names remain provided.
  • Location timing is explicit: Connection defaults snapshot recorded current scope after original option callbacks and before service selection; the owned operation Location is not rewritten by a later native reauthentication scope change. A direct ServiceClient with no Location override reads recorded scope when each row is normalized. Python current_project_id may refresh session authentication during Resource location construction; Go does not add such location-triggered I/O.
python:cloud/_block_storage/BlockStorageCloudMixin/get_volume

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk.Connection.GetVolume

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.GetVolume

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.PrepareVolumeSearchOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeSearchOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeSearchFilters

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeSearchExpression

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeSearchLocation

  • github.com/JSYoo5B/go-openstacksdk.Connection.CurrentLocation

  • github.com/JSYoo5B/go-openstacksdk.WithCloudLocation

  • Omitted Filters and explicit JSON null choose the shared ordinary GET-first exact FindIdentity path. Safe member route success does no collection read; only clean native400/403/404 fall back to detailed exact-name query, preserving actual admitted Observed or Pages independently. Tests: blockstorage/volume_search_test.go:TestGetVolumeOmittedNullGETFirstAndCompatibleListFallback.

  • Standard Find retains safe unescaped identity routes and exact ID/name list matching rather than local glob; unsafe names use detailed name query, successful logical absence returns nil Value/Volume, and multiple exact results produce ErrAmbiguous without consuming an unused next page. Tests: blockstorage/volume_search_test.go:TestGetVolumeDefaultExactListMissingAndAmbiguityKeepSharedIteratorPolicy.

  • Every explicit nonnull filter, including false/zero/empty string/array/object, chooses complete SearchVolumes with no member GET. Falsey filter values skip local mapping only after materialization and identifier selection; nil/null dispatch remains distinct. Tests: blockstorage/volume_search_test.go:TestGetVolumeEveryFalseyNonnullFilterUsesFullListOnly, blockstorage/volume_search_test.go:TestSearchVolumesNormalizesEveryRowBeforeNextAndConsumesFiltersAfterFullList.

  • Filtered Get consumes arbitrary expression output exactly in outer truthiness then len then integer index0 order, with no second selected-value truth test: [false]/[0]/[empty string] remain present, [null] and empty outer outputs are absent, Unicode singleton string survives, longer strings/lists/objects are ambiguous, and truthy scalars/singleton objects produce local selection errors. Tests: blockstorage/volume_search_test.go:TestSearchAndGetVolumeExpressionsKeepDynamicValuesAndSingleFalseyElement, internal/cloudfilter/results_test.go:TestCloudFilterFirstFollowsTruthyLengthAndIntegerIndexWithoutRetestingSelectedFalsyValue.

  • Filtered ambiguity includes concrete VolumeSelectionError NameOrID/Length and ErrAmbiguous without fabricated IDs; malformed filter/expression/selection errors retain ErrInvalidOption and original local cause rather than attached earlier HTTP evidence. Dynamic expression selection never populates Volume/Observed. Tests: blockstorage/volume_search_test.go:TestSearchAndGetVolumeExpressionsKeepDynamicValuesAndSingleFalseyElement, blockstorage/volume_search_test.go:TestSearchVolumesExpressionErrorsEvenWithoutIdentifierMatchesKeepOnlyPageEvidence, internal/cloudfilter/results_test.go:TestCloudFilterExpressionsStillParseEmptySelectionAndKeepRuntimeFailuresAtomic.

  • Accepted canonical volume{} is a real resource with complete normalized id/name:null and an empty physical RawResource.Body; request identity is never fabricated into response proof. Missing/wrong-case/null/array/malformed canonical member envelope is terminal with only current admitted Observed and no list replay/fallback. Tests: blockstorage/volume_search_additional_test.go:TestGetVolumeCanonicalEmptyMemberDoesNotAdoptRequestIdentityAndRejectsNoncanonicalEnvelopes.

  • MemberGET accepted schema/descriptor/readClose/source/cancellation errors retain actual200 Body/Header/StatusCode in Observed, with no selected Value/Volume, list fallback, replay or invented NotFound. Cancellation includes caller cause. Tests: blockstorage/volume_search_transport_test.go:TestGetVolumeAcceptedMemberErrorsKeepObservedAndNeverReplayList, blockstorage/volume_search_additional_test.go:TestGetVolumeCanonicalEmptyMemberDoesNotAdoptRequestIdentityAndRejectsNoncanonicalEnvelopes.

  • Native memberGET supports original401 reauthentication,429 backoff and503 general retry while keeping fixed bodyless route, live provider token, pre-option headers and microversion, callbacks once and a single final admitted proof. Native retry hook body/response-target violations retain original503 and ErrInvalidOption; expanded201 policy is rejected with original expected200 and no admitted Observed. Tests: blockstorage/volume_search_additional_test.go:TestGetVolumeNativeMemberAuthenticationRetriesKeepFixedBodylessRouteAndSingleAcceptedProof.

  • Returned normalized JSON, original wire resource metadata and accepted member/list proof are independent snapshots; original options/location ownership and cached Cinder selection work through Connection with originals exactly once and no hidden name/location/auth lookup. Tests: blockstorage/volume_search_additional_test.go:TestGetVolumeCanonicalEmptyMemberDoesNotAdoptRequestIdentityAndRejectsNoncanonicalEnvelopes, blockstorage/volume_search_additional_test.go:TestGetVolumeNativeMemberAuthenticationRetriesKeepFixedBodylessRouteAndSingleAcceptedProof, connection_volume_search_test.go:TestConnectionVolumeSearchCachedCinderOriginalCallbacksOnceAndOwnedLocation, connection_volume_search_test.go:TestConnectionCloudLocationOverrideAndOperationLocationFactoriesOwnInputs.

  • Complete filtered search preserves eager descriptors/alias/location normalization and actual late physical errors before selection; Connection option/cancellation preflight prevents service selection, and pure first selection keeps nullable/falsey values without fabricated object schema. Tests: blockstorage/volume_search_view_test.go:TestVolumeSearchViewDescriptorConversionsAndSourceSize, blockstorage/volume_search_test.go:TestSearchVolumesNormalizesEveryRowBeforeNextAndConsumesFiltersAfterFullList, connection_volume_search_test.go:TestConnectionVolumeSearchOptionsBeforeGetterAndNilCancellationPreventSelection, internal/cloudfilter/reference_test.go:TestCloudFilterRepairedPinnedReferenceSnapshotsRetainValuesAndErrorPhases.

  • The full JMESPath fork retains all26 standard functions and grammar composition, arbitrary values, lazy unvisited branches and propagated evaluated child errors; an independently generated146-case fixture separates110 selected Python runtime goldens from36 explicit Go ordering/numeric/grammar boundaries, with every case checking input immutability. Literal numbers stay json.Number; compiled literal results are deeply independent and concurrent compiled evaluation cannot inherit result mutation. Corrected syntax rejects third-colon slices and declared malformed repeated bounds/function comma spellings. Tests: internal/jmespath/engine_test.go:TestSearchReferenceAndDeclaredBoundaries, internal/jmespath/engine_test.go:TestSearchLiteralNumberRepresentation, internal/jmespath/engine_test.go:TestCompiledLiteralResultOwnership, internal/jmespath/engine_test.go:TestCompiledSearchConcurrent, internal/jmespath/engine_test.go:TestCompiledLiteralConcurrentOwnership, internal/jmespath/engine_test.go:TestLexerSyntaxBoundaries.

Python/Go differences:

  • Only the two direct BlockStorageCloudMixin declarations search_volumes and get_volume are proposed here, pinned to openstacksdk ef55d7d1666099f50bf1e1c40b59d7e7b72a51fe and native Gophercloud v2.15.0. Related list_volumes/get_volumes/get_volume_id/volume_exists, proxy/resource/native APIs and full SDK completeness retain independent review status.
  • The public typed NameOrID string replaces Python duck-typed call values and None search input; empty search string means no local identifier restriction. JSON response id/name preserve untyped values and are stringified with Python-style null/bool/ordered-container representation. Identifier floating spellings use Go shortest float64 rendering at Python cutoffs, including overflow inf and underflow signed zero; exact CPython float repr and Unicode printability database behavior are explicit representation boundaries.
  • The source mutable Volume Resource/Munch and class descriptors are represented by an owned normalized 38-key JSON view plus independent original RawResource wire evidence. The view covers the 34 direct v3 Body members, inherited id/name/metadata and computed location used by these helpers, without implementing mutable Resource identity, custom mappings/equality, arbitrary Python objects, plugin/session cache, resource mutation or arbitrary inherited APIs. Python typing.cast does not constrain expression results; Go Value likewise permits any ordinary JSON shape.
  • Ordinary mapping equality and location project equality keep Python bool-number recursive compatibility but compare mathematical JSON decimals exactly rather than binary-float JSON rounding. Ordinary truthiness also uses exact mantissa zero; for example 1e-9999 stays truthy rather than underflowing to Python float zero. JMESPath scalar boolean-number equality is distinct, container/contains equality follows the selected Python reference, and JMESPath numeric zero stays truthy.
  • The engine is a licensed adapted source fork of official go-jmespath v0.4.0 with full grammar and all 26 standard functions. Independently selected jmespath.py 1.0.1 is a comparison reference satisfying SDK jmespath>=0.9.0, not an installed-version SDK pin or a claim that every version in that range has identical runtime behavior. Custom Python functions/classes and nonordinary JSON values are outside this API representation.
  • JMESPath equality/order/min/max/sort/by-key preserve exact decimals, including large integers and arbitrary exponent text. Exact abs/ceil/floor and integral sum differ from Python float spelling/rounding; nonintegral sum/avg/floating to_number use finite IEEE-754 conversion and return errors on nonfinite results. Integer arithmetic needing more than 1048576 coefficient digits errors instead of allocating unbounded memory. Numeric ordering never rounds or expands exponent-sized coefficients.
  • JMESPath object keys/values/object projections/JSON serialization use deterministic lexical key order, replacing Python dictionary insertion order for expression evaluation. Raw cloud filter objects retain original key order and duplicate last-value at first insertion position. Original nested wire JSON order is retained for identifier container representation; normalized top-level Volume descriptor order follows source MRO.
  • Response aliases and duplicate exact response keys use textual last-consumed-wins. Python JSON dictionary duplicate collapse preserves first insertion position before Resource alias consumption, so duplicates interleaved with distinct aliases can produce a different value. This is an explicit ambiguous-wire Go policy, not an assertion of every possible duplicate-key Python response equivalence.
  • Volume size uses source int descriptor behavior: bool remains bool, JSON integers are arbitrary precision, finite float JSON truncates its actual float64 value, decimal digit strings convert, signed/padded/nondigit strings and nonnumeric containers become zero, and digit-only nondecimal strings fail. The volume descriptor uses audited Unicode16 tables and does not emulate CPython configurable decimal string digit limits. JMESPath numeric-string digits and identifier printability follow Go Unicode tables; ordinary UTF-8/JSON parser and byte syntax offsets differ from arbitrary Python Unicode objects.
  • Computed location never trusts HTTP location: Connection retains known selected cloud/region/auth name/domain facts and the provider recorded native token project scope; row project/zone are raw JSON values with foreign-project names cleared. Direct ServiceClient calls and FromProvider manual/custom auth results cannot reconstruct absent cloud/configuration facts and leave them null unless explicit owned options supply them. Recorded scope does not force authentication refresh; native HTTP reauthentication remains live.
  • Native clouds.Parse discards configured project-domain metadata when selecting project ID scope and collapses absent versus empty configuration strings. Go cannot reconstruct those facts from returned AuthOptions or token names; WithCloudLocation/WithVolumeSearchLocation are explicit complete owned overrides. This configuration parser representation boundary is independent from the direct helper body control flow.
  • The library owns concrete option callbacks/defaults rather than requiring caller builders. Direct calls capture source facts/header snapshot before original callbacks; Connection applies originals once before cached Cinder selection, then direct delegation snapshots the resulting source. Retained config pointers, callback-slice slot edits and ordinary MoreHeaders edits cannot change prepared owned options. Provider authentication stays live; source fact mutation/cancellation is terminal at checked boundaries.
  • Go retains only actually admitted response Body/Header/StatusCode in independent Pages/Observed. Accepted read/Close/schema/source/context errors keep that physical proof without SDK replay; rejected native HTTP/transport failures retain their own native error and never borrow an older accepted page. Safe same-origin/same escaped collection continuation and cycle checks intentionally reject unsafe routes instead of following Python session pagination beyond those guards. Empty arrays terminate before unused continuation links are inspected.
  • Go errors are OperationError with actual operation/resource and original causes; local consumed filter/selection errors wrap ErrInvalidOption, ambiguity wraps ErrAmbiguous, and no fabricated HTTP/NotFound evidence is attached. Python deprecation warnings and diagnostic log messages are not reproduced. Concurrent mutation of caller mutable source/config/model data is outside the race-safe contract; independent-result ownership does not claim such mutations are safe.
  • Python no-filter Resource.find seeds id=name_or_id into its mutable object and can retain seeded state when a member response omits id. Go accepts only a canonical full volume object and exposes its actual normalized missing id:null plus raw omission, without fabricating request ID or retained object state.
  • Go standard Find validates nonempty UTF8/control-free identity and sends only safe unescaped ID segments to member routes; unsafe names use encoded name query. Python can attempt a member request for arbitrary duck-typed strings; strict envelope/full JSON/UTF8 and fixed route rules are explicit Go safeguards. These restrictions do not narrow the separate full-list local glob/filter branch.
  • The nil-filter branch reuses shared iterator early ambiguity behavior, while the explicit-filter branch always materializes complete search before outer selection. Python standard Find and deprecated explicit filter branches likewise have different lookup/selection control flow; no cache/direct-get/refresh options or related cloud helpers are added here.
  • Standard function arity and types are validated for every variadic argument, so merge requires all arguments to be objects; selected Python1.0.1 can accept some iterable key/value pairs through dict.update. Standard grammar rejects repeated slice bounds without intervening colons, omitted function commas and trailing commas that the selected Python parser permissively accepts. These stricter malformed-input boundaries are declared rather than falsely reported as matching every Python parser spelling. All valid grammar branches and26 standard function names remain provided.
  • Location timing is explicit: Connection defaults snapshot recorded current scope after original option callbacks and before service selection; the owned operation Location is not rewritten by a later native reauthentication scope change. A direct ServiceClient with no Location override reads recorded scope when each row is normalized. Python current_project_id may refresh session authentication during Resource location construction; Go does not add such location-triggered I/O.
python:cloud/_block_storage/BlockStorageCloudMixin/list_volumes

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk.Connection.ListVolumes

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.ListVolumes

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.PrepareVolumeReadOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeReadOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeReadLocation

  • ListVolumes is the direct cloud complete detailed list. Its initial bodyless GET200 is /volumes/detail without identity/status/all-project/page/filter controls; complete materialization returns all source rows in order and never performs member GETs or name resolution. The deprecated Python cache argument is warning-only/no-op and is omitted in Go. Tests: blockstorage/volume_reads_contract_test.go:TestListVolumesMaterializesAllPagesAndOwnsNormalizedAndWireRows, connection_volume_reads_test.go:TestConnectionVolumeReadsCachedCinderOriginalOptionsPrecedeSelection.

  • Every raw row is converted through the complete eager normalized v3 descriptor/location view while consuming that row, before any continuation is inspected or requested. Malformed visited descriptor/location errors stop the collector; a later page error never exposes earlier partial Value/Volumes. Tests: blockstorage/volume_reads_contract_test.go:TestListVolumesEagerDescriptorFailureStopsBeforeNextAndDiscardsPartialValues, blockstorage/volume_reads_contract_test.go:TestVolumeExistsAmbiguityStopsBeforeUnusedTailThatFullListMustConsume, blockstorage/volume_reads_transport_test.go:TestListVolumesLaterNativeOrTransportErrorKeepsOnlyActualPriorPages, blockstorage/volume_search_test.go:TestSearchVolumesNormalizesEveryRowBeforeNextAndConsumesFiltersAfterFullList.

  • Value is an owned JSON array of normalized resources and Volumes is the corresponding owned raw source-row slice. Empty success is nonnull [] plus a nonnil empty slice. Duplicate IDs remain separate original rows/pointers in wire order; unrelated unknown fields and exact numeric text remain in RawResource.Body rather than being fabricated into the normalized view. Tests: blockstorage/volume_reads_contract_test.go:TestListVolumesMaterializesAllPagesAndOwnsNormalizedAndWireRows, blockstorage/volume_reads_contract_test.go:TestListVolumesEmptyPageStopsWithoutConsumingUnusedContinuation.

  • Canonical volumes [] ends the list before unused next-link consumption. Nonempty pages use exact native volumes_links continuation extraction with same collection escaped path/origin and cycle guards. Source-advertised queries are retained; no HTTP Link/data.next/marker fallback, local pagination restart or page cap is invented. Tests: blockstorage/volume_reads_contract_test.go:TestListVolumesMaterializesAllPagesAndOwnsNormalizedAndWireRows, blockstorage/volume_reads_contract_test.go:TestListVolumesEmptyPageStopsWithoutConsumingUnusedContinuation, blockstorage/get_volumes_test.go:TestGetVolumesContinuationScopeCyclesAndCanonicalEnvelopeUseActualPageProof.

  • Each physically admitted200 list response contributes independently cloned Pages body/header/status even when its read/Close/decoder/source/context phase fails. Rejected HTTP/native/transport failures add no admitted page and keep their own error evidence, never an old page proof. Every error leaves Value/Volumes nil while actual Pages remain inspectable. Tests: blockstorage/volume_reads_transport_test.go:TestVolumeReadsAcceptedReadCloseAndCancellationKeepAllCausesAndCurrentProof, blockstorage/volume_reads_transport_test.go:TestVolumeReadStrictAcceptedEnvelopesKeepPhysicalEvidenceWithoutLogicalValues, blockstorage/volume_reads_transport_test.go:TestListVolumesLaterNativeOrTransportErrorKeepsOnlyActualPriorPages, blockstorage/volume_reads_transport_test.go:TestVolumeReadsPostResponseSourceChangesStopWithCurrentAdmittedProof, blockstorage/volume_reads_transport_test.go:TestVolumeReadBlockedContinuationCancellationRetainsActualPagesAndCause, connection_volume_reads_test.go:TestConnectionVolumeReadsAcceptedProofSurvivesReadCloseCancellationAndSourceFailure.

  • Owned VolumeReadOpts.Location is the only read policy. Original callbacks apply once in order; direct package captures Cinder/header facts before originals and guards sticky context/source through every phase. Connection prepares originals once before its cached Cinder v3 getter and delegates an owned policy, supplying recorded CurrentLocation unless overridden. Captured ordinary headers are independent while provider authentication stays live; empty source Type is normalized only on the execution copy. Tests: blockstorage/volume_reads_options_test.go:TestPrepareVolumeReadOptionsOwnsFactoriesCallbacksAndOriginalSlice, blockstorage/volume_reads_options_test.go:TestVolumeReadsApplyOriginalOptionsOnceWithCapturedHeadersAndOwnedLocation, blockstorage/volume_reads_options_test.go:TestVolumeReadsOriginalSourceMutationIsTerminalBeforeRestoringOption, blockstorage/volume_reads_options_test.go:TestVolumeReadPreflightStopsOptionsAndHTTPOnInvalidSourceOrContext, connection_volume_reads_test.go:TestConnectionVolumeReadsCachedCinderOriginalOptionsPrecedeSelection, connection_volume_reads_test.go:TestConnectionVolumeReadsLocationFactoriesOwnInputsAndLeaveConnectionDefault, connection_volume_reads_test.go:TestConnectionVolumeReadsOriginalCallbackSliceAndRetainedLocationAreSnapshots, connection_volume_reads_test.go:TestConnectionVolumeReadsRecordedScopeIsCapturedAfterOptionsAndRefreshedPerCall, connection_volume_reads_test.go:TestConnectionVolumeReadsPreflightAndOptionFailuresSelectNoService, connection_volume_reads_test.go:TestConnectionVolumeReadsGetterFailureRetainsOperationAndCancellationCause, connection_volume_reads_test.go:TestConnectionVolumeReadsRecordedScopeFailurePrecedesGetterAndOwnedOverrideBypassesIt.

  • Caller-owned Location JSON is validated only when an actual resource is normalized; an empty ListVolumes list does not consume an unused invalid location. Invalid caller location remains a local ErrInvalidOption without borrowing a200 ResponseError, while any independently admitted Pages/Observed evidence remains available and logical outputs stay uncommitted. Physical canonical row/descriptor failures retain their own originating accepted response error evidence. Tests: blockstorage/volume_reads_options_test.go:TestVolumeReadLocationIsConsumedOnlyByActualRowsWithoutBorrowingResponseFailure, blockstorage/volume_reads_contract_test.go:TestListVolumesEagerDescriptorFailureStopsBeforeNextAndDiscardsPartialValues, blockstorage/volume_reads_transport_test.go:TestVolumeReadStrictAcceptedEnvelopesKeepPhysicalEvidenceWithoutLogicalValues.

Python/Go differences:

  • Go selects Cinder v3 under Gophercloud v2.15.0 and uses the audited 38-field normalized Volume view plus an independent RawResource physical row and response proof. Pinned cloud can select v2; this row does not implement a v2 projection or promote native/Proxy/Resource/session/cache declarations.
  • Complete canonical UTF-8 volume(s) envelopes and accepted200 responses are the deliberate Go decoder boundary. Python generic Resource translation can tolerate invalid JSON on member fetch, unwrap absent envelopes more permissively, wrap nonarray resource lists, strip self, and preserve seeded omitted IDs. Go raw evidence preserves unknown/self fields while normalized known fields exclude them.
  • Computed location follows existing owned CloudLocation/recorded provider-scope mapping. Exact decimal raw precision, Unicode/version and configurable Python numeric conversion boundaries are inherited from the already audited normalized view; no Python object identity, mutable Resource lifecycle or warning subsystem is recreated.
  • Go returns richer owned result/evidence structures with an error; rejected native status/body/header remain in their original error. Admitted phase proof survives later failures without establishing successful resource/boolean output, and no SDK orchestration replay or swallowed cancellation is introduced.
  • Pinned list_volumes(cache=None) warns for every non-None cache value, including False, without changing list behavior. The Go API deliberately has no obsolete cache/warning parameter and exposes none of the lower Proxy query/details/all_projects controls.
  • Go continuation policy maps native canonical volumes_links only. Pinned generic Resource.list can consult links/data.next/HTTP Link and limited marker fallback; this direct workflow does not promote those generic capabilities.
  • Local caller Location errors are separate from physical response/descriptor errors: actual admitted proof remains inspectable, but a local error is not reclassified as a200 response failure. This preserves the existing shared GetVolume/SearchVolumes normalizer behavior.
python:cloud/_block_storage/BlockStorageCloudMixin/get_volume_by_id

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk.Connection.GetVolumeByID

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.GetVolumeByID

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.PrepareVolumeReadOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeReadOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeReadLocation

  • GetVolumeByIDRequest.ID is a literal direct member identifier, never a name or a Name Ref. Required UTF-8/control/Unicode-whitespace/single unescaped segment validation protects the fixed bodyless GET200 /volumes/{escaped-id}; no query/list/search/ref lookup is performed. Tests: blockstorage/volume_reads_contract_test.go:TestGetVolumeByIDUsesOnlyLiteralMemberAndKeepsResponseIdentity, blockstorage/volume_reads_contract_test.go:TestGetVolumeByIDAcceptsUnicodeLiteralSingleSegment, blockstorage/volume_reads_options_test.go:TestGetVolumeByIDRejectsUnsafeIDsAfterOptionsWithoutHTTP.

  • All rejected member HTTP codes, including404/400/403, remain errors with original native status/body/header/cause and never trigger name fallback or a successful absent value. The misleading Python docstring else None is not treated as source behavior; actual proxy _get fetch propagates NotFoundException. Tests: blockstorage/volume_reads_contract_test.go:TestGetVolumeByIDPropagatesNativeClientErrorsWithoutFindFallback, connection_volume_reads_test.go:TestConnectionVolumeReadsMember404IsErrorButCompletedExistenceAbsenceIsFalse.

  • A successful canonical volume object produces the eager complete normalized v3/location Value and the actual independently owned RawResource Volume. Omitted response ID remains absent raw and null normalized; a present different/untyped ID is preserved rather than silently replaced with the request ID. Tests: blockstorage/volume_reads_contract_test.go:TestGetVolumeByIDUsesOnlyLiteralMemberAndKeepsResponseIdentity, connection_volume_reads_test.go:TestConnectionVolumeReadsLocationFactoriesOwnInputsAndLeaveConnectionDefault.

  • Observed clones the actual admitted member response before the workflow returns read/Close, post-source/context or decoding errors. On any failure Value/Volume remain nil, Observed remains available if200 was admitted, and Pages stays empty. Read+Close+context.Cause failures retain all causes without inventing a successful completion or replaying a list. Tests: blockstorage/volume_reads_transport_test.go:TestVolumeReadsAcceptedReadCloseAndCancellationKeepAllCausesAndCurrentProof, blockstorage/volume_reads_transport_test.go:TestVolumeReadStrictAcceptedEnvelopesKeepPhysicalEvidenceWithoutLogicalValues, blockstorage/volume_reads_transport_test.go:TestVolumeReadsPostResponseSourceChangesStopWithCurrentAdmittedProof, connection_volume_reads_test.go:TestConnectionVolumeReadsAcceptedProofSurvivesReadCloseCancellationAndSourceFailure.

  • Response headers/raw body and normalized Value are independent from Volume.Body/Header and ResponseError snapshots. The member getter shares the existing guarded transport/normalizer with default GetVolume without changing existing find fallback/selection behavior. Tests: blockstorage/volume_reads_contract_test.go:TestGetVolumeByIDUsesOnlyLiteralMemberAndKeepsResponseIdentity, blockstorage/volume_reads_transport_test.go:TestVolumeReadsAcceptedReadCloseAndCancellationKeepAllCausesAndCurrentProof, blockstorage/volume_search_test.go:TestGetVolumeOmittedNullGETFirstAndCompatibleListFallback, blockstorage/volume_search_test.go:TestGetVolumeEveryFalseyNonnullFilterUsesFullListOnly, blockstorage/volume_search_test.go:TestSearchAndGetVolumeExpressionsKeepDynamicValuesAndSingleFalseyElement, blockstorage/volume_search_test.go:TestGetVolumeDefaultExactListMissingAndAmbiguityKeepSharedIteratorPolicy.

  • Owned VolumeReadOpts.Location is the only read policy. Original callbacks apply once in order; direct package captures Cinder/header facts before originals and guards sticky context/source through every phase. Connection prepares originals once before its cached Cinder v3 getter and delegates an owned policy, supplying recorded CurrentLocation unless overridden. Captured ordinary headers are independent while provider authentication stays live; empty source Type is normalized only on the execution copy. Tests: blockstorage/volume_reads_options_test.go:TestPrepareVolumeReadOptionsOwnsFactoriesCallbacksAndOriginalSlice, blockstorage/volume_reads_options_test.go:TestVolumeReadsApplyOriginalOptionsOnceWithCapturedHeadersAndOwnedLocation, blockstorage/volume_reads_options_test.go:TestVolumeReadsOriginalSourceMutationIsTerminalBeforeRestoringOption, blockstorage/volume_reads_options_test.go:TestVolumeReadPreflightStopsOptionsAndHTTPOnInvalidSourceOrContext, connection_volume_reads_test.go:TestConnectionVolumeReadsCachedCinderOriginalOptionsPrecedeSelection, connection_volume_reads_test.go:TestConnectionVolumeReadsLocationFactoriesOwnInputsAndLeaveConnectionDefault, connection_volume_reads_test.go:TestConnectionVolumeReadsOriginalCallbackSliceAndRetainedLocationAreSnapshots, connection_volume_reads_test.go:TestConnectionVolumeReadsRecordedScopeIsCapturedAfterOptionsAndRefreshedPerCall, connection_volume_reads_test.go:TestConnectionVolumeReadsPreflightAndOptionFailuresSelectNoService, connection_volume_reads_test.go:TestConnectionVolumeReadsGetterFailureRetainsOperationAndCancellationCause, connection_volume_reads_test.go:TestConnectionVolumeReadsRecordedScopeFailurePrecedesGetterAndOwnedOverrideBypassesIt, blockstorage/volume_reads_transport_test.go:TestGetVolumeByIDNativeAuthenticationAndRetryKeepFixedOwnedRequest, blockstorage/volume_reads_transport_test.go:TestVolumeReadNativeRetryCannotChangeBodyDecoderOrAcceptedStatus.

  • Caller-owned Location JSON is validated only when an actual resource is normalized; an empty ListVolumes list does not consume an unused invalid location. Invalid caller location remains a local ErrInvalidOption without borrowing a200 ResponseError, while any independently admitted Pages/Observed evidence remains available and logical outputs stay uncommitted. Physical canonical row/descriptor failures retain their own originating accepted response error evidence. Tests: blockstorage/volume_reads_options_test.go:TestVolumeReadLocationIsConsumedOnlyByActualRowsWithoutBorrowingResponseFailure, blockstorage/volume_reads_contract_test.go:TestListVolumesEagerDescriptorFailureStopsBeforeNextAndDiscardsPartialValues, blockstorage/volume_reads_transport_test.go:TestVolumeReadStrictAcceptedEnvelopesKeepPhysicalEvidenceWithoutLogicalValues.

Python/Go differences:

  • Go selects Cinder v3 under Gophercloud v2.15.0 and uses the audited 38-field normalized Volume view plus an independent RawResource physical row and response proof. Pinned cloud can select v2; this row does not implement a v2 projection or promote native/Proxy/Resource/session/cache declarations.
  • Complete canonical UTF-8 volume(s) envelopes and accepted200 responses are the deliberate Go decoder boundary. Python generic Resource translation can tolerate invalid JSON on member fetch, unwrap absent envelopes more permissively, wrap nonarray resource lists, strip self, and preserve seeded omitted IDs. Go raw evidence preserves unknown/self fields while normalized known fields exclude them.
  • Computed location follows existing owned CloudLocation/recorded provider-scope mapping. Exact decimal raw precision, Unicode/version and configurable Python numeric conversion boundaries are inherited from the already audited normalized view; no Python object identity, mutable Resource lifecycle or warning subsystem is recreated.
  • Go returns richer owned result/evidence structures with an error; rejected native status/body/header remain in their original error. Admitted phase proof survives later failures without establishing successful resource/boolean output, and no SDK orchestration replay or swallowed cancellation is introduced.
  • Go direct identifier validation is stronger than dynamic Python Resource/URL interpolation. Existing Python Volume instances or arbitrary proxy values are not new direct cloud id APIs; this typed helper accepts a literal string ID only.
  • Go direct getter errors on404 instead of returning an absence flag. The Python get_volume_by_id declaration delegates proxy get_volume/_get/fetch directly and also raises despite its inaccurate else-None docstring.
  • Local caller Location errors are separate from physical response/descriptor errors: actual admitted proof remains inspectable, but a local error is not reclassified as a200 response failure. This preserves the existing shared GetVolume/SearchVolumes normalizer behavior.
python:cloud/_block_storage/BlockStorageCloudMixin/volume_exists

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk.Connection.VolumeExists

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.VolumeExists

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.PrepareVolumeReadOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeReadOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeReadLocation

  • VolumeExists performs default unfiltered exact GetVolume lookup and tests the returned resource identity against nil. Any successfully returned raw resource, including canonical empty volume {}, completes Exists=true independently of body truthiness or normalized ID presence. Successful completed absence completes Exists=false; every error leaves Exists=nil and no successful Value/Volume. Tests: blockstorage/volume_reads_contract_test.go:TestVolumeExistsDistinguishesPresentResourceFromSuccessfulAbsence, connection_volume_reads_test.go:TestConnectionVolumeReadsMember404IsErrorButCompletedExistenceAbsenceIsFalse.

  • Safe identity segments attempt the exact bodyless member GET first. Only rejected compatible400/403/404 allow the detailed name-hinted list fallback; accepted read/Close/schema/source/context errors and native/transport/authentication errors never establish absence or trigger that fallback. Lookup Value/Volume/Observed/Pages evidence is retained consistently without borrowed stale native errors. Tests: blockstorage/volume_reads_contract_test.go:TestVolumeExistsDistinguishesPresentResourceFromSuccessfulAbsence, blockstorage/volume_reads_transport_test.go:TestVolumeReadsAcceptedReadCloseAndCancellationKeepAllCausesAndCurrentProof, blockstorage/volume_reads_transport_test.go:TestVolumeExistsFallbackFailureNeverBorrowsEarlierRejectedMember, blockstorage/volume_reads_transport_test.go:TestVolumeReadsPostResponseSourceChangesStopWithCurrentAdmittedProof.

  • Names unsafe for a direct ID route use the exact name-hinted list directly under the existing Go safety policy. Wildcard characters remain literal exact ID/name matches; no SearchVolumes glob/dictionary/JMESPath branch is introduced and no filter or all-project/details controls are exposed. Tests: blockstorage/volume_reads_contract_test.go:TestVolumeExistsUnsafeNamesAndWildcardTextUseExactNameSemantics.

  • The fallback iterator consumes full visited normalized descriptors while searching exact ID/name matches and reports ambiguity on the second match. It stops before unused later rows or continuation; any rejected list response or later read/decoder/source/context failure propagates with Exists=nil rather than being treated as false. Tests: blockstorage/volume_reads_contract_test.go:TestVolumeExistsAmbiguityStopsBeforeUnusedTailThatFullListMustConsume, blockstorage/volume_reads_transport_test.go:TestVolumeExistsFallbackFailureNeverBorrowsEarlierRejectedMember, blockstorage/volume_search_test.go:TestGetVolumeDefaultExactListMissingAndAmbiguityKeepSharedIteratorPolicy.

  • Existing GetVolume cancellation precedence and original memberFailure joining survive shared getter/default-find factoring. Connection and package original callbacks are not applied again by an outer exists wrapper; prepared state and response sinks are reused. Tests: blockstorage/volume_reads_transport_test.go:TestVolumeReadsAcceptedReadCloseAndCancellationKeepAllCausesAndCurrentProof, blockstorage/volume_reads_transport_test.go:TestVolumeExistsFallbackFailureNeverBorrowsEarlierRejectedMember, connection_volume_reads_test.go:TestConnectionVolumeReadsCachedCinderOriginalOptionsPrecedeSelection, connection_volume_reads_test.go:TestConnectionVolumeReadsAcceptedProofSurvivesReadCloseCancellationAndSourceFailure, blockstorage/volume_search_test.go:TestGetVolumeOmittedNullGETFirstAndCompatibleListFallback.

  • Owned VolumeReadOpts.Location is the only read policy. Original callbacks apply once in order; direct package captures Cinder/header facts before originals and guards sticky context/source through every phase. Connection prepares originals once before its cached Cinder v3 getter and delegates an owned policy, supplying recorded CurrentLocation unless overridden. Captured ordinary headers are independent while provider authentication stays live; empty source Type is normalized only on the execution copy. Tests: blockstorage/volume_reads_options_test.go:TestPrepareVolumeReadOptionsOwnsFactoriesCallbacksAndOriginalSlice, blockstorage/volume_reads_options_test.go:TestVolumeReadsApplyOriginalOptionsOnceWithCapturedHeadersAndOwnedLocation, blockstorage/volume_reads_options_test.go:TestVolumeReadsOriginalSourceMutationIsTerminalBeforeRestoringOption, blockstorage/volume_reads_options_test.go:TestVolumeReadPreflightStopsOptionsAndHTTPOnInvalidSourceOrContext, connection_volume_reads_test.go:TestConnectionVolumeReadsCachedCinderOriginalOptionsPrecedeSelection, connection_volume_reads_test.go:TestConnectionVolumeReadsLocationFactoriesOwnInputsAndLeaveConnectionDefault, connection_volume_reads_test.go:TestConnectionVolumeReadsOriginalCallbackSliceAndRetainedLocationAreSnapshots, connection_volume_reads_test.go:TestConnectionVolumeReadsRecordedScopeIsCapturedAfterOptionsAndRefreshedPerCall, connection_volume_reads_test.go:TestConnectionVolumeReadsPreflightAndOptionFailuresSelectNoService, connection_volume_reads_test.go:TestConnectionVolumeReadsGetterFailureRetainsOperationAndCancellationCause, connection_volume_reads_test.go:TestConnectionVolumeReadsRecordedScopeFailurePrecedesGetterAndOwnedOverrideBypassesIt.

  • Caller-owned Location JSON is validated only when an actual resource is normalized; an empty ListVolumes list does not consume an unused invalid location. Invalid caller location remains a local ErrInvalidOption without borrowing a200 ResponseError, while any independently admitted Pages/Observed evidence remains available and logical outputs stay uncommitted. Physical canonical row/descriptor failures retain their own originating accepted response error evidence. Tests: blockstorage/volume_reads_options_test.go:TestVolumeReadLocationIsConsumedOnlyByActualRowsWithoutBorrowingResponseFailure, blockstorage/volume_reads_contract_test.go:TestListVolumesEagerDescriptorFailureStopsBeforeNextAndDiscardsPartialValues, blockstorage/volume_reads_transport_test.go:TestVolumeReadStrictAcceptedEnvelopesKeepPhysicalEvidenceWithoutLogicalValues.

Python/Go differences:

  • Go selects Cinder v3 under Gophercloud v2.15.0 and uses the audited 38-field normalized Volume view plus an independent RawResource physical row and response proof. Pinned cloud can select v2; this row does not implement a v2 projection or promote native/Proxy/Resource/session/cache declarations.
  • Complete canonical UTF-8 volume(s) envelopes and accepted200 responses are the deliberate Go decoder boundary. Python generic Resource translation can tolerate invalid JSON on member fetch, unwrap absent envelopes more permissively, wrap nonarray resource lists, strip self, and preserve seeded omitted IDs. Go raw evidence preserves unknown/self fields while normalized known fields exclude them.
  • Computed location follows existing owned CloudLocation/recorded provider-scope mapping. Exact decimal raw precision, Unicode/version and configurable Python numeric conversion boundaries are inherited from the already audited normalized view; no Python object identity, mutable Resource lifecycle or warning subsystem is recreated.
  • Go returns richer owned result/evidence structures with an error; rejected native status/body/header remain in their original error. Admitted phase proof survives later failures without establishing successful resource/boolean output, and no SDK orchestration replay or swallowed cancellation is introduced.
  • Pinned volume_exists returns self.get_volume(name_or_id) is not None with no filters argument. Go uses a nullable *bool to distinguish completed true/false from errors and retains owned lookup proof; it does not call filtered SearchVolumes or test JSON truthiness.
  • The existing Go safe-route FindIdentity policy skips member GET for identities containing slash/backslash/query/fragment/percent or whitespace and searches exact list identity directly. Pinned Resource.find unconditionally attempts GET first and catches400/403/404. This routing safety boundary is explicit, rather than claimed as unchanged Python dispatch.
  • The exact find branch keeps its own v3 canonical/native pagination and strict normalized-view boundaries; generic Resource.find/list/fetch, warnings, proxy lifecycle and cache declarations remain independently reviewed.
  • Local caller Location errors are separate from physical response/descriptor errors: actual admitted proof remains inspectable, but a local error is not reclassified as a200 response failure. This preserves the existing shared GetVolume/SearchVolumes normalizer behavior.
python:cloud/_block_storage/BlockStorageCloudMixin/get_volume_id

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk.Connection.GetVolumeID

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.GetVolumeID

  • GetVolumeID always performs the ordinary unfiltered exact name/ID lookup before extracting the actual response ID. Safe member success sends one fixed bodyless200 GET; only compatible rejected400/403/404 fall back to detailed exact-name list. Input UUID/string IDs never become a return-value shortcut, and unsafe names use the existing Go list-only safety policy without glob or JMESPath selection. Tests: blockstorage/volume_id_contract_test.go:TestGetVolumeIDRetainsFoundResourceAndArbitraryActualResponseID, blockstorage/volume_id_contract_test.go:TestGetVolumeIDResolvesActualListIDAfterCompatibleMemberRejection, blockstorage/volume_id_contract_test.go:TestGetVolumeIDExactNamesAndCompletedAbsenceNeverBecomeIDShortcutsOrGlob, connection_volume_id_test.go:TestConnectionGetVolumeIDAbsenceUnsafeNamesAndLookupFailuresRemainDistinct.

  • A found ordinary Volume is present independently of raw-body or ID truthiness. ID preserves the actual untyped JSON string/null/bool/number/list/object, including false, zero and empty string, rather than coercing to string or returning the supplied identity. A found missing canonical id yields literal JSON null with Value/Volume retained; a present different response ID remains unchanged. Tests: blockstorage/volume_id_contract_test.go:TestGetVolumeIDRetainsFoundResourceAndArbitraryActualResponseID, blockstorage/volume_id_contract_test.go:TestGetVolumeIDResolvesActualListIDAfterCompatibleMemberRejection, connection_volume_id_test.go:TestConnectionGetVolumeIDCachedCinderOriginalOptionsAndUntypedResponseIDs.

  • Completed no-match lookup returns nil ID/Value/Volume with actual admitted Pages; every failed lookup leaves ID nil and logical values uncommitted. Preparation failures return no result and send no HTTP, whereas executed identity/physical/local failures return the result with only actual available evidence and exact GetVolumeID operation context. Error is checked before treating nil ID as absence. Tests: blockstorage/volume_id_contract_test.go:TestGetVolumeIDExactNamesAndCompletedAbsenceNeverBecomeIDShortcutsOrGlob, blockstorage/volume_id_contract_test.go:TestGetVolumeIDDistinguishesPreparationFailureFromExecutedEmptyProofFailure, blockstorage/volume_id_transport_test.go:TestGetVolumeIDTerminalNativeErrorsKeepCurrentRejectionWithoutAcceptedEvidence, connection_volume_id_test.go:TestConnectionGetVolumeIDPreflightOptionAndGetterFailuresKeepOperationContext, connection_volume_id_test.go:TestConnectionGetVolumeIDAbsenceUnsafeNamesAndLookupFailuresRemainDistinct.

  • Every visited member/list row consumes the full normalized v3 descriptor/location view before identity selection. A malformed visited canonical object or descriptor fails without fallback or ID output; the second exact list match raises ambiguity before an unused bad row or continuation. A unique early match still requires successful completion of the remaining fallback search before its ID is committed. Tests: blockstorage/volume_id_contract_test.go:TestGetVolumeIDAmbiguityPrecedesUnusedBadTailAndContinuation, blockstorage/volume_id_transport_test.go:TestGetVolumeIDAcceptedMemberSchemaAndDescriptorErrorsNeverReturnIDOrFallback, blockstorage/volume_id_transport_test.go:TestGetVolumeIDLaterFallbackFailuresDoNotBorrowSuppressedMemberOrCommitEarlierID.

  • ID, complete normalized38-field Value, physical RawResource.Volume and actual Observed/Pages body/header/status are independently owned. Original wire unknown fields and numeric text remain available, the ID slice never aliases raw/normalized/proof data, and an admitted decoder failure owns its originating ResponseError separately from returned proof. Tests: blockstorage/volume_id_contract_test.go:TestGetVolumeIDRetainsFoundResourceAndArbitraryActualResponseID, blockstorage/volume_id_contract_test.go:TestGetVolumeIDResolvesActualListIDAfterCompatibleMemberRejection, blockstorage/volume_id_transport_test.go:TestGetVolumeIDAcceptedMemberSchemaAndDescriptorErrorsNeverReturnIDOrFallback, connection_volume_id_test.go:TestConnectionGetVolumeIDCachedCinderOriginalOptionsAndUntypedResponseIDs.

  • The direct entry captures and validates Cinder/service/header facts before original read callbacks. Original callbacks and the option slice run once with owned location snapshots; ordinary captured headers stay fixed, live provider authentication remains available, and selected provider/endpoint/resource base/type/microversion changes stop execution before a later restoring callback or another exchange. Native authentication/backoff/retry repeats only the protected bodyless exact request and does not rerun originals. Tests: blockstorage/volume_id_contract_test.go:TestGetVolumeIDOwnsOriginalOptionSliceLocationAndHeaders, blockstorage/volume_id_contract_test.go:TestGetVolumeIDOriginalSourceGuardStopsRestoringOptionBeforeHTTP, blockstorage/volume_id_transport_test.go:TestGetVolumeIDPostResponseSourceDriftKeepsActualMemberAndNoID, blockstorage/volume_id_transport_test.go:TestGetVolumeIDNativeAuthenticationRetriesKeepOwnedBodylessMemberAndSingleID.

  • Admitted member/list evidence survives read, Close, schema, source and cancellation failures without establishing an ID or causing orchestration replay. Joined read/Close/context cancellation and context.Cause remain inspectable; a later fallback transport/rejected/admitted failure retains its own evidence and never borrows the earlier suppressed member400/404 as the current error. Tests: blockstorage/volume_id_transport_test.go:TestGetVolumeIDAcceptedReadCloseCancellationPreservesAllCausesAndProof, blockstorage/volume_id_transport_test.go:TestGetVolumeIDTerminalNativeErrorsKeepCurrentRejectionWithoutAcceptedEvidence, blockstorage/volume_id_transport_test.go:TestGetVolumeIDLaterFallbackFailuresDoNotBorrowSuppressedMemberOrCommitEarlierID, blockstorage/volume_id_transport_test.go:TestGetVolumeIDPostResponseSourceDriftKeepsActualMemberAndNoID, connection_volume_id_test.go:TestConnectionGetVolumeIDAcceptedProofSurvivesReadCloseCancellationAndSourceDrift.

  • Connection applies original read options once before recorded CurrentLocation and cached Cinder v3 selection, then delegates an owned policy without selecting Nova or adding scope/network enrichment. Location factories, retained callbacks and per-call scope are independent snapshots; caller-invalid Location is consumed by actual rows only and remains local ErrInvalidOption without a borrowed200 ResponseError, while independently admitted proof remains available. Tests: connection_volume_id_test.go:TestConnectionGetVolumeIDCachedCinderOriginalOptionsAndUntypedResponseIDs, connection_volume_id_test.go:TestConnectionGetVolumeIDLocationSnapshotsAndOwnedOverrides, connection_volume_id_test.go:TestConnectionGetVolumeIDPreflightOptionAndGetterFailuresKeepOperationContext, connection_volume_id_test.go:TestConnectionGetVolumeIDAbsenceUnsafeNamesAndLookupFailuresRemainDistinct, blockstorage/volume_id_contract_test.go:TestGetVolumeIDOwnsOriginalOptionSliceLocationAndHeaders.

Python/Go differences:

  • Go selects Cinder v3 under Gophercloud v2.15.0 and reuses the already audited ordinary Volume find/normalized38-field view. Pinned cloud can select v2; this direct helper row promotes no independent v2, native, Proxy, Resource, mutable session/cache or volume-type declarations.
  • Pinned get_volume_id calls default get_volume and tests the returned Volume Resource, whose underlying dict is filled with default descriptor values and is ordinarily truthy even for empty wire body. The inherited id is untyped and returned unchanged; Go maps ordinary resource presence, not raw-body or ID truthiness. Dynamic monkeypatched get_volume objects are not new typed direct APIs.
  • Go returns ID as original json.RawMessage, preserving numeric spelling/precision and nested JSON encoding. Python returns decoded runtime values; exact raw JSON and finite canonical decoder boundaries are deliberate rather than string coercion or a complete Python object-runtime claim.
  • Go found missing/null id is literal JSON null plus retained Volume/Value, distinct from successful absence with nil ID/Volume/Value. Python returns None for both. Pinned seeded member Resource can preserve requested ID when response omits id, while Go deliberately retains only actual response identity rather than fabricating that seed.
  • The existing safe-route Go FindIdentity policy skips member GET for identities containing slash/backslash/query/fragment/percent or Unicode whitespace and searches exact list identity directly. Pinned Resource.find unconditionally attempts GET first and catches only400/403/404; wildcard characters remain exact ordinary identities in this helper.
  • Strict canonical UTF-8 object envelopes and accepted200 plus native volumes_links same path/origin/cycle policy are inherited Go reader boundaries. Generic Resource permissive translation, warnings, other continuation sources and lifecycle profiles remain separately reviewed.
  • Go exposes richer owned ID/resource/proof results with errors and joined cancellation causes. Actual admitted response proof can survive failure without becoming successful output; rejected responses remain in their original native errors, with no stale proof borrowing or SDK orchestration replay.
  • Computed location follows the existing owned Volume/recorded-scope mapping. Local caller Location errors remain separate from physical response/descriptor errors. Disconnected mutable Resource and Type constructor raw computed-location edge cases remain independent profiles, with no current connected Volume helper defect indicated.
python:cloud/_block_storage/BlockStorageCloudMixin/list_volume_types

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk.Connection.ListVolumeTypes

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.ListVolumeTypes

  • ListVolumeTypes completes the raw v3 /types sequence with no initial visibility/name/detail/limit query or per-type extra-spec request. Every row view is constructed before continuation, response order and duplicate occurrences survive, and Value/Types commit only after complete success with an owned empty array for an empty list. Tests: blockstorage/volume_types_contract_test.go:TestListVolumeTypesCompletesQuerylessPagesAndOwnsSixFieldViewsAndWireProof, blockstorage/volume_types_contract_test.go:TestVolumeTypesEmptyCanonicalListIgnoresUnusedLinksAndLocation, connection_volume_types_test.go:TestConnectionVolumeTypesCachedCinderOriginalOptionsPrecedeSelection.

  • Every visited row is eagerly normalized to exactly id, name, description, extra_specs, is_public and location. Untyped attributes and original unknown wire fields stay owned; dictionary null is retained and nonobjects become an empty object; public aliases use ordinary JSON truthiness. RawResource, normalized Value and physical proof do not alias. Tests: blockstorage/volume_type_view_test.go:TestVolumeTypeViewHasOnlySixDescriptorsAndOwnsAllValues, blockstorage/volume_type_view_test.go:TestVolumeTypeViewBooleanAndDictionaryDescriptorsRetainDeclaredJSONPolicy, blockstorage/volume_type_view_test.go:TestVolumeTypeViewAliasOrderAndDeclaredDuplicatePolicy, blockstorage/volume_type_view_test.go:TestVolumeTypeViewRejectsNonobjectsMalformedJSONAndUTF8Atomically, blockstorage/volume_types_contract_test.go:TestListVolumeTypesCompletesQuerylessPagesAndOwnsSixFieldViewsAndWireProof.

  • List construction preserves arbitrary canonical wire location only when no recognized Body attribute was consumed; a known null also counts as presence. Member translation always uses computed location. Unknown metadata/project/zone fields do not become descriptors or inferred scope. Caller-invalid owned Location is consumed lazily and stays a local ErrInvalidOption without borrowing200 ResponseError; admitted proof remains. Tests: blockstorage/volume_type_view_test.go:TestVolumeTypeViewListWireLocationIsLazyAndMemberAlwaysUsesOwnedLocation, blockstorage/volume_type_view_test.go:TestVolumeTypeViewKnownPresenceIncludingNullDiscardsRawLocation, blockstorage/volume_types_options_test.go:TestVolumeTypeInvalidOwnedLocationIsLazyAndNeverFabricatesResponseError, blockstorage/volume_types_options_test.go:TestVolumeTypeRecordedProjectScopeSnapshotsAfterOptionsAndFailsOnlyWhenConsumed, connection_volume_types_test.go:TestConnectionVolumeTypesLocationSnapshotAndListMemberPhase.

  • After a nonempty canonical page, source top-level links presence suppresses plural volume_types_links. The first exact next relation with present href is consumed; falsey href ends that scan and falls to body next, then usable HTTP and finally native singular compatibility. Consumed errors stop fallback. Next nonblank query values replace matching current keys after old marker/limit removal, while omitted nonpagination keys persist. Reader validates origin, escaped path and canonical URL cycles before another request; empty resource array stops without consuming unused continuation. Tests: blockstorage/volume_types_next_test.go:TestVolumeTypesNextSourcePrecedenceAndFirstConsumedHref, blockstorage/volume_types_next_test.go:TestVolumeTypesNextConsumedShapesAndFalseyValues, blockstorage/volume_types_next_test.go:TestVolumeTypesNextBodyThenHTTPThenNativeCompatibility, blockstorage/volume_types_next_test.go:TestVolumeTypesNextHTTPQuotedLinksUseLastNextAcrossHeaders, blockstorage/volume_types_next_test.go:TestVolumeTypesNextQueryMergeDropsBlankValuesAndOwnsInputs, blockstorage/volume_types_next_test.go:TestVolumeTypesNextChecksOriginalHrefBeforeURLSerialization, blockstorage/volume_types_next_test.go:TestVolumeTypesNextRequiresReaderOriginPathAndCycleValidation, internal/rest/header_next_test.go:TestHeaderNextLinksPreservesQuotedDelimitersAndRelationOrder, blockstorage/volume_types_contract_test.go:TestVolumeTypesEmptyCanonicalListIgnoresUnusedLinksAndLocation, blockstorage/volume_types_pagination_test.go:TestVolumeTypesPaginationRespectsSourcePrecedenceAndLazyFirstMatchingHref, blockstorage/volume_types_pagination_test.go:TestGetVolumeTypeContinuationMergesVisibilityDropsPaginationAndBlankAdvertisedValues, blockstorage/volume_types_pagination_test.go:TestVolumeTypesPaginationRejectsConsumedLinksOriginPathFragmentsAndQueryCycles.

  • Direct calls capture Cinder/service/header facts before originals. Original callbacks and retained factory values run once from owned snapshots; source provider/endpoint/resource base/type/microversion drift is sticky and stops a restoring callback or later exchange. Captured ordinary headers remain fixed and live authentication is available. Connection executes originals before CurrentLocation and cached Cinder v3 selection, then delegates an owned policy. Tests: blockstorage/volume_types_options_test.go:TestVolumeTypeOriginalOptionsOwnFactoriesRetainedStateHeadersAndCallbackSlice, blockstorage/volume_types_options_test.go:TestVolumeTypeOriginalSourceMutationStopsBeforeRestoringOptionAndHTTP, blockstorage/volume_types_options_test.go:TestVolumeTypePreflightContextRoleAndOriginalCallbacksFailBeforeHTTP, connection_volume_types_test.go:TestConnectionVolumeTypesCachedCinderOriginalOptionsPrecedeSelection, connection_volume_types_test.go:TestConnectionVolumeTypesOwnedFactoriesAndOriginalOptionSliceSnapshots, connection_volume_types_test.go:TestConnectionVolumeTypesPreflightAndGetterFailuresKeepExactOperationContext.

  • Fixed bodyless accepted200 exchanges retain native rejected status/header/body and authentication behavior without SDK orchestration replay. Admitted read, Close, canonical-schema, source and cancellation failures preserve actual independent proof and joined context.Cause while logical values remain uncommitted. A later failed page never borrows an earlier accepted response as its physical error. Tests: blockstorage/volume_types_transport_test.go:TestVolumeTypesAcceptedReadCloseCancellationRetainsAllCausesAndIndependentCurrentProof, blockstorage/volume_types_transport_test.go:TestVolumeTypesStrictCanonicalAcceptedEnvelopesNeverProduceLogicalValues, blockstorage/volume_types_transport_test.go:TestVolumeTypesPostResponseSourceChangesKeepCurrentAdmittedProofAndStop, blockstorage/volume_types_transport_test.go:TestVolumeTypesBlockedContinuationCancellationKeepsPriorPageAndCallerCause, connection_volume_types_test.go:TestConnectionVolumeTypesAcceptedProofSurvivesReadCloseCancellationAndSourceDrift.

  • Connection snapshots current location after originals for each operation and refreshes it on the next call. Complete read/search overrides and callback output own their pointers/raw JSON, keep an explicit Zone and leave defaults unchanged. Invalid recorded scope prevents cached service selection unless a complete override supplies the facts; direct recorded project scope is a snapshot without enrichment I/O. Tests: connection_volume_types_test.go:TestConnectionVolumeTypesLocationSnapshotAndListMemberPhase, connection_volume_types_test.go:TestConnectionVolumeTypesOwnedFactoriesAndOriginalOptionSliceSnapshots, connection_volume_types_test.go:TestConnectionVolumeTypesInvalidRecordedScopePreventsSelectionButOwnedLocationWorks, blockstorage/volume_types_options_test.go:TestVolumeTypeRecordedProjectScopeSnapshotsAfterOptionsAndFailsOnlyWhenConsumed.

Python/Go differences:

  • Deprecated get_extra is a warning-only no-op in pinned list_volume_types and is omitted from Go; no extra-spec enrichment is lost. Go does not reproduce warning delivery.
  • Go selects Cinder v3 under Gophercloud v2.15.0. Only this actual cloud helper is mapped; independent v2 Type, native/Proxy declarations, generic Resource/session/cache, access and mutation profiles are not promoted by this row.
  • The six-field view follows v3 Type descriptors, with unknown original wire fields retained only in RawResource. Go owns raw JSON and exact numeric text; this is not a claim that a plain Go map reproduces the complete mutable Python Resource runtime.
  • Go public aliases and repeated wire keys consume textual order and the last value wins. Python json.loads collapses repeated keys at their first insertion position before alias descriptor consumption; interleaved duplicate/alias inputs can differ. Existing exact mathematical JSON truthiness also keeps 1e-9999 nonzero whereas ordinary Python float decoding can underflow to false.
  • List rows with no recognized Body key preserve canonical wire location, including false/null/arbitrary JSON; known-key presence discards it and member translation always ignores wire computed location. Go supplies owned current scope or a complete override, retaining override Zone and performing no unknown owner/zone inference. Local caller Location failures remain separate from physical response failures.
  • Usable HTTP Link fallback is a declared Go repair: pinned Resource._get_next_link reads response.links[next][uri] but ordinary Requests returns url. Existing quoted Link parsing handles multiple angle targets, quoted delimiters, case-insensitive/multi-relation next and last-next replacement across headers. Native canonical singular volume_type_links is an explicit lower-priority compatibility extension; Python derives plural volume_types_links.
  • Next query uses source-style nonblank parse_qs merge, with old marker/limit removed and omitted nonpagination keys retained; explicit advertised keys replace current keys. Go encodes one merged query and preserves effective advertised paths instead of copying source relative /v prefix stripping or query-only URL-plus-params duplication. No initial caller limit or invented numeric marker fallback is exposed.
  • Strict canonical UTF-8 envelopes and accepted200, fragment/userinfo/opaque/query/origin/escaped-path checks and complete-URL cycle detection are Go safety boundaries. Source Resource.list permits other shapes and has separate same-marker bookkeeping, so these rules are intentional mappings rather than generic pagination equivalence.
  • Go exposes independently owned normalized values, raw resources and actual physical response proof with errors and joined cancellation causes. Native protected request retry is retained; SDK workflow replay, mutable session negotiation and cached object lifecycle are separate scope.
python:cloud/_block_storage/BlockStorageCloudMixin/search_volume_types

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk.Connection.SearchVolumeTypes

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.SearchVolumeTypes

  • SearchVolumeTypes first completes queryless ListVolumeTypes and all eager descriptor/location views, then performs row-by-row exact or fnmatch-style name/ID selection followed by filters. Source order and duplicate occurrences remain. A later page/descriptor failure wins before filter interpretation; local filter errors do not borrow a successful response as ResponseError. Tests: blockstorage/volume_types_contract_test.go:TestSearchVolumeTypesCompletesAllPagesAndPreservesExactGlobDuplicateSelection, blockstorage/volume_types_contract_test.go:TestVolumeTypeLocalFiltersFollowCompleteEagerNormalizationAndKeepOnlyOriginPages, connection_volume_types_test.go:TestConnectionVolumeTypesCachedCinderOriginalOptionsPrecedeSelection.

  • Owned JSON filters preserve omission and arbitrary explicit values. Falsey filters retain identifier-selected rows; dictionaries compare normalized nested fields with selected Python JSON equality and lazy error consumption. Nonempty strings evaluate the shared full JMESPath engine and can return any JSON type. Expressions never invent a RawResource association. Tests: blockstorage/volume_types_contract_test.go:TestVolumeTypeExpressionsKeepDynamicSearchAndGetterFirstValueSemantics, blockstorage/volume_types_contract_test.go:TestVolumeTypeLocalFiltersFollowCompleteEagerNormalizationAndKeepOnlyOriginPages, blockstorage/volume_types_contract_test.go:TestVolumeTypeSearchMappingUsesNormalizedSubsetsAndOrderedLazyErrors, connection_volume_types_test.go:TestConnectionVolumeTypesExpressionFactoriesOwnFiltersAndDoNotInventRawRows.

  • Every visited row is eagerly normalized to exactly id, name, description, extra_specs, is_public and location. Untyped attributes and original unknown wire fields stay owned; dictionary null is retained and nonobjects become an empty object; public aliases use ordinary JSON truthiness. RawResource, normalized Value and physical proof do not alias. Tests: blockstorage/volume_type_view_test.go:TestVolumeTypeViewHasOnlySixDescriptorsAndOwnsAllValues, blockstorage/volume_type_view_test.go:TestVolumeTypeViewBooleanAndDictionaryDescriptorsRetainDeclaredJSONPolicy, blockstorage/volume_type_view_test.go:TestVolumeTypeViewAliasOrderAndDeclaredDuplicatePolicy, blockstorage/volume_type_view_test.go:TestVolumeTypeViewRejectsNonobjectsMalformedJSONAndUTF8Atomically, blockstorage/volume_types_contract_test.go:TestListVolumeTypesCompletesQuerylessPagesAndOwnsSixFieldViewsAndWireProof.

  • List construction preserves arbitrary canonical wire location only when no recognized Body attribute was consumed; a known null also counts as presence. Member translation always uses computed location. Unknown metadata/project/zone fields do not become descriptors or inferred scope. Caller-invalid owned Location is consumed lazily and stays a local ErrInvalidOption without borrowing200 ResponseError; admitted proof remains. Tests: blockstorage/volume_type_view_test.go:TestVolumeTypeViewListWireLocationIsLazyAndMemberAlwaysUsesOwnedLocation, blockstorage/volume_type_view_test.go:TestVolumeTypeViewKnownPresenceIncludingNullDiscardsRawLocation, blockstorage/volume_types_options_test.go:TestVolumeTypeInvalidOwnedLocationIsLazyAndNeverFabricatesResponseError, blockstorage/volume_types_options_test.go:TestVolumeTypeRecordedProjectScopeSnapshotsAfterOptionsAndFailsOnlyWhenConsumed, connection_volume_types_test.go:TestConnectionVolumeTypesLocationSnapshotAndListMemberPhase.

  • After a nonempty canonical page, source top-level links presence suppresses plural volume_types_links. The first exact next relation with present href is consumed; falsey href ends that scan and falls to body next, then usable HTTP and finally native singular compatibility. Consumed errors stop fallback. Next nonblank query values replace matching current keys after old marker/limit removal, while omitted nonpagination keys persist. Reader validates origin, escaped path and canonical URL cycles before another request; empty resource array stops without consuming unused continuation. Tests: blockstorage/volume_types_next_test.go:TestVolumeTypesNextSourcePrecedenceAndFirstConsumedHref, blockstorage/volume_types_next_test.go:TestVolumeTypesNextConsumedShapesAndFalseyValues, blockstorage/volume_types_next_test.go:TestVolumeTypesNextBodyThenHTTPThenNativeCompatibility, blockstorage/volume_types_next_test.go:TestVolumeTypesNextHTTPQuotedLinksUseLastNextAcrossHeaders, blockstorage/volume_types_next_test.go:TestVolumeTypesNextQueryMergeDropsBlankValuesAndOwnsInputs, blockstorage/volume_types_next_test.go:TestVolumeTypesNextChecksOriginalHrefBeforeURLSerialization, blockstorage/volume_types_next_test.go:TestVolumeTypesNextRequiresReaderOriginPathAndCycleValidation, internal/rest/header_next_test.go:TestHeaderNextLinksPreservesQuotedDelimitersAndRelationOrder, blockstorage/volume_types_contract_test.go:TestVolumeTypesEmptyCanonicalListIgnoresUnusedLinksAndLocation, blockstorage/volume_types_pagination_test.go:TestVolumeTypesPaginationRespectsSourcePrecedenceAndLazyFirstMatchingHref, blockstorage/volume_types_pagination_test.go:TestGetVolumeTypeContinuationMergesVisibilityDropsPaginationAndBlankAdvertisedValues, blockstorage/volume_types_pagination_test.go:TestVolumeTypesPaginationRejectsConsumedLinksOriginPathFragmentsAndQueryCycles.

  • Direct calls capture Cinder/service/header facts before originals. Original callbacks and retained factory values run once from owned snapshots; source provider/endpoint/resource base/type/microversion drift is sticky and stops a restoring callback or later exchange. Captured ordinary headers remain fixed and live authentication is available. Connection executes originals before CurrentLocation and cached Cinder v3 selection, then delegates an owned policy. Tests: blockstorage/volume_types_options_test.go:TestVolumeTypeOriginalOptionsOwnFactoriesRetainedStateHeadersAndCallbackSlice, blockstorage/volume_types_options_test.go:TestVolumeTypeOriginalSourceMutationStopsBeforeRestoringOptionAndHTTP, blockstorage/volume_types_options_test.go:TestVolumeTypePreflightContextRoleAndOriginalCallbacksFailBeforeHTTP, connection_volume_types_test.go:TestConnectionVolumeTypesCachedCinderOriginalOptionsPrecedeSelection, connection_volume_types_test.go:TestConnectionVolumeTypesOwnedFactoriesAndOriginalOptionSliceSnapshots, connection_volume_types_test.go:TestConnectionVolumeTypesPreflightAndGetterFailuresKeepExactOperationContext.

  • Fixed bodyless accepted200 exchanges retain native rejected status/header/body and authentication behavior without SDK orchestration replay. Admitted read, Close, canonical-schema, source and cancellation failures preserve actual independent proof and joined context.Cause while logical values remain uncommitted. A later failed page never borrows an earlier accepted response as its physical error. Tests: blockstorage/volume_types_transport_test.go:TestVolumeTypesAcceptedReadCloseCancellationRetainsAllCausesAndIndependentCurrentProof, blockstorage/volume_types_transport_test.go:TestVolumeTypesStrictCanonicalAcceptedEnvelopesNeverProduceLogicalValues, blockstorage/volume_types_transport_test.go:TestVolumeTypesPostResponseSourceChangesKeepCurrentAdmittedProofAndStop, blockstorage/volume_types_transport_test.go:TestVolumeTypesBlockedContinuationCancellationKeepsPriorPageAndCallerCause, connection_volume_types_test.go:TestConnectionVolumeTypesAcceptedProofSurvivesReadCloseCancellationAndSourceDrift.

  • Connection snapshots current location after originals for each operation and refreshes it on the next call. Complete read/search overrides and callback output own their pointers/raw JSON, keep an explicit Zone and leave defaults unchanged. Invalid recorded scope prevents cached service selection unless a complete override supplies the facts; direct recorded project scope is a snapshot without enrichment I/O. Tests: connection_volume_types_test.go:TestConnectionVolumeTypesLocationSnapshotAndListMemberPhase, connection_volume_types_test.go:TestConnectionVolumeTypesOwnedFactoriesAndOriginalOptionSliceSnapshots, connection_volume_types_test.go:TestConnectionVolumeTypesInvalidRecordedScopePreventsSelectionButOwnedLocationWorks, blockstorage/volume_types_options_test.go:TestVolumeTypeRecordedProjectScopeSnapshotsAfterOptionsAndFailsOnlyWhenConsumed.

Python/Go differences:

  • Pinned search_volume_types warns for non-None get_extra then calls list_volume_types without that value; get_extra produces no enrichment and is omitted. Go also omits the deprecated JMESPath/logging warning channel while retaining functional filter behavior.
  • Go models name_or_id as a string and JSON filters as owned bytes. Arbitrary Python object coercions are outside the ordinary JSON direct-helper contract. The reused shared JMESPath engine declares exact-number, finite arithmetic/allocation and deterministic unordered-object boundaries in its independent guide; this row does not promote that dependency declaration.
  • Go selects Cinder v3 under Gophercloud v2.15.0. Only this actual cloud helper is mapped; independent v2 Type, native/Proxy declarations, generic Resource/session/cache, access and mutation profiles are not promoted by this row.
  • The six-field view follows v3 Type descriptors, with unknown original wire fields retained only in RawResource. Go owns raw JSON and exact numeric text; this is not a claim that a plain Go map reproduces the complete mutable Python Resource runtime.
  • Go public aliases and repeated wire keys consume textual order and the last value wins. Python json.loads collapses repeated keys at their first insertion position before alias descriptor consumption; interleaved duplicate/alias inputs can differ. Existing exact mathematical JSON truthiness also keeps 1e-9999 nonzero whereas ordinary Python float decoding can underflow to false.
  • List rows with no recognized Body key preserve canonical wire location, including false/null/arbitrary JSON; known-key presence discards it and member translation always ignores wire computed location. Go supplies owned current scope or a complete override, retaining override Zone and performing no unknown owner/zone inference. Local caller Location failures remain separate from physical response failures.
  • Usable HTTP Link fallback is a declared Go repair: pinned Resource._get_next_link reads response.links[next][uri] but ordinary Requests returns url. Existing quoted Link parsing handles multiple angle targets, quoted delimiters, case-insensitive/multi-relation next and last-next replacement across headers. Native canonical singular volume_type_links is an explicit lower-priority compatibility extension; Python derives plural volume_types_links.
  • Next query uses source-style nonblank parse_qs merge, with old marker/limit removed and omitted nonpagination keys retained; explicit advertised keys replace current keys. Go encodes one merged query and preserves effective advertised paths instead of copying source relative /v prefix stripping or query-only URL-plus-params duplication. No initial caller limit or invented numeric marker fallback is exposed.
  • Strict canonical UTF-8 envelopes and accepted200, fragment/userinfo/opaque/query/origin/escaped-path checks and complete-URL cycle detection are Go safety boundaries. Source Resource.list permits other shapes and has separate same-marker bookkeeping, so these rules are intentional mappings rather than generic pagination equivalence.
  • Go exposes independently owned normalized values, raw resources and actual physical response proof with errors and joined cancellation causes. Native protected request retry is retained; SDK workflow replay, mutable session negotiation and cached object lifecycle are separate scope.
python:cloud/_block_storage/BlockStorageCloudMixin/get_volume_type

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk.Connection.GetVolumeType

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.GetVolumeType

  • Omitted or literal-null filters use exact identity lookup. Safe identities send a fixed bodyless member GET with lowercase is_public=none; compatible clean rejected400/403/404 fall back to a /types list retaining is_public=none but no name hint. Successful member values keep actual untyped response identity rather than an input-ID shortcut. Unsafe literal identities use existing exact list-only routing. Tests: blockstorage/volume_types_contract_test.go:TestGetVolumeTypeOmittedAndNullFiltersKeepMemberQueryAndFreshCanonicalIdentity, blockstorage/volume_types_contract_test.go:TestGetVolumeTypeDefaultFallbackUsesNoneWithoutNameHintAndWaitsForExactAbsence, connection_volume_types_test.go:TestConnectionGetVolumeTypeDefaultAndExplicitFalseyFilterRoutes.

  • Default exact fallback confirms absence only after successful complete search and stops on its second exact match before unused bad rows or links. Visited descriptors remain eager. Later native/transport/admitted failures retain their own evidence without borrowing the suppressed member400/404; no incomplete Type/Value is committed. Tests: blockstorage/volume_types_contract_test.go:TestGetVolumeTypeDefaultFallbackUsesNoneWithoutNameHintAndWaitsForExactAbsence, blockstorage/volume_types_contract_test.go:TestVolumeTypeExactFindStopsAtSecondMatchWhileSearchConsumesUnusedBadRowAndLink, blockstorage/volume_types_transport_test.go:TestGetVolumeTypeFallbackFailuresKeepOnlyActualCurrentPhaseEvidence.

  • Every explicit nonnull filter, including {}, [], false, zero and empty string, selects complete queryless SearchVolumeTypes. Getter then applies source truthiness, length and integer-index-zero semantics to any JSON expression output: successful absence is nil Value, selected false/zero/empty string remain values, multiple matches wrap ErrAmbiguous, and invalid length/index operations remain errors. Expression output never invents a Type pointer. Tests: blockstorage/volume_types_contract_test.go:TestGetVolumeTypeEveryNonnullFalseyFilterUsesFullQuerylessSearch, blockstorage/volume_types_contract_test.go:TestVolumeTypeExpressionsKeepDynamicSearchAndGetterFirstValueSemantics, connection_volume_types_test.go:TestConnectionGetVolumeTypeDefaultAndExplicitFalseyFilterRoutes, connection_volume_types_test.go:TestConnectionVolumeTypesExpressionFactoriesOwnFiltersAndDoNotInventRawRows.

  • Every visited row is eagerly normalized to exactly id, name, description, extra_specs, is_public and location. Untyped attributes and original unknown wire fields stay owned; dictionary null is retained and nonobjects become an empty object; public aliases use ordinary JSON truthiness. RawResource, normalized Value and physical proof do not alias. Tests: blockstorage/volume_type_view_test.go:TestVolumeTypeViewHasOnlySixDescriptorsAndOwnsAllValues, blockstorage/volume_type_view_test.go:TestVolumeTypeViewBooleanAndDictionaryDescriptorsRetainDeclaredJSONPolicy, blockstorage/volume_type_view_test.go:TestVolumeTypeViewAliasOrderAndDeclaredDuplicatePolicy, blockstorage/volume_type_view_test.go:TestVolumeTypeViewRejectsNonobjectsMalformedJSONAndUTF8Atomically, blockstorage/volume_types_contract_test.go:TestListVolumeTypesCompletesQuerylessPagesAndOwnsSixFieldViewsAndWireProof.

  • List construction preserves arbitrary canonical wire location only when no recognized Body attribute was consumed; a known null also counts as presence. Member translation always uses computed location. Unknown metadata/project/zone fields do not become descriptors or inferred scope. Caller-invalid owned Location is consumed lazily and stays a local ErrInvalidOption without borrowing200 ResponseError; admitted proof remains. Tests: blockstorage/volume_type_view_test.go:TestVolumeTypeViewListWireLocationIsLazyAndMemberAlwaysUsesOwnedLocation, blockstorage/volume_type_view_test.go:TestVolumeTypeViewKnownPresenceIncludingNullDiscardsRawLocation, blockstorage/volume_types_options_test.go:TestVolumeTypeInvalidOwnedLocationIsLazyAndNeverFabricatesResponseError, blockstorage/volume_types_options_test.go:TestVolumeTypeRecordedProjectScopeSnapshotsAfterOptionsAndFailsOnlyWhenConsumed, connection_volume_types_test.go:TestConnectionVolumeTypesLocationSnapshotAndListMemberPhase.

  • After a nonempty canonical page, source top-level links presence suppresses plural volume_types_links. The first exact next relation with present href is consumed; falsey href ends that scan and falls to body next, then usable HTTP and finally native singular compatibility. Consumed errors stop fallback. Next nonblank query values replace matching current keys after old marker/limit removal, while omitted nonpagination keys persist. Reader validates origin, escaped path and canonical URL cycles before another request; empty resource array stops without consuming unused continuation. Tests: blockstorage/volume_types_next_test.go:TestVolumeTypesNextSourcePrecedenceAndFirstConsumedHref, blockstorage/volume_types_next_test.go:TestVolumeTypesNextConsumedShapesAndFalseyValues, blockstorage/volume_types_next_test.go:TestVolumeTypesNextBodyThenHTTPThenNativeCompatibility, blockstorage/volume_types_next_test.go:TestVolumeTypesNextHTTPQuotedLinksUseLastNextAcrossHeaders, blockstorage/volume_types_next_test.go:TestVolumeTypesNextQueryMergeDropsBlankValuesAndOwnsInputs, blockstorage/volume_types_next_test.go:TestVolumeTypesNextChecksOriginalHrefBeforeURLSerialization, blockstorage/volume_types_next_test.go:TestVolumeTypesNextRequiresReaderOriginPathAndCycleValidation, internal/rest/header_next_test.go:TestHeaderNextLinksPreservesQuotedDelimitersAndRelationOrder, blockstorage/volume_types_contract_test.go:TestVolumeTypesEmptyCanonicalListIgnoresUnusedLinksAndLocation, blockstorage/volume_types_pagination_test.go:TestVolumeTypesPaginationRespectsSourcePrecedenceAndLazyFirstMatchingHref, blockstorage/volume_types_pagination_test.go:TestGetVolumeTypeContinuationMergesVisibilityDropsPaginationAndBlankAdvertisedValues, blockstorage/volume_types_pagination_test.go:TestVolumeTypesPaginationRejectsConsumedLinksOriginPathFragmentsAndQueryCycles.

  • Direct calls capture Cinder/service/header facts before originals. Original callbacks and retained factory values run once from owned snapshots; source provider/endpoint/resource base/type/microversion drift is sticky and stops a restoring callback or later exchange. Captured ordinary headers remain fixed and live authentication is available. Connection executes originals before CurrentLocation and cached Cinder v3 selection, then delegates an owned policy. Tests: blockstorage/volume_types_options_test.go:TestVolumeTypeOriginalOptionsOwnFactoriesRetainedStateHeadersAndCallbackSlice, blockstorage/volume_types_options_test.go:TestVolumeTypeOriginalSourceMutationStopsBeforeRestoringOptionAndHTTP, blockstorage/volume_types_options_test.go:TestVolumeTypePreflightContextRoleAndOriginalCallbacksFailBeforeHTTP, connection_volume_types_test.go:TestConnectionVolumeTypesCachedCinderOriginalOptionsPrecedeSelection, connection_volume_types_test.go:TestConnectionVolumeTypesOwnedFactoriesAndOriginalOptionSliceSnapshots, connection_volume_types_test.go:TestConnectionVolumeTypesPreflightAndGetterFailuresKeepExactOperationContext.

  • Fixed bodyless accepted200 exchanges retain native rejected status/header/body and authentication behavior without SDK orchestration replay. Admitted read, Close, canonical-schema, source and cancellation failures preserve actual independent proof and joined context.Cause while logical values remain uncommitted. A later failed page never borrows an earlier accepted response as its physical error. Native auth retry preserves exact is_public=none request ownership; caller retry body/response-decoder mutation rejects before resend; ordinary native retry headers and OkCodes expansion remain supported, while an actual unrequested status is rejected afterward with native response evidence and no admitted proof. Tests: blockstorage/volume_types_transport_test.go:TestVolumeTypesAcceptedReadCloseCancellationRetainsAllCausesAndIndependentCurrentProof, blockstorage/volume_types_transport_test.go:TestVolumeTypesStrictCanonicalAcceptedEnvelopesNeverProduceLogicalValues, blockstorage/volume_types_transport_test.go:TestVolumeTypesPostResponseSourceChangesKeepCurrentAdmittedProofAndStop, blockstorage/volume_types_transport_test.go:TestVolumeTypesBlockedContinuationCancellationKeepsPriorPageAndCallerCause, connection_volume_types_test.go:TestConnectionVolumeTypesAcceptedProofSurvivesReadCloseCancellationAndSourceDrift, blockstorage/volume_types_transport_test.go:TestGetVolumeTypeNativeAuthenticationRetriesKeepNoneQueryAndOneAcceptedProof, blockstorage/volume_types_transport_test.go:TestGetVolumeTypeNativeRetryPreservesBodyOwnershipAndOriginalAcceptedStatus, blockstorage/volume_types_transport_test.go:TestGetVolumeTypeAcceptedReadContainingNative404IsTerminalWithoutFallback.

  • Connection snapshots current location after originals for each operation and refreshes it on the next call. Complete read/search overrides and callback output own their pointers/raw JSON, keep an explicit Zone and leave defaults unchanged. Invalid recorded scope prevents cached service selection unless a complete override supplies the facts; direct recorded project scope is a snapshot without enrichment I/O. Tests: connection_volume_types_test.go:TestConnectionVolumeTypesLocationSnapshotAndListMemberPhase, connection_volume_types_test.go:TestConnectionVolumeTypesOwnedFactoriesAndOriginalOptionSliceSnapshots, connection_volume_types_test.go:TestConnectionVolumeTypesInvalidRecordedScopePreventsSelectionButOwnedLocationWorks, blockstorage/volume_types_options_test.go:TestVolumeTypeRecordedProjectScopeSnapshotsAfterOptionsAndFailsOnlyWhenConsumed.

Python/Go differences:

  • Pinned get_volume_type treats every filters is not None value as the deprecated Search branch, independently of filter truthiness, and Go preserves that dispatch. Go omits warning delivery.
  • Pinned Resource.find attempts member GET for all identities and carries mutable seeded request ID/is_public state. Go uses safe single-segment exact-routing policy for slash/backslash/query/fragment/percent/Unicode whitespace names and retains only fresh canonical response ID/public fields, producing null when absent rather than fabricating the seed.
  • Go returns nullable Value plus optional actual Type and Observed/Pages proof. Python returns Resource/None or arbitrary expression first values; Go distinguishes absence from a selected false/zero/empty string and exposes a library-owned VolumeTypeSelectionError wrapping ErrAmbiguous instead of an SDKException class.
  • Go selects Cinder v3 under Gophercloud v2.15.0. Only this actual cloud helper is mapped; independent v2 Type, native/Proxy declarations, generic Resource/session/cache, access and mutation profiles are not promoted by this row.
  • The six-field view follows v3 Type descriptors, with unknown original wire fields retained only in RawResource. Go owns raw JSON and exact numeric text; this is not a claim that a plain Go map reproduces the complete mutable Python Resource runtime.
  • Go public aliases and repeated wire keys consume textual order and the last value wins. Python json.loads collapses repeated keys at their first insertion position before alias descriptor consumption; interleaved duplicate/alias inputs can differ. Existing exact mathematical JSON truthiness also keeps 1e-9999 nonzero whereas ordinary Python float decoding can underflow to false.
  • List rows with no recognized Body key preserve canonical wire location, including false/null/arbitrary JSON; known-key presence discards it and member translation always ignores wire computed location. Go supplies owned current scope or a complete override, retaining override Zone and performing no unknown owner/zone inference. Local caller Location failures remain separate from physical response failures.
  • Usable HTTP Link fallback is a declared Go repair: pinned Resource._get_next_link reads response.links[next][uri] but ordinary Requests returns url. Existing quoted Link parsing handles multiple angle targets, quoted delimiters, case-insensitive/multi-relation next and last-next replacement across headers. Native canonical singular volume_type_links is an explicit lower-priority compatibility extension; Python derives plural volume_types_links.
  • Next query uses source-style nonblank parse_qs merge, with old marker/limit removed and omitted nonpagination keys retained; explicit advertised keys replace current keys. Go encodes one merged query and preserves effective advertised paths instead of copying source relative /v prefix stripping or query-only URL-plus-params duplication. No initial caller limit or invented numeric marker fallback is exposed.
  • Strict canonical UTF-8 envelopes and accepted200, fragment/userinfo/opaque/query/origin/escaped-path checks and complete-URL cycle detection are Go safety boundaries. Source Resource.list permits other shapes and has separate same-marker bookkeeping, so these rules are intentional mappings rather than generic pagination equivalence.
  • Go exposes independently owned normalized values, raw resources and actual physical response proof with errors and joined cancellation causes. Native protected request retry is retained; SDK workflow replay, mutable session negotiation and cached object lifecycle are separate scope.
python:cloud/_block_storage/BlockStorageCloudMixin/get_volume_type_access

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk.Connection.GetVolumeTypeAccess

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.GetVolumeTypeAccess

  • Resolve the ordinary unfiltered exact Type once through the captured reader. Safe identities use member GET with lowercase is_public=none; clean compatible member400/403/404 can fall back to exact list without a name hint. Lookup errors and completed absence retain Resolved; no access/action request follows. Tests: blockstorage/volume_type_access_contract_test.go:TestVolumeTypeAccessCompletedAbsenceAndEarlyAmbiguityStopBeforeSecondStage, blockstorage/volume_type_access_contract_test.go:TestVolumeTypeAccessFallbackFindUsesNoneThenReturnedIDWithoutVisibilityQuery, connection_volume_type_access_test.go:TestConnectionVolumeTypeAccessLocalResolutionFailuresRetainLookupWithoutSecondStage.

  • Construct the queryless second route only from the actual returned canonical wire id. Missing, null, nonstring, empty or unsafe id is a local ErrInvalidOption with Resolved retained and no invented ResponseError; no input-ID seeding, coercion, refetch or Identity lookup occurs. Tests: blockstorage/volume_type_access_contract_test.go:TestVolumeTypeAccessRejectsInvalidCanonicalResponseIDLocallyAfterLookup, connection_volume_type_access_test.go:TestConnectionVolumeTypeAccessLocalResolutionFailuresRetainLookupWithoutSecondStage.

  • Read one bodyless queryless /types/{returnedID}/os-volume-type-access response. Exact volume_type_access absence gives raw[]; present null/scalar/object/arbitrary arrays are preserved without typed field coercion. Unused links never paginate. Tests: blockstorage/volume_type_access_contract_test.go:TestGetVolumeTypeAccessPreservesMissingAndEveryArbitraryFieldShape, blockstorage/volume_type_access_contract_test.go:TestGetVolumeTypeAccessUsesReturnedIDAndOwnsRawAccessRowsWithoutProjectionOrPaging, connection_volume_type_access_test.go:TestConnectionVolumeTypeAccessOriginalsPrecedeCachedCinderAndPreserveRawAcknowledgements.

  • A complete all-object array, including empty[], may additionally project into owned RawResource rows with every unknown field and response metadata. Any nonobject item disables the entire convenience projection while the full successful Value remains. Value, Accesses, Observed and Resolved do not alias. Tests: blockstorage/volume_type_access_contract_test.go:TestGetVolumeTypeAccessUsesReturnedIDAndOwnsRawAccessRowsWithoutProjectionOrPaging, blockstorage/volume_type_access_contract_test.go:TestGetVolumeTypeAccessPreservesMissingAndEveryArbitraryFieldShape, connection_volume_type_access_test.go:TestConnectionVolumeTypeAccessOriginalsPrecedeCachedCinderAndPreserveRawAcknowledgements.

  • Admit every final valid HTTP100..399 under the direct source exception policy, independently from ordinary lookup200. Then require a UTF8 JSON object: empty204, malformed JSON or nonobject envelopes fail with actual admitted proof and no logical Value/Accesses; rejected>=400 remains native failure. Tests: blockstorage/volume_type_access_contract_test.go:TestVolumeTypeAccessAdmitsSub400StatusWhileAccessJSONRemainsRequired, blockstorage/volume_type_access_transport_test.go:TestGetVolumeTypeAccessInvalidJSONAndTopLevelShapeRetainOnlyActualAccessProof.

  • Direct calls capture selected Cinder facts and canonical header copies before original options. Connection prepares originals once before recorded location and cached Cinder selection. Owned option/location snapshots and the same reader persist through both phases; source drift is sticky and blocks subsequent work. Tests: blockstorage/volume_type_access_options_test.go:TestVolumeTypeAccessOriginalOptionsOwnLocationAndSliceAcrossBothPhysicalStages, blockstorage/volume_type_access_options_test.go:TestVolumeTypeAccessOriginalSourceViolationIsTerminalBeforeRestoringOption, blockstorage/volume_type_access_options_test.go:TestVolumeTypeAccessPreflightContextRoleAndOptionsStopBeforeLookup, blockstorage/volume_type_access_options_test.go:TestVolumeTypeAccessMalformedCallerLocationKeepsLookupProofWithoutPhysicalError, connection_volume_type_access_test.go:TestConnectionVolumeTypeAccessOwnsLocationFactoriesAndOriginalCallbackSlice, connection_volume_type_access_test.go:TestConnectionVolumeTypeAccessRecordedScopeSnapshotsBetweenStagesAndRefreshesNextCall, connection_volume_type_access_test.go:TestConnectionVolumeTypeAccessPreflightAndGetterFailuresKeepOuterOperationAndCause.

  • Physical lookup and second-phase evidence remain separate. Admitted body/header/status survive read, Close, cancellation and post-response source errors; native rejected responses preserve their own native evidence. Wrappers retain errors.Is/As, ctx.Err and context.Cause without replaying the SDK workflow. Tests: blockstorage/volume_type_access_transport_test.go:TestVolumeTypeAccessAcceptedReadCloseCancellationRetainsCorrectStageAndAllCauses, blockstorage/volume_type_access_transport_test.go:TestVolumeTypeAccessCurrentNativeRejectionNeverBorrowsSuppressedMemberOrLookupProof, blockstorage/volume_type_access_transport_test.go:TestVolumeTypeAccessSourceFactsRemainFrozenAfterLookupAndAcceptedSecondResponse, blockstorage/volume_type_access_transport_test.go:TestVolumeTypeAccessBlockedSecondStageCancellationKeepsLookupWithoutInventedPhaseProof, connection_volume_type_access_test.go:TestConnectionVolumeTypeAccessSecondStageProofSurvivesReadCloseCancellationSourceDriftAndRejection.

  • Native authentication and retry preserve live token behavior and fixed method/URL/body/response ownership. Retry changes to body/decoder/KeepResponseBody are rejected before altered resend. Ordinary native header and OkCodes updates remain allowed, while an actual status>=400 cannot become SDK success outside the original owned policy. Tests: blockstorage/volume_type_access_transport_test.go:TestVolumeTypeAccessNativeReauthenticationAndBoundedRetryKeepPayloadTargetAndLiveHeaders, blockstorage/volume_type_access_transport_test.go:TestVolumeTypeAccessNativeRetryCannotReplaceOwnedBodiesDecoderOrBroadenOriginalStatus, blockstorage/volume_type_access_transport_test.go:TestVolumeTypeAccessRedirectCannotChangeFixedSecondStageTargetOrMethod.

Python/Go differences:

  • Only this actual cloud helper is mapped to Cinder v3 under Gophercloud v2.15.0. Independent native/Proxy/v2 declarations, inherited Resource descriptors/session negotiation/cache and other Type workflows are not promoted by this row.
  • Python consumes a mutable returned Type and utils.urljoin coercion of its id. Go uses a fresh canonical response id that must be a safe nonempty UTF8 string URL segment; input identity is never inherited or used as a fallback route. Local target validation retains Resolved without borrowing HTTP200.
  • Lookup reuses the existing Go exact identity, six-descriptor view, owned location and canonical accepted200 reader policy. Its safe input routing, complete-URL pagination safety and fresh response-field rules are declared mappings; this access row does not claim full Resource runtime equivalence.
  • The direct access/action status gate preserves valid HTTP 100..399 rather than narrowing to native GET200/204/300 or action202. Fixed request origin, escaped path, exact query and method guards can block source-session redirect behavior before another exchange.
  • Go exposes independently owned physical response evidence and joined native/read/Close/context causes; Python raises its own SDK exception classes and returns its ordinary helper value. Accepted evidence is not proof of subsequent server completion.
  • Original caller options execute once from owned snapshots. Direct calls capture sources before originals; Connection runs originals before recorded location and service selection. Live native authentication/retry remains distinct from SDK-level replay, which is absent.
  • Python cast is a runtime no-op and present access fields may be arbitrary values. Go preserves finite valid UTF8 raw JSON, requiring a top-level object; its optional all-object RawResource projection adds no schema coercion, descriptors, location or pagination.
  • Python returns the selected untyped field or absent[]. Go returns Value plus optional Accesses and lookup/access proof. Nonarray or mixed arrays remain successful Value and do not fabricate partial row resources.
  • Raw access Value and row field JSON retain original numeric spelling and precision, while Python response.json decodes integers/floats before returning them; finite valid JSON and Go string semantics do not emulate every Python runtime value.
python:cloud/_block_storage/BlockStorageCloudMixin/add_volume_type_access

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk.Connection.AddVolumeTypeAccess

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.AddVolumeTypeAccess

  • Resolve the ordinary unfiltered exact Type once through the captured reader. Safe identities use member GET with lowercase is_public=none; clean compatible member400/403/404 can fall back to exact list without a name hint. Lookup errors and completed absence retain Resolved; no access/action request follows. Tests: blockstorage/volume_type_access_contract_test.go:TestVolumeTypeAccessCompletedAbsenceAndEarlyAmbiguityStopBeforeSecondStage, blockstorage/volume_type_access_contract_test.go:TestVolumeTypeAccessFallbackFindUsesNoneThenReturnedIDWithoutVisibilityQuery, connection_volume_type_access_test.go:TestConnectionVolumeTypeAccessLocalResolutionFailuresRetainLookupWithoutSecondStage.

  • Construct the queryless second route only from the actual returned canonical wire id. Missing, null, nonstring, empty or unsafe id is a local ErrInvalidOption with Resolved retained and no invented ResponseError; no input-ID seeding, coercion, refetch or Identity lookup occurs. Tests: blockstorage/volume_type_access_contract_test.go:TestVolumeTypeAccessRejectsInvalidCanonicalResponseIDLocallyAfterLookup, connection_volume_type_access_test.go:TestConnectionVolumeTypeAccessLocalResolutionFailuresRetainLookupWithoutSecondStage.

  • Post one queryless /types/{returnedID}/action body with the exact addProjectAccess nested project string. ProjectID is literal, including empty, nonexistent, control, Unicode, slash, query and percent characters; no project existence or Identity resolution. InvalidUTF8 project is a local error after Type lookup and before POST. Tests: blockstorage/volume_type_access_contract_test.go:TestVolumeTypeAccessActionsForwardLiteralProjectAndOpaqueAcknowledgement, blockstorage/volume_type_access_contract_test.go:TestVolumeTypeAccessInvalidUTF8ProjectIsLocalAfterResolvedType, connection_volume_type_access_test.go:TestConnectionVolumeTypeAccessOriginalsPrecedeCachedCinderAndPreserveRawAcknowledgements, connection_volume_type_access_test.go:TestConnectionVolumeTypeAccessLocalResolutionFailuresRetainLookupWithoutSecondStage.

  • Admit every final valid HTTP100..399 under the direct source exception policy, independently from ordinary lookup200. Accepted action bodies are opaque, including empty or nonJSON/nonUTF8 bytes; no JSON decode or membership refresh occurs. Rejected>=400 is a native terminal failure with its own evidence. Tests: blockstorage/volume_type_access_contract_test.go:TestVolumeTypeAccessAdmitsSub400StatusWhileAccessJSONRemainsRequired, blockstorage/volume_type_access_contract_test.go:TestVolumeTypeAccessActionsForwardLiteralProjectAndOpaqueAcknowledgement, connection_volume_type_access_test.go:TestConnectionVolumeTypeAccessOriginalsPrecedeCachedCinderAndPreserveRawAcknowledgements.

  • Direct calls capture selected Cinder facts and canonical header copies before original options. Connection prepares originals once before recorded location and cached Cinder selection. Owned option/location snapshots and the same reader persist through both phases; source drift is sticky and blocks subsequent work. Tests: blockstorage/volume_type_access_options_test.go:TestVolumeTypeAccessOriginalOptionsOwnLocationAndSliceAcrossBothPhysicalStages, blockstorage/volume_type_access_options_test.go:TestVolumeTypeAccessOriginalSourceViolationIsTerminalBeforeRestoringOption, blockstorage/volume_type_access_options_test.go:TestVolumeTypeAccessPreflightContextRoleAndOptionsStopBeforeLookup, blockstorage/volume_type_access_options_test.go:TestVolumeTypeAccessMalformedCallerLocationKeepsLookupProofWithoutPhysicalError, connection_volume_type_access_test.go:TestConnectionVolumeTypeAccessOwnsLocationFactoriesAndOriginalCallbackSlice, connection_volume_type_access_test.go:TestConnectionVolumeTypeAccessRecordedScopeSnapshotsBetweenStagesAndRefreshesNextCall, connection_volume_type_access_test.go:TestConnectionVolumeTypeAccessPreflightAndGetterFailuresKeepOuterOperationAndCause.

  • Physical lookup and second-phase evidence remain separate. Admitted body/header/status survive read, Close, cancellation and post-response source errors; native rejected responses preserve their own native evidence. Wrappers retain errors.Is/As, ctx.Err and context.Cause without replaying the SDK workflow. Tests: blockstorage/volume_type_access_transport_test.go:TestVolumeTypeAccessAcceptedReadCloseCancellationRetainsCorrectStageAndAllCauses, blockstorage/volume_type_access_transport_test.go:TestVolumeTypeAccessCurrentNativeRejectionNeverBorrowsSuppressedMemberOrLookupProof, blockstorage/volume_type_access_transport_test.go:TestVolumeTypeAccessSourceFactsRemainFrozenAfterLookupAndAcceptedSecondResponse, blockstorage/volume_type_access_transport_test.go:TestVolumeTypeAccessBlockedSecondStageCancellationKeepsLookupWithoutInventedPhaseProof, connection_volume_type_access_test.go:TestConnectionVolumeTypeAccessSecondStageProofSurvivesReadCloseCancellationSourceDriftAndRejection.

  • Native authentication and retry preserve live token behavior and fixed method/URL/body/response ownership. Retry changes to body/decoder/KeepResponseBody are rejected before altered resend. Ordinary native header and OkCodes updates remain allowed, while an actual status>=400 cannot become SDK success outside the original owned policy. Tests: blockstorage/volume_type_access_transport_test.go:TestVolumeTypeAccessNativeReauthenticationAndBoundedRetryKeepPayloadTargetAndLiveHeaders, blockstorage/volume_type_access_transport_test.go:TestVolumeTypeAccessNativeRetryCannotReplaceOwnedBodiesDecoderOrBroadenOriginalStatus, blockstorage/volume_type_access_transport_test.go:TestVolumeTypeAccessRedirectCannotChangeFixedSecondStageTargetOrMethod.

  • Return the actual accepted Applied acknowledgement proof without claiming membership change, completion or idempotency. Applied remains independently owned from Resolved; no verification, wait, rollback or SDK action replay occurs, including after accepted response I/O failures. Tests: blockstorage/volume_type_access_contract_test.go:TestVolumeTypeAccessActionsForwardLiteralProjectAndOpaqueAcknowledgement, connection_volume_type_access_test.go:TestConnectionVolumeTypeAccessOriginalsPrecedeCachedCinderAndPreserveRawAcknowledgements, connection_volume_type_access_test.go:TestConnectionVolumeTypeAccessSecondStageProofSurvivesReadCloseCancellationSourceDriftAndRejection.

Python/Go differences:

  • Only this actual cloud helper is mapped to Cinder v3 under Gophercloud v2.15.0. Independent native/Proxy/v2 declarations, inherited Resource descriptors/session negotiation/cache and other Type workflows are not promoted by this row.
  • Python consumes a mutable returned Type and utils.urljoin coercion of its id. Go uses a fresh canonical response id that must be a safe nonempty UTF8 string URL segment; input identity is never inherited or used as a fallback route. Local target validation retains Resolved without borrowing HTTP200.
  • Lookup reuses the existing Go exact identity, six-descriptor view, owned location and canonical accepted200 reader policy. Its safe input routing, complete-URL pagination safety and fresh response-field rules are declared mappings; this access row does not claim full Resource runtime equivalence.
  • The direct access/action status gate preserves valid HTTP 100..399 rather than narrowing to native GET200/204/300 or action202. Fixed request origin, escaped path, exact query and method guards can block source-session redirect behavior before another exchange.
  • Go exposes independently owned physical response evidence and joined native/read/Close/context causes; Python raises its own SDK exception classes and returns its ordinary helper value. Accepted evidence is not proof of subsequent server completion.
  • Original caller options execute once from owned snapshots. Direct calls capture sources before originals; Connection runs originals before recorded location and service selection. Live native authentication/retry remains distinct from SDK-level replay, which is absent.
  • The actual cloud project_id parameter maps to a literal Go string, including empty/nonexistent values. Independent Proxy Project Resource overloads are outside this row; Go rejects invalidUTF8 project locally after lookup to avoid JSON serializer replacement.
  • Python returns None after an accepted response and does not parse its body. Go adds Applied as opaque acknowledgement evidence; it does not expose a Changed/completion boolean or infer membership, verify, wait, rollback or retry the workflow.
python:cloud/_block_storage/BlockStorageCloudMixin/remove_volume_type_access

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk.Connection.RemoveVolumeTypeAccess

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.RemoveVolumeTypeAccess

  • Resolve the ordinary unfiltered exact Type once through the captured reader. Safe identities use member GET with lowercase is_public=none; clean compatible member400/403/404 can fall back to exact list without a name hint. Lookup errors and completed absence retain Resolved; no access/action request follows. Tests: blockstorage/volume_type_access_contract_test.go:TestVolumeTypeAccessCompletedAbsenceAndEarlyAmbiguityStopBeforeSecondStage, blockstorage/volume_type_access_contract_test.go:TestVolumeTypeAccessFallbackFindUsesNoneThenReturnedIDWithoutVisibilityQuery, connection_volume_type_access_test.go:TestConnectionVolumeTypeAccessLocalResolutionFailuresRetainLookupWithoutSecondStage.

  • Construct the queryless second route only from the actual returned canonical wire id. Missing, null, nonstring, empty or unsafe id is a local ErrInvalidOption with Resolved retained and no invented ResponseError; no input-ID seeding, coercion, refetch or Identity lookup occurs. Tests: blockstorage/volume_type_access_contract_test.go:TestVolumeTypeAccessRejectsInvalidCanonicalResponseIDLocallyAfterLookup, connection_volume_type_access_test.go:TestConnectionVolumeTypeAccessLocalResolutionFailuresRetainLookupWithoutSecondStage.

  • Post one queryless /types/{returnedID}/action body with the exact removeProjectAccess nested project string. ProjectID is literal, including empty, nonexistent, control, Unicode, slash, query and percent characters; no project existence or Identity resolution. InvalidUTF8 project is a local error after Type lookup and before POST. Tests: blockstorage/volume_type_access_contract_test.go:TestVolumeTypeAccessActionsForwardLiteralProjectAndOpaqueAcknowledgement, blockstorage/volume_type_access_contract_test.go:TestVolumeTypeAccessInvalidUTF8ProjectIsLocalAfterResolvedType, connection_volume_type_access_test.go:TestConnectionVolumeTypeAccessOriginalsPrecedeCachedCinderAndPreserveRawAcknowledgements, connection_volume_type_access_test.go:TestConnectionVolumeTypeAccessLocalResolutionFailuresRetainLookupWithoutSecondStage.

  • Admit every final valid HTTP100..399 under the direct source exception policy, independently from ordinary lookup200. Accepted action bodies are opaque, including empty or nonJSON/nonUTF8 bytes; no JSON decode or membership refresh occurs. Rejected>=400 is a native terminal failure with its own evidence. Tests: blockstorage/volume_type_access_contract_test.go:TestVolumeTypeAccessAdmitsSub400StatusWhileAccessJSONRemainsRequired, blockstorage/volume_type_access_contract_test.go:TestVolumeTypeAccessActionsForwardLiteralProjectAndOpaqueAcknowledgement, connection_volume_type_access_test.go:TestConnectionVolumeTypeAccessOriginalsPrecedeCachedCinderAndPreserveRawAcknowledgements.

  • Direct calls capture selected Cinder facts and canonical header copies before original options. Connection prepares originals once before recorded location and cached Cinder selection. Owned option/location snapshots and the same reader persist through both phases; source drift is sticky and blocks subsequent work. Tests: blockstorage/volume_type_access_options_test.go:TestVolumeTypeAccessOriginalOptionsOwnLocationAndSliceAcrossBothPhysicalStages, blockstorage/volume_type_access_options_test.go:TestVolumeTypeAccessOriginalSourceViolationIsTerminalBeforeRestoringOption, blockstorage/volume_type_access_options_test.go:TestVolumeTypeAccessPreflightContextRoleAndOptionsStopBeforeLookup, blockstorage/volume_type_access_options_test.go:TestVolumeTypeAccessMalformedCallerLocationKeepsLookupProofWithoutPhysicalError, connection_volume_type_access_test.go:TestConnectionVolumeTypeAccessOwnsLocationFactoriesAndOriginalCallbackSlice, connection_volume_type_access_test.go:TestConnectionVolumeTypeAccessRecordedScopeSnapshotsBetweenStagesAndRefreshesNextCall, connection_volume_type_access_test.go:TestConnectionVolumeTypeAccessPreflightAndGetterFailuresKeepOuterOperationAndCause.

  • Physical lookup and second-phase evidence remain separate. Admitted body/header/status survive read, Close, cancellation and post-response source errors; native rejected responses preserve their own native evidence. Wrappers retain errors.Is/As, ctx.Err and context.Cause without replaying the SDK workflow. Tests: blockstorage/volume_type_access_transport_test.go:TestVolumeTypeAccessAcceptedReadCloseCancellationRetainsCorrectStageAndAllCauses, blockstorage/volume_type_access_transport_test.go:TestVolumeTypeAccessCurrentNativeRejectionNeverBorrowsSuppressedMemberOrLookupProof, blockstorage/volume_type_access_transport_test.go:TestVolumeTypeAccessSourceFactsRemainFrozenAfterLookupAndAcceptedSecondResponse, blockstorage/volume_type_access_transport_test.go:TestVolumeTypeAccessBlockedSecondStageCancellationKeepsLookupWithoutInventedPhaseProof, connection_volume_type_access_test.go:TestConnectionVolumeTypeAccessSecondStageProofSurvivesReadCloseCancellationSourceDriftAndRejection.

  • Native authentication and retry preserve live token behavior and fixed method/URL/body/response ownership. Retry changes to body/decoder/KeepResponseBody are rejected before altered resend. Ordinary native header and OkCodes updates remain allowed, while an actual status>=400 cannot become SDK success outside the original owned policy. Tests: blockstorage/volume_type_access_transport_test.go:TestVolumeTypeAccessNativeReauthenticationAndBoundedRetryKeepPayloadTargetAndLiveHeaders, blockstorage/volume_type_access_transport_test.go:TestVolumeTypeAccessNativeRetryCannotReplaceOwnedBodiesDecoderOrBroadenOriginalStatus, blockstorage/volume_type_access_transport_test.go:TestVolumeTypeAccessRedirectCannotChangeFixedSecondStageTargetOrMethod.

  • Return the actual accepted Applied acknowledgement proof without claiming membership change, completion or idempotency. Applied remains independently owned from Resolved; no verification, wait, rollback or SDK action replay occurs, including after accepted response I/O failures. Tests: blockstorage/volume_type_access_contract_test.go:TestVolumeTypeAccessActionsForwardLiteralProjectAndOpaqueAcknowledgement, connection_volume_type_access_test.go:TestConnectionVolumeTypeAccessOriginalsPrecedeCachedCinderAndPreserveRawAcknowledgements, connection_volume_type_access_test.go:TestConnectionVolumeTypeAccessSecondStageProofSurvivesReadCloseCancellationSourceDriftAndRejection.

Python/Go differences:

  • Only this actual cloud helper is mapped to Cinder v3 under Gophercloud v2.15.0. Independent native/Proxy/v2 declarations, inherited Resource descriptors/session negotiation/cache and other Type workflows are not promoted by this row.
  • Python consumes a mutable returned Type and utils.urljoin coercion of its id. Go uses a fresh canonical response id that must be a safe nonempty UTF8 string URL segment; input identity is never inherited or used as a fallback route. Local target validation retains Resolved without borrowing HTTP200.
  • Lookup reuses the existing Go exact identity, six-descriptor view, owned location and canonical accepted200 reader policy. Its safe input routing, complete-URL pagination safety and fresh response-field rules are declared mappings; this access row does not claim full Resource runtime equivalence.
  • The direct access/action status gate preserves valid HTTP 100..399 rather than narrowing to native GET200/204/300 or action202. Fixed request origin, escaped path, exact query and method guards can block source-session redirect behavior before another exchange.
  • Go exposes independently owned physical response evidence and joined native/read/Close/context causes; Python raises its own SDK exception classes and returns its ordinary helper value. Accepted evidence is not proof of subsequent server completion.
  • Original caller options execute once from owned snapshots. Direct calls capture sources before originals; Connection runs originals before recorded location and service selection. Live native authentication/retry remains distinct from SDK-level replay, which is absent.
  • The actual cloud project_id parameter maps to a literal Go string, including empty/nonexistent values. Independent Proxy Project Resource overloads are outside this row; Go rejects invalidUTF8 project locally after lookup to avoid JSON serializer replacement.
  • Python returns None after an accepted response and does not parse its body. Go adds Applied as opaque acknowledgement evidence; it does not expose a Changed/completion boolean or infer membership, verify, wait, rollback or retry the workflow.
python:cloud/_block_storage/BlockStorageCloudMixin/update_volume

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk.Connection.UpdateVolume

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.UpdateVolume

  • Resolve one ordinary unfiltered exact volume through the captured reader, retaining the selected original raw JSON row. Compatible clean member400/403/404 can fall back to name-hinted exact list; completed absence, duplicate second match and lookup schema/status errors stop before mutation. Bind only the actual safe canonical returned string ID and retain Resolved on local target errors. Tests: blockstorage/volume_mutations_contract_test.go:TestVolumeMutationsOrdinaryFindFallbackUsesNameQueryAndActualReturnedID, blockstorage/volume_mutations_contract_test.go:TestVolumeMutationsCompletedAbsenceAndSecondMatchAmbiguityStopBeforeMutation, blockstorage/volume_mutations_transport_test.go:TestVolumeMutationLookupSchemaAndUnexpectedNativeStatusStopBeforeMutation, blockstorage/volume_mutations_contract_test.go:TestVolumeMutationsRejectInvalidActualCanonicalIDLocallyWithResolvedProof, connection_volume_mutations_test.go:TestConnectionVolumeMutationsLocalTargetAndLocationFailuresKeepLookupWithoutMutation, connection_volume_mutations_test.go:TestConnectionVolumeMutationsOriginalsPrecedeCachedCinderAndBindActualResponseID.

  • Supply every writable field from the actual37 Volume Body descriptors through SDK-owned typed/raw options. Concrete fields override raw Fields; Go map wire keys win normalized aliases. Canonical name/description presence wins display aliases and selected falsey values are dropped. Preserve nullable/empty raw fields, ignore unknown inputs and source_replica, reject id/runtime route controls, and inject no creation defaults. Tests: blockstorage/volume_mutations_contract_test.go:TestUpdateVolumeForwardsAllKnownBodyAttributesWithoutCreationDefaults, blockstorage/volume_mutations_contract_test.go:TestUpdateVolumeWireAliasesAndTypedAttributesHaveDeterministicPrecedence, blockstorage/volume_mutations_contract_test.go:TestUpdateVolumeDropsFalseyCloudNamesAndIgnoresUnknownAttributes, blockstorage/volume_mutations_options_test.go:TestVolumeMutationPreflightContextRoleCallbacksAndProtectedFieldsStopBeforeHTTP.

  • Compare requested canonical raw values with selected wire-order prior state, using recursive Python boolean/number equality, object order independence, ordered lists and the declared exact-decimal boundary. Equal assignments retain original raw values; absent differs explicit null. Empty/equal/unknown-only updates skip PUT and leave Applied nil with independently owned logical lookup-derived results. Tests: blockstorage/volume_mutations_contract_test.go:TestUpdateVolumeNoOpPreservesOriginalRawRecursivePythonEquality, blockstorage/volume_mutations_contract_test.go:TestUpdateVolumeSendsOnlyDirtyFieldsForStringNumberListOrderAndExactDecimals, blockstorage/volume_mutations_contract_test.go:TestUpdateVolumeAbsentKnownFieldVersusExplicitNullIsDirty, blockstorage/volume_mutations_contract_test.go:TestUpdateVolumeDirtyComparisonConsumesLookupAliasesInActualWireOrder, connection_volume_mutations_test.go:TestConnectionUpdateVolumeNoOpKeepsLookupAndSkipsMutation.

  • Build the complete proposed descriptor/location view before PUT so invalid known conversions fail locally with Resolved and no Applied. Serialize dirty raw values without descriptor coercion. Move dirty scheduler hints outside volume only when truthy; dirty falsey hints still send volume{} and a nonobject raw hint may have an empty dictionary descriptor view. Tests: blockstorage/volume_mutations_contract_test.go:TestUpdateVolumeProposedDescriptorFailureIsLocalBeforePUT, blockstorage/volume_mutations_contract_test.go:TestUpdateVolumeSendsOnlyDirtyFieldsForStringNumberListOrderAndExactDecimals, blockstorage/volume_mutations_contract_test.go:TestUpdateVolumeSchedulerHintsDirtyFalseyValuesStillCommitEmptyVolume, connection_volume_mutations_test.go:TestConnectionVolumeMutationsLocalTargetAndLocationFailuresKeepLookupWithoutMutation.

  • Merge recognized fields from canonical volume or flat object responses into owned prior/request state; omitted fields remain and returned ID is only a result attribute. Accepted empty/malformed UTF8 JSON is tolerated; valid wrong shapes, invalid UTF8 or returned descriptor failures keep Applied and reject atomic Volume/Value. Unknown response fields are ignored while prior unknown raw evidence remains; all results and lookup/response proofs own their bytes. Tests: blockstorage/volume_mutations_contract_test.go:TestUpdateVolumePartialAndFlatResponsesMergeRequestedPriorStateAtomically, blockstorage/volume_mutations_contract_test.go:TestUpdateVolumeAcceptedEmptyAndMalformedJSONKeepRequestedMergedState, blockstorage/volume_mutations_contract_test.go:TestUpdateVolumeValidWrongShapesAndInvalidUTF8RetainAppliedWithoutLogicalResult, blockstorage/volume_mutations_contract_test.go:TestUpdateVolumeReturnedDescriptorFailureIsPhysicalAndAtomic, connection_volume_mutations_test.go:TestConnectionVolumeMutationsOriginalsPrecedeCachedCinderAndBindActualResponseID.

  • Run original option callbacks once from owned slices/pointers/maps/rawJSON, with direct source capture before originals and Connection originals before cached Cinder v3 selection. Snapshot complete configured/recorded scope after originals and before lookup; later authentication scope changes do not alter this call location or defaults. Factories/preparers own reusable policies independently of caller or retained callback mutations. Tests: blockstorage/volume_mutations_options_test.go:TestVolumeMutationPrepareDefaultsAndFactoriesOwnCompleteReusablePolicies, blockstorage/volume_mutations_options_test.go:TestVolumeMutationOriginalOptionsOwnSlicesPointersFieldsAndHeadersAcrossBothStages, connection_volume_mutations_test.go:TestConnectionVolumeMutationsOwnFactoryAndRetainedCallbackState, blockstorage/volume_mutations_options_test.go:TestVolumeMutationRecordedScopeSnapshotsAfterOriginalsBeforeLookup, connection_volume_mutations_test.go:TestConnectionVolumeMutationsRecordedScopeIsCapturedAfterOriginalsThroughMutation, connection_volume_mutations_test.go:TestConnectionVolumeMutationsOriginalsPrecedeCachedCinderAndBindActualResponseID.

  • Validate context/client role/options before execution and preserve outer operation, original failures, context.Err and custom cancellation cause. Provider/endpoint/resource base/type/microversion drift is sticky across callbacks and accepted physical stages. Local source/location/target/proposed-field errors never borrow prior HTTP200; cancellation of a blocked mutation retains lookup without invented Applied. Tests: blockstorage/volume_mutations_options_test.go:TestVolumeMutationPreflightContextRoleCallbacksAndProtectedFieldsStopBeforeHTTP, connection_volume_mutations_test.go:TestConnectionVolumeMutationsPreflightAndGetterFailuresKeepOuterOperationAndCause, blockstorage/volume_mutations_options_test.go:TestVolumeMutationOriginalSourceChangeIsTerminalBeforeRestoringCallback, blockstorage/volume_mutations_transport_test.go:TestVolumeMutationSourceFactsStayFrozenAfterAcceptedLookupOrMutation, blockstorage/volume_mutations_transport_test.go:TestVolumeMutationBlockedHTTPStageCancellationRetainsLookupWithoutInventedApplied, connection_volume_mutations_test.go:TestConnectionVolumeMutationsLocalTargetAndLocationFailuresKeepLookupWithoutMutation.

  • Send only the bound queryless PUT with original admitted100..399 policy and fixed method/URL/body/response ownership. Preserve live native authentication and caller-configured native retry without workflow replay, refresh or rollback; native hook code expansion never admits actual>=400. Accepted read/Close/cancellation/source errors keep current Applied and joined causes; native/transport rejection keeps its own evidence and never borrows suppressed member or prior lookup proof. Redirect guard blocks a changed target before credentials are sent. Tests: blockstorage/volume_mutations_transport_test.go:TestVolumeMutationNativeReauthAndBoundedRetryPreservePayloadTargetAndLiveHeaders, blockstorage/volume_mutations_transport_test.go:TestVolumeMutationNativeRetryProtectsOwnedBodyDecoderAndOriginalAcceptedStatus, blockstorage/volume_mutations_transport_test.go:TestVolumeMutationRedirectCannotChangeFixedTargetMethodOrSendSharedCredentials, blockstorage/volume_mutations_transport_test.go:TestVolumeMutationAcceptedReadCloseCancellationRetainsCurrentStageAndAllCauses, blockstorage/volume_mutations_transport_test.go:TestVolumeMutationCurrentNativeRejectionNeverBorrowsSuppressedMemberOrLookupProof, connection_volume_mutations_test.go:TestConnectionVolumeMutationsAcceptedAndRejectedSecondStageProofStaysDistinct.

Python/Go differences:

  • Only this actual cloud declaration is mapped to selected Cinder v3 under pinned Gophercloud v2.15.0. Independent native/Proxy/v2 operations, inherited Resource state/session/cache/microversion negotiation and other workflows retain separate support status; this row is not a full SDK completion claim.
  • Go uses one fresh canonical lookup result and validates an actual safe nonempty string ID. Python can retain a seeded mutable Resource ID and utils.urljoin coercion, including missing/falsey or route-changing values; local Go target validation retains Resolved without borrowing HTTP200.
  • Ordinary lookup reuses existing Go exact identity/name, safe list-only input routing, nullable descriptor/location view, fixed canonical GET200 and continuation policies. These declared mappings do not establish inherited generic Resource equivalence.
  • Source v3 mutation raise_from_response status<400 maps to valid HTTP100..399, independently of lookup200 and native mutation200. Informational exposure follows net/http. Fixed origin/escaped-path/query/method guards intentionally block redirects that alter the bound request.
  • Go adds independently owned lookup and mutation body/header/status evidence with joined native/read/Close/context causes and OperationError identity. Applied is acknowledgement evidence, not proof of changed/completed cloud state; rejected/local failures do not borrow prior success proof.
  • Original SDK options are owned and applied once. Direct calls capture source before originals; Connection applies originals before CurrentLocation/getter and uses cached Cinder v3. Scope is frozen for the call while authentication/native retry stays live; no SDK workflow replay occurs.
  • Python update checks configured proxy v3 after lookup and bootable can follow configured v2/v3. Go exposes the selected v3 contract, captures the chosen microversion, and does not perform generic session negotiation; a direct ServiceClient alone cannot prove configured API version.
  • The actual cloud update has no valid_kwargs decorator and recognizes all37 Volume Body descriptors. Go accepts the36 nonidentity writable descriptors/aliases with raw nullable JSON; id/runtime route controls are rejected rather than mutating Resource identity/request policy. Unknown inputs are ignored, including creation-only source_replica.
  • Input Go maps use deterministic wire-name precedence and concrete-field precedence; Python kwargs use insertion order. Selected lookup/response JSON uses last textual alias order, which differs from interleaved duplicate keys collapsed by Python JSON loading. Known fields compare and serialize raw, rather than normalized descriptor values.
  • Go exact-decimal recursive boolean/number equality and truthiness differ from Python JSON float rounding/underflow and arbitrary Python objects. No-op equal assignment retains original raw fields. Ordinary JSON descriptor conversion reuses the declared search view rather than native typed Volume extraction.
  • Source partial/flat response merge and empty/malformed JSON ValueError tolerance are preserved with independently owned prior/request/server state. Go rejects invalidUTF8 explicitly, retains prior unknown raw fields as proof extension, ignores unknown response fields, and commits logical Volume/Value atomically rather than exposing a partially mutated shared Resource.
python:cloud/_block_storage/BlockStorageCloudMixin/set_volume_bootable

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk.Connection.SetVolumeBootable

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.SetVolumeBootable

  • Resolve one ordinary unfiltered exact volume using the same captured member/list reader. Compatible member400/403/404 fallback uses the ordinary name hint; duplicate second match stops before unused tail/continuation. Lookup schema/unexpected status failures do not proceed to action or trigger a new lookup. Tests: blockstorage/volume_mutations_contract_test.go:TestVolumeMutationsOrdinaryFindFallbackUsesNameQueryAndActualReturnedID, blockstorage/volume_mutations_contract_test.go:TestVolumeMutationsCompletedAbsenceAndSecondMatchAmbiguityStopBeforeMutation, blockstorage/volume_mutations_transport_test.go:TestVolumeMutationLookupSchemaAndUnexpectedNativeStatusStopBeforeMutation, connection_volume_mutations_test.go:TestConnectionVolumeMutationsOriginalsPrecedeCachedCinderAndBindActualResponseID.

  • Require the actual canonical response ID to be a safe nonempty UTF8 string URL segment; no input-ID seed or shortcut route. Completed absence is ErrNotFound and unsafe/missing/untyped IDs are local ErrInvalidOption with Resolved retained and no Applied. Owned location errors remain local and do not borrow admitted lookup proof. Tests: blockstorage/volume_mutations_contract_test.go:TestVolumeMutationsRejectInvalidActualCanonicalIDLocallyWithResolvedProof, connection_volume_mutations_test.go:TestConnectionVolumeMutationsLocalTargetAndLocationFailuresKeepLookupWithoutMutation.

  • Nil bootable selects true and explicit false serializes unchanged in os-set_bootable.bootable. Accept the selected source100..399 acknowledgement as opaque bytes, including empty, nonJSON and binary bodies, irrespective of current volume status. Expose Applied evidence only; do not parse responseJSON, change lookup fields, refresh, wait, verify, rollback or infer a Changed/completed flag. Tests: blockstorage/volume_mutations_contract_test.go:TestSetVolumeBootableDefaultTrueExplicitFalseAndOpaqueSub400Acknowledgement, connection_volume_mutations_test.go:TestConnectionVolumeMutationsOriginalsPrecedeCachedCinderAndBindActualResponseID, blockstorage/volume_mutations_transport_test.go:TestVolumeMutationNativeReauthAndBoundedRetryPreservePayloadTargetAndLiveHeaders.

  • Own bool pointers, location and original callback slice across reusable factories/preparers and retained callback mutation. Run each original once; direct source capture precedes originals while Connection applies originals before selecting cached Cinder v3. A complete replacement nil flag reapplies default true and explicit false remains exact. Tests: blockstorage/volume_mutations_options_test.go:TestVolumeMutationPrepareDefaultsAndFactoriesOwnCompleteReusablePolicies, blockstorage/volume_mutations_options_test.go:TestVolumeMutationOriginalOptionsOwnSlicesPointersFieldsAndHeadersAcrossBothStages, connection_volume_mutations_test.go:TestConnectionVolumeMutationsOwnFactoryAndRetainedCallbackState, connection_volume_mutations_test.go:TestConnectionVolumeMutationsOriginalsPrecedeCachedCinderAndBindActualResponseID.

  • Snapshot complete configured/recorded current scope after original options and before lookup, using an owned per-call location without changing Connection defaults. Authentication scope changes between lookup and action do not recompute this call location; actual volume project/zone still follow owned view rules. Tests: blockstorage/volume_mutations_options_test.go:TestVolumeMutationRecordedScopeSnapshotsAfterOriginalsBeforeLookup, connection_volume_mutations_test.go:TestConnectionVolumeMutationsRecordedScopeIsCapturedAfterOriginalsThroughMutation, connection_volume_mutations_test.go:TestConnectionVolumeMutationsOwnFactoryAndRetainedCallbackState.

  • Reject invalid context/service role/nil or failed callbacks before HTTP and preserve outer operation plus custom cancellation/original/getter causes. Provider/endpoint/resource base/type/microversion source drift is terminal before any restoring callback or later action; accepted source drift retains its current physical stage. Tests: blockstorage/volume_mutations_options_test.go:TestVolumeMutationPreflightContextRoleCallbacksAndProtectedFieldsStopBeforeHTTP, connection_volume_mutations_test.go:TestConnectionVolumeMutationsPreflightAndGetterFailuresKeepOuterOperationAndCause, blockstorage/volume_mutations_options_test.go:TestVolumeMutationOriginalSourceChangeIsTerminalBeforeRestoringCallback, blockstorage/volume_mutations_transport_test.go:TestVolumeMutationSourceFactsStayFrozenAfterAcceptedLookupOrMutation.

  • Retain completed lookup and admitted opaque action proof independently on read/Close/context.Cause/source errors. Native/transport action rejection never borrows earlier suppressed member400/403/404 or lookup200 as successful action evidence. A blocked action canceled before response retains lookup and custom cause without inventing Applied. Tests: blockstorage/volume_mutations_transport_test.go:TestVolumeMutationAcceptedReadCloseCancellationRetainsCurrentStageAndAllCauses, blockstorage/volume_mutations_transport_test.go:TestVolumeMutationCurrentNativeRejectionNeverBorrowsSuppressedMemberOrLookupProof, connection_volume_mutations_test.go:TestConnectionVolumeMutationsAcceptedAndRejectedSecondStageProofStaysDistinct, blockstorage/volume_mutations_transport_test.go:TestVolumeMutationBlockedHTTPStageCancellationRetainsLookupWithoutInventedApplied.

  • Preserve the bound queryless POST /volumes/id/action through native reauthentication and caller-native retries with live headers/tokens. Request body and response decoder/retention stay library-owned; actual status>=400 is rejected even after native OkCodes expansion. Guard fixed origin/path/query/method against redirects, and do not replay the SDK lookup/workflow. Tests: blockstorage/volume_mutations_transport_test.go:TestVolumeMutationNativeReauthAndBoundedRetryPreservePayloadTargetAndLiveHeaders, blockstorage/volume_mutations_transport_test.go:TestVolumeMutationNativeRetryProtectsOwnedBodyDecoderAndOriginalAcceptedStatus, blockstorage/volume_mutations_transport_test.go:TestVolumeMutationRedirectCannotChangeFixedTargetMethodOrSendSharedCredentials.

Python/Go differences:

  • Only this actual cloud declaration is mapped to selected Cinder v3 under pinned Gophercloud v2.15.0. Independent native/Proxy/v2 operations, inherited Resource state/session/cache/microversion negotiation and other workflows retain separate support status; this row is not a full SDK completion claim.
  • Go uses one fresh canonical lookup result and validates an actual safe nonempty string ID. Python can retain a seeded mutable Resource ID and utils.urljoin coercion, including missing/falsey or route-changing values; local Go target validation retains Resolved without borrowing HTTP200.
  • Ordinary lookup reuses existing Go exact identity/name, safe list-only input routing, nullable descriptor/location view, fixed canonical GET200 and continuation policies. These declared mappings do not establish inherited generic Resource equivalence.
  • Source v3 mutation raise_from_response status<400 maps to valid HTTP100..399, independently of lookup200 and native mutation200. Informational exposure follows net/http. Fixed origin/escaped-path/query/method guards intentionally block redirects that alter the bound request.
  • Go adds independently owned lookup and mutation body/header/status evidence with joined native/read/Close/context causes and OperationError identity. Applied is acknowledgement evidence, not proof of changed/completed cloud state; rejected/local failures do not borrow prior success proof.
  • Original SDK options are owned and applied once. Direct calls capture source before originals; Connection applies originals before CurrentLocation/getter and uses cached Cinder v3. Scope is frozen for the call while authentication/native retry stays live; no SDK workflow replay occurs.
  • Python update checks configured proxy v3 after lookup and bootable can follow configured v2/v3. Go exposes the selected v3 contract, captures the chosen microversion, and does not perform generic session negotiation; a direct ServiceClient alone cannot prove configured API version.
  • Go publicly accepts bool values through an optional owned pointer with nil/defaulttrue and explicitfalse. Python annotations do not restrict runtime string/null/number/container action values; that dynamic input domain is outside the bool mapping.
  • Python returns None without parsing or verifying its acknowledgement. Go exposes Applied as opaque evidence without modifying resolved bootable or adding wait/timeout/refresh/completion semantics. Existing CreateVolume true-only readiness action and native zero-defaultfalse/status200 leaf remain separate unchanged APIs.
python:cloud/_block_storage/BlockStorageCloudMixin/get_volume_limits

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk.Connection.GetVolumeLimits

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.GetVolumeLimits

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.PrepareGetVolumeLimitsOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithGetVolumeLimitsOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithGetVolumeLimitsLocation

  • Empty NameOrID skips Identity entirely, including unused invalid clients, and makes one bodyless unfiltered Cinder limits GET. Authenticated scope is captured only for location; it never becomes an implicit project_id query. Tests: blockstorage/volume_limits_contract_test.go:TestGetVolumeLimitsDefaultSkipsIdentityAndDoesNotInferScopeQuery, connection_volume_limits_test.go:TestConnectionGetVolumeLimitsEmptyInputSkipsIdentityAndImplicitProjectFilter.

  • Every nonempty literal string, including an ID-looking or whitespace-only input, resolves the project before limits. No trim or inferred domain query occurs. Safe names/IDs try a member GET; unsafe path/space names use a name-hinted exact list as the documented Go routing boundary. Connection completes cached Identity v3 resolution before choosing cached Cinder v3. Tests: blockstorage/volume_limits_contract_test.go:TestGetVolumeLimitsTruthyInputResolvesIdentityBeforeLimitsWithoutTrimming, connection_volume_limits_test.go:TestConnectionGetVolumeLimitsOriginalsPrecedeIdentityResolutionAndCachedCinder.

  • Only clean direct native member400/403/404 can fall back. Accepted project decode/read/schema failures, wrapped retry-policy failures and other rejected statuses are terminal; no Cinder request follows. Rejected fallback member evidence is not relabeled as accepted Observed. Tests: blockstorage/volume_limits_contract_test.go:TestGetVolumeLimitsFallbackListMissingIDIsNullAndOwnsMergedPaging, blockstorage/volume_limits_transport_test.go:TestGetVolumeLimitsAcceptedProjectSchemaErrorsAreTerminalBeforeFallbackOrLimits, blockstorage/volume_limits_transport_test.go:TestGetVolumeLimitsNativeRetryProtectsBodyDecoderRetentionAndOriginalStatusPolicy, connection_volume_limits_test.go:TestConnectionGetVolumeLimitsStrictProjectErrorsNeverSelectCinder.

  • Actual project id remains arbitrary JSON, including explicit null/false/zero/empty/containers. Missing id after an accepted member, including tolerated malformed/empty JSON, preserves the source input seed in ID and marks SeededID without adding a raw server field. Missing list id is literal null with no seed. RequestedProjectID is an independent owned query snapshot. Tests: blockstorage/volume_limits_contract_test.go:TestGetVolumeLimitsMemberSeedIsExplicitAndNeverFabricatesRawProjectID, blockstorage/volume_limits_contract_test.go:TestGetVolumeLimitsFallbackListMissingIDIsNullAndOwnsMergedPaging, blockstorage/volume_limits_contract_test.go:TestGetVolumeLimitsRawProjectIDsUseRequestsTwoLevelQueryExpansion, blockstorage/volume_limits_contract_test.go:TestGetVolumeLimitsResultProofProjectAndNormalizedValueAreIndependent.

  • Project collection requires the canonical projects key and consumes ordinary object rows, wrapping a nonlist payload once. String id/name equality is exact. A second match raises ambiguity immediately before unused invalid rows/links; exhausted absence is ErrNotFound, and an empty page stops before unused continuation. No limits stage is published after failed find. Tests: blockstorage/volume_limits_contract_test.go:TestGetVolumeLimitsProjectAmbiguityStopsBeforeUnusedInvalidRowAndLink, blockstorage/volume_limits_contract_test.go:TestGetVolumeLimitsProjectCompletedAbsenceStopsBeforeLimitsAndUnusedEmptyPageLink, blockstorage/volume_limits_transport_test.go:TestGetVolumeLimitsAcceptedProjectSchemaErrorsAreTerminalBeforeFallbackOrLimits, connection_volume_limits_test.go:TestConnectionGetVolumeLimitsStrictProjectErrorsNeverSelectCinder.

  • Source Project list construction ignores raw self but rejects key-presence collisions with connection/microversion/_synchronized even for null/false and even in a nonmatching consumed row. Member response translation accepts the same ordinary fields. Each accepted failure retains only its actual current project page proof. Tests: blockstorage/volume_limits_source_edges_test.go:TestGetVolumeLimitsProjectListConstructorCollisionsDifferFromMemberResponseFields, blockstorage/volume_limits_contract_test.go:TestGetVolumeLimitsFallbackListMissingIDIsNullAndOwnsMergedPaging.

  • Project paging consumes top links by key presence before plural links, rel/href items lazily until a first exact next with present href, then falsey selected href falls through to body next/HTTP Link. Consumed invalid prefix fails; selected href leaves unused invalid tail unconsumed. Keystone links.next dictionary priority and RFC Link support are explicit Go compatibility repairs. Tests: blockstorage/volume_limits_source_edges_test.go:TestGetVolumeLimitsProjectLinksAreConsumedInOrderAndStopAtSelectedHref, blockstorage/volume_limits_contract_test.go:TestGetVolumeLimitsProjectCompletedAbsenceStopsBeforeLimitsAndUnusedEmptyPageLink, blockstorage/volume_limits_contract_test.go:TestGetVolumeLimitsFallbackListMissingIDIsNullAndOwnsMergedPaging.

  • Continuation preserves the source pop of old marker/limit and drop of advertised blank values, merges remaining advertised keys once while retaining omitted nonpagination fields, and adds no page limit or implicit marker request. Relative paging remains on the same origin/escaped collection path; canonical complete-URL cycles fail before duplicate physical requests and retain the actual admitted page. Tests: blockstorage/volume_limits_source_edges_test.go:TestGetVolumeLimitsProjectPagingRemovesPriorMarkerLimitAndDropsAdvertisedBlankValues, blockstorage/volume_limits_transport_test.go:TestGetVolumeLimitsProjectPagingRejectsUnsafeContinuationWithoutBorrowedProof, blockstorage/volume_limits_contract_test.go:TestGetVolumeLimitsFallbackListMissingIDIsNullAndOwnsMergedPaging.

  • Forward the completed raw project id as query data without action-path validation. Preserve Requests JSON-domain two-level iterable expansion: outer null omission, object-key iteration, nested list/object expansion, nested None spelling and deeper ordered Python repr. Literal strings/bools/arbitrary integers and parsed-float representation are covered; invalid documents return no partial query values. Tests: blockstorage/volume_limits_contract_test.go:TestGetVolumeLimitsRawProjectIDsUseRequestsTwoLevelQueryExpansion, internal/cloudfilter/query_test.go:TestRequestQueryValuesMatchesRequestsTwoLevelEncoding, internal/cloudfilter/query_test.go:TestRequestQueryValuesKeepsObjectOrderAndUsesReprOnlyAfterDoseqExpansion, internal/cloudfilter/query_test.go:TestRequestQueryValuesRetainsScalarJSONNumberAndStringDomain, internal/cloudfilter/query_test.go:TestObjectMembersAndRequestQueryValuesRejectInvalidDocumentsAtomically.

  • Factories and PrepareGetVolumeLimitsOptions own complete pointer/raw Location policy and are reusable. Original callbacks run once in the captured order from an owned option slice, with snapshots after each callback; caller and retained callback mutations cannot alter later policy or result. Preparation itself performs no HTTP. Tests: blockstorage/volume_limits_options_test.go:TestGetVolumeLimitsFactoriesAndPreparedOptionsOwnCompleteLocation, blockstorage/volume_limits_options_test.go:TestGetVolumeLimitsOriginalsRunOnceInCapturedOrderAndRetainedConfigIsIsolated, connection_volume_limits_test.go:TestConnectionGetVolumeLimitsOwnsFactoriesOriginalSliceAndRetainedLocation.

  • Direct calls capture required Cinder/Identity provider, endpoint, ResourceBase, role and microversion before original callbacks; observed source violation is sticky and prevents a restoring callback. Ordinary headers stay captured while auth tokens remain live. Context/input/role/reserved-header preflight and invalid originals stop before HTTP and retain the explicit outer GetVolumeLimits operation and causes. Tests: blockstorage/volume_limits_options_test.go:TestGetVolumeLimitsSelectedSourcesAreCapturedBeforeOriginalsAndViolationIsTerminal, blockstorage/volume_limits_options_test.go:TestGetVolumeLimitsPreflightCancellationAndInvalidSelectionsNeverSendHTTP, blockstorage/volume_limits_options_test.go:TestGetVolumeLimitsHeaderSnapshotsStayOwnedWhileProviderTokensRemainLive, connection_volume_limits_test.go:TestConnectionGetVolumeLimitsPreflightAndGetterErrorsKeepOuterOperationAndCause, internal/rest/guarded_response_test.go:TestDoJSONGuardedRejectsInitialSourceBeforeMarshalOrHTTP.

  • Connection prepares originals once before service getters, snapshots explicit/current location after originals before project lookup, and uses only required cached Identity/Cinder v3. Completed project and requested-ID proof survive Cinder getter error/custom cancellation without borrowed ResponseError. A later recorded authentication scope changes the next call, while this call keeps its own snapshot and live token. Tests: connection_volume_limits_test.go:TestConnectionGetVolumeLimitsOriginalsPrecedeIdentityResolutionAndCachedCinder, connection_volume_limits_test.go:TestConnectionGetVolumeLimitsProjectCompletesBeforeCinderGetterFailure, connection_volume_limits_test.go:TestConnectionGetVolumeLimitsCapturesRecordedScopeAfterOptionsBeforeProjectResolution, connection_volume_limits_test.go:TestConnectionGetVolumeLimitsOwnsFactoriesOriginalSliceAndRetainedLocation.

  • Preserve the already-selected Cinder microversion and consistent native version headers, including empty/3.0/3.38/3.39/3.60/symbolic latest, without auto-upgrade, project3.39 preflight or cap. Connection exact-version options remain numeric; an already-selected native symbolic version is preserved. Old singleton scope version policy remains independent. Tests: blockstorage/volume_limits_contract_test.go:TestGetVolumeLimitsPreservesSelectedMicroversionWithoutProjectUpgradeOrCap, connection_volume_limits_test.go:TestConnectionGetVolumeLimitsEmptyInputSkipsIdentityAndImplicitProjectFilter.

  • Final source GET admits valid HTTP100..399 and reads exactly once with raw owned query. Canonical limits object or flat object succeeds. Source JSON-ValueError tolerance accepts UTF8-valid empty/malformed JSON as bare nullable Limits, including physical204/304; valid wrong shapes/envelope/null, invalidUTF8 or descriptor failures reject atomically with current Observed proof. Tests: blockstorage/volume_limits_contract_test.go:TestGetVolumeLimitsAcceptedFlatAndMalformedJSONProduceOwnedNullableResource, blockstorage/volume_limits_contract_test.go:TestGetVolumeLimitsInvalidAcceptedShapesAndDescriptorsFailAtomicallyWithCurrentProof, connection_volume_limits_test.go:TestConnectionGetVolumeLimitsSeparatesLocalRejectedAndAcceptedFinalProof.

  • Normalized Value exposes the complete actual5 top/13 absolute/6 rate-group/8 rule nullable descriptor schema. Absent/null stays null; actual nested object{} yields complete nullable fields, but nonobject Resource values and null/scalar/list list rows become plain{}. Nonlist list descriptors wrap once. Untyped ID/name/next_available/unit/verb/regex/URI retain arbitrary JSON; unknown fields stay only in raw evidence. Tests: blockstorage/volume_limits_contract_test.go:TestGetVolumeLimitsNestedDescriptorsPreserveNullableShapesAndUntypedPrecision, blockstorage/volume_limits_contract_test.go:TestGetVolumeLimitsAcceptedFlatAndMalformedJSONProduceOwnedNullableResource.

  • Integer descriptors preserve Python bool and arbitrary precision integer, truncate the parsed finite IEEE float, accept unsigned Unicode16 decimal digit strings, map ordinary signed/space/container inputs to zero, and reject nondecimal digit or nonfinite float conversions. The shared audited descriptor helper is reused by the actual Volume size path; legacy strict IntegerJSON is unchanged. Tests: blockstorage/volume_limits_contract_test.go:TestGetVolumeLimitsNestedDescriptorsPreserveNullableShapesAndUntypedPrecision, blockstorage/volume_limits_contract_test.go:TestGetVolumeLimitsInvalidAcceptedShapesAndDescriptorsFailAtomicallyWithCurrentProof, blockstorage/volume_search_view_test.go:TestVolumeSearchViewDescriptorConversionsAndSourceSize, blockstorage/volume_search_view_test.go:TestVolumeSearchViewEagerErrorsAndDiscardedAlias.

  • Normalized/wire aliases follow parsed Python dictionary order after duplicate-key collapse preserves first insertion position with final value. Last consumed alias wins rather than last textual member; selected discarded aliases are not converted. Every parsed raw value owns its bytes independently. Tests: blockstorage/volume_limits_contract_test.go:TestGetVolumeLimitsAliasTraversalUsesCollapsedDictionaryInsertionOrder, internal/cloudfilter/query_test.go:TestObjectMembersKeepsDuplicateInsertionPositionAndOwnsEveryRawValue.

  • Top location keeps complete current/authenticated or explicit owned location, including Zone, and never infers foreign query or HTTP project/location/zone. Nested constructor location is null unless raw location survives with no recognized Body field, including recognized null. Nested self and truthy JSON connection fail; falsey connection and synchronized/microversion runtime values are consumed without becoming normalized fields. Invalid caller location after project is local with Project retained and no final response borrowed. Tests: blockstorage/volume_limits_contract_test.go:TestGetVolumeLimitsNestedLocationPresenceAndTopLocationHaveDifferentOwnershipRules, blockstorage/volume_limits_contract_test.go:TestGetVolumeLimitsFalseyNestedConstructorControlsDoNotBecomeBodyFields, blockstorage/volume_limits_contract_test.go:TestGetVolumeLimitsInvalidAcceptedShapesAndDescriptorsFailAtomicallyWithCurrentProof, blockstorage/volume_limits_options_test.go:TestGetVolumeLimitsInvalidOwnedLocationFailsLocallyAfterProjectWithoutFinalProof, connection_volume_limits_test.go:TestConnectionGetVolumeLimitsOwnsFactoriesOriginalSliceAndRetainedLocation, connection_volume_limits_test.go:TestConnectionGetVolumeLimitsCapturesRecordedScopeAfterOptionsBeforeProjectResolution, connection_volume_limits_test.go:TestConnectionGetVolumeLimitsSeparatesLocalRejectedAndAcceptedFinalProof.

  • Project raw fields/ID/requested ID, actual project member/pages, final Observed, raw Limits and normalized Value own independent raw bytes/headers/status. Logical Limits/Value are published together only after complete normalization and guard checks; accepted errors keep physical proof without partially publishing logical outputs. Tests: blockstorage/volume_limits_contract_test.go:TestGetVolumeLimitsResultProofProjectAndNormalizedValueAreIndependent, blockstorage/volume_limits_contract_test.go:TestGetVolumeLimitsInvalidAcceptedShapesAndDescriptorsFailAtomicallyWithCurrentProof, connection_volume_limits_test.go:TestConnectionGetVolumeLimitsOriginalsPrecedeIdentityResolutionAndCachedCinder.

  • Accepted member/list/final read, Close, source drift and custom context cancellation retain the correct current physical response and join all causes without SDK replay. Native rejected/transport/blocked-HTTP/getter/local errors do not borrow earlier accepted status or a suppressed fallback member. Error wrappers preserve errors.Is/As and the GetVolumeLimits operation. Tests: blockstorage/volume_limits_transport_test.go:TestGetVolumeLimitsAcceptedReadCloseCancellationOwnsCurrentStageAndJoinsEveryCause, blockstorage/volume_limits_transport_test.go:TestGetVolumeLimitsNativeRejectionAndTransportErrorsNeverBorrowEarlierProjectProof, blockstorage/volume_limits_transport_test.go:TestGetVolumeLimitsSelectedSourcesRemainFrozenAcrossBothAcceptedStages, blockstorage/volume_limits_transport_test.go:TestGetVolumeLimitsBlockedHTTPStageCancellationRetainsOnlyCompletedProject, connection_volume_limits_test.go:TestConnectionGetVolumeLimitsProjectCompletesBeforeCinderGetterFailure, connection_volume_limits_test.go:TestConnectionGetVolumeLimitsSeparatesLocalRejectedAndAcceptedFinalProof, internal/rest/guarded_response_test.go:TestDoJSONGuardedAcceptedEvidenceJoinsReadCloseSourceAndContextWithoutReplay.

  • Native authentication/retry remains live while exact method/target/query/bodyless decoder/retention and original accepted status policy remain owned. Source change during retry/reauth/backoff/shared-auth wait prevents physical resend, while permitted retry retains captured headers/live token. Native status expansion cannot turn actual>=400 into success or compatible fallback. Redirect target changes fail before credentials reach a changed route; no SDK wait/action/rollback/replay is introduced. Tests: blockstorage/volume_limits_transport_test.go:TestGetVolumeLimitsBothStagesHonorNativeReauthAndBoundedRetryWithLiveTokens, blockstorage/volume_limits_transport_test.go:TestGetVolumeLimitsNativeRetryProtectsBodyDecoderRetentionAndOriginalStatusPolicy, blockstorage/volume_limits_transport_test.go:TestGetVolumeLimitsRedirectCannotChangeFixedStageTargetOrForwardCredentials, internal/rest/guarded_response_test.go:TestDoJSONGuardedStopsSourceChangingNativeRetryBeforeResend, internal/rest/guarded_response_test.go:TestDoJSONGuardedStopsSourceChangingNativeReauthenticationBeforeResend, internal/rest/guarded_response_test.go:TestDoJSONGuardedChecksSourceAfterWaitingForLiveAuthentication, internal/rest/guarded_response_test.go:TestDoJSONGuardedExpandedNativeStatusKeepsActualRejectionAndSourceCause, internal/rest/guarded_response_test.go:TestDoJSONGuardedKeepsLiveAuthenticationAndOwnedRequestOnAllowedRetry, internal/rest/guarded_response_test.go:TestNewGuardedStopsSourceChangingNativeBackoffBeforePhysicalResend.

Python/Go differences:

  • Only the actual direct cloud get_volume_limits helper is mapped using selected Cinder/Identity v3 and Gophercloud v2.15.0. Independent Proxy/native/v2 declarations and generic Resource/session/adapter/cache responsibilities keep their separate review statuses; this row does not complete the full SDK.
  • Python nullable name_or_id maps to the explicit Go string request: empty skips lookup, every nonempty value resolves even if ID-looking. Go exact safe routing avoids path-like/whitespace member interpolation, rejects input invalidUTF8/controls locally, and introduces no caller builder/getter responsibility.
  • The source seeded Project member ID is retained explicitly as ID/SeededID when the response omits id, without inventing an actual raw response field. Explicit null/false/zero/container IDs and absent list ID stay raw; query identity is evidence of the requested filter, not server-confirmed limits ownership.
  • Raw project query encoding records ordinary Requests two-level JSON iterable expansion and deeper Python repr. Requests/urllib and Unicode/float representation are external runtime dependencies not pinned by the SDK commit; Go audited float repr/Unicode16 and arbitrary integer conversion boundaries are explicit.
  • Source project rel/href/top-next and marker/limit-pop/blank-drop behavior is retained. Keystone links.next dictionary support with priority over top next/HTTP Link and RFC Link url support repair actual pinned Resource bugs. Same-origin/escaped-path and complete-URL cycle guards, effective relative URL handling and canonical query merge are deliberate Go safety/transport mappings.
  • The selected native microversion is preserved without project3.39 preflight, upgrade or cap. Pinned Limits._max_microversion=3.39 caps server-discovery negotiation only when session default_microversion is absent; explicit Python session default is uncapped. Go does not emulate automatic Resource server discovery. Existing singleton project scopes and their numeric3.39+ requirement are independent.
  • Go adds independently owned physical Project/Observed/Pages, RequestedProjectID, raw Limits fields and normalized Value, with explicit context and joined error causes. Unknown raw fields and JSON number spelling are proof extensions; Python returns a mutable Resource and SDK exception classes.
  • Normalized nested Limits/Absolute/Rate/RateLimit preserves the nullable schema and ordinary JSON descriptor/constructor behavior, including duplicate-collapse insertion ordering and reserved-key distinctions. Go does not reproduce mutable Resource object identity, dirty caches or arbitrary nonJSON Python objects; configurable CPython integer digit limits and Unicode runtime are explicitly distinct.
  • Owned top location snapshots current configured/recorded authentication after original options and before lookup, with complete explicit override including Zone. Foreign query/raw response does not replace it. Direct ServiceClient defaults recover recorded scope without fabricating configured cloud/project names; Connection owns its existing CloudLocation model.
  • Connection originals run once before snapshot/cached service selection, and project resolution completes before Cinder getter. Direct capture occurs before originals. Ordinary headers are copied, provider auth stays live, and sticky source/fixed request guards prevent altered retries/redirects. Native caller retry remains separate from SDK workflow replay, wait or rollback, which is absent.
  • Valid HTTP100..399 acceptance and UTF8-valid empty/malformed JSON tolerance follow the direct source instead of narrowing to old native200 typed projection. Strict completeUTF8/object/envelope/descriptor checks and atomic logical publication retain actual physical errors; caller/getter/query failures do not borrow prior HTTP200.
python:cloud/_block_storage/BlockStorageCloudMixin/list_volume_snapshots

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk.Connection.ListVolumeSnapshots

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.ListVolumeSnapshots

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.PrepareVolumeSnapshotListOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeSnapshotListOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeSnapshotListLocation

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeSnapshotListFilters

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeSnapshotListDetailed

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeSnapshotListPagination

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeSnapshotListMaxItems

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeSnapshotListMicroversion

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeSnapshotListHeaders

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeSnapshotListExpression

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeSnapshotListAllowUnknownParams

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeSnapshotListConflictingAttrs

  • Cloud List defaults detailed/paginated true and reads /snapshots/detail to completion; explicit detailed false selects /snapshots and pagination false selects one page. Empty canonical snapshots[] succeeds as [] with a nonnil empty row slice and stops before unused continuation. No default page limit/maximum/version/expression or header beyond JSON Accept is invented. Tests: blockstorage/snapshot_read_contract_test.go:TestVolumeSnapshotReadListDefaultDetailedBasicAndCanonicalEmptyEOF, blockstorage/snapshot_read_contract_test.go:TestVolumeSnapshotReadZeroMaximumIsUnlimitedAndPaginationFalseStopsFirstPage, blockstorage/volume_snapshot_options_test.go:TestVolumeSnapshotPreparePreservesOmissionAndExplicitFalseZeroEmptyPolicies.

  • List separates the v3 QueryMapping server fields from ordered known Body-only local predicates; unknown keys and wire-only Body aliases are source-dropped. Proxy-bound all_projects uses truthiness, server alias precedence stays canonical, and late conflicting all_projects bypasses Proxy so raw false remains a query value. Tests: internal/cloudsnapshot/query_test.go:TestSnapshotListCompileSplitsServerQueryFromOrderedBodyPredicates, internal/cloudsnapshot/query_test.go:TestSnapshotListAllProjectsIsBoundBeforeLateAliasOverlay, blockstorage/snapshot_read_contract_test.go:TestVolumeSnapshotReadListSeparatesServerFiltersLocalSubsetsAndUnknownFields.

  • Resource controls use the final raw/conflicting overlay with typed controls taking precedence; Proxy paginated/expression were already bound and late collisions cannot be suppressed. Initial details/base_path/resource_type/self and late paginated/base_path/session/cls collisions fail locally. Late unknown route/expression controls and allow_unknown follow the source no-op domain. Tests: internal/cloudsnapshot/query_test.go:TestSnapshotListTypedControlsOverrideFinalRawValuesButKeepProxyStage, internal/cloudsnapshot/query_test.go:TestSnapshotListControlCollisionsDependOnActualBindingStage, connection_volume_snapshots_test.go:TestConnectionVolumeSnapshotRawListBindingCollisionsFailBeforeServiceSelection.

  • Falsey raw Filters are empty; truthy nonmapping, malformed raw bytes and unsupported dynamic controls reject atomically with ErrInvalidOption. Nil pointer omission differs from explicit invalid nil/empty RawMessage. Captured options/factories own all raw filters/conflicting attributes/headers/pointers and prepared policies are reusable. Tests: internal/cloudsnapshot/query_test.go:TestSnapshotListCompileRejectsMalformedRawAndUnsupportedDynamicControlsAtomically, internal/cloudsnapshot/query_test.go:TestSnapshotListCompiledPolicyOwnsRawQueryLocalControlsAndHeadersIndependently, blockstorage/volume_snapshot_options_test.go:TestVolumeSnapshotCompleteListFactoryOwnsRawHeadersPointersAndReturnedPolicies, blockstorage/volume_snapshot_options_test.go:TestVolumeSnapshotRawFactoriesPreserveExactJSONAndNilVersusEmptyBytes, blockstorage/volume_snapshot_options_test.go:TestVolumeSnapshotIndividualListFactoriesRemainIndependentAndLaterOptionsOverride.

  • Query encoding preserves raw ordinary Requests two-level iterable expansion, ordered object-key iteration, null omission, booleans/arbitrary integers/parsed floats and deeper Python repr without partial values on malformed input. Typed controls and raw filters serialize once to one physical query; repeated value order remains. Tests: internal/cloudsnapshot/query_test.go:TestSnapshotListQueryEncoderUsesTwoIterableLevelsAndFailsWithoutPartialValues, internal/cloudfilter/query_test.go:TestRequestQueryValuesMatchesRequestsTwoLevelEncoding, internal/cloudfilter/query_test.go:TestRequestQueryValuesKeepsObjectOrderAndUsesReprOnlyAfterDoseqExpansion.

  • Ordered local dictionary predicates preserve lazy missing=None, falsey actual rejection even for expected{}, recursive subset matching and Python boolean/number equality. Only reached keys/shapes are consumed; guards and context interrupts return no partial selection. Eager row descriptor construction happens before local exclusion. Tests: internal/cloudsnapshot/local_filter_test.go:TestSnapshotLocalFiltersUseMissingNoneTruthyDictionaryAndExactLeafEquality, internal/cloudsnapshot/local_filter_test.go:TestSnapshotLocalFiltersRetainParsedOrderAndDoNotConsumeUnusedShapeErrors, internal/cloudsnapshot/local_filter_test.go:TestSnapshotLocalFiltersOwnInputsBeforeGuardAndJoinContextWithSourceFailureAtomically, blockstorage/snapshot_read_contract_test.go:TestVolumeSnapshotReadListEagerDescriptorsFailBeforeLocalExclusionAndContinuation.

  • Canonical snapshots envelope is required; a nonarray payload wraps once as one source row. Full response JSON is parsed before row consumption; consumed nonobject/invalidUTF8/descriptor rows fail with current physical proof. self is source-discarded but remains raw evidence; list connection/microversion/_synchronized key presence including null collides, while member response fields do not become runtime controls. Tests: blockstorage/snapshot_read_contract_test.go:TestVolumeSnapshotReadListWrapsCanonicalSingletonAndRejectsInvalidCollections, blockstorage/snapshot_read_contract_test.go:TestVolumeSnapshotReadListConstructorControlsArePresenceSensitiveAndSelfIsIgnored, internal/cloudsnapshot/model_test.go:TestSnapshotModelListConstructorCollisionsDoNotBecomeMemberResponseControls.

  • max_items counts consumed raw rows including locally excluded rows; false/zero/null is unlimited, bool true counts one, fractional values compare numerically and negative maximum makes first HTTP/full JSON parse before stopping before first row. A max reached before same-page tail avoids its row errors; at page end it still consumes continuation/next response before the next raw-row check. Tests: internal/cloudsnapshot/query_test.go:TestSnapshotListMaximumKeepsBooleanFractionNegativeAndHugeExponentCounterSemantics, blockstorage/snapshot_read_contract_test.go:TestVolumeSnapshotReadMaxItemsCountsExcludedRowsAndStopsBeforeUnusedTail, blockstorage/snapshot_read_contract_test.go:TestVolumeSnapshotReadMaxItemsAtPageBoundaryStillFetchesAndParsesNextPage, blockstorage/snapshot_read_contract_test.go:TestVolumeSnapshotReadNegativeMaximumParsesResponseWithoutConsumingRows.

  • Pager selects top links by key presence before snapshots_links, consumes rel/href lazily, and stops at the first exact next with present href even falsey before top next/HTTP fallback. Consumed malformed prefix fails; unused tail is ignored. Snapshot does not add the separate Keystone links.next dictionary repair. Tests: internal/cloudsnapshot/pager_test.go:TestSnapshotPagerBodyLinksPrecedePluralNextAndHeaderWithoutDictionaryRepair, internal/cloudsnapshot/pager_test.go:TestSnapshotPagerConsumesMalformedPrefixButStopsAtFirstPresentHrefEvenFalsey.

  • Inherited HTTP Link url support is an explicit Go parser repair: quoted commas and last case-insensitive multi-relation next are supported with lazy validation. Continuation removes old marker/limit, drops advertised blanks, merges remaining keys once and keeps omitted nonpagination raw values. Truthy initial limit synthesizes a next request even on a short page from the last consumed untyped ID. Tests: internal/cloudsnapshot/pager_test.go:TestSnapshotPagerHTTPLinkRepairSupportsQuotedCommasLastNextAndLazyValidation, internal/cloudsnapshot/pager_test.go:TestSnapshotPagerContinuationKeepsRawQueryAndDropsOnlyOldPaginationAndAdvertisedBlanks, internal/cloudsnapshot/pager_test.go:TestSnapshotPagerTruthyInitialLimitSynthesizesShortPageAndUsesRawLastID, blockstorage/snapshot_read_pagination_test.go:TestVolumeSnapshotReadInitialLimitFollowsShortPageExcludedRawDictionaryMarker.

  • Same-marker equality retains parsed query array shape and Python bool/number equality. Complete canonical URL cycle checks preserve repeated-value order and reject origin/escaped path/traversal/userinfo/fragment/nonUTF8 continuation before resend. Pager owns body/query/next inputs and returns atomic failures. Tests: internal/cloudsnapshot/pager_test.go:TestSnapshotPagerAdvertisedMarkerEqualityKeepsParseQSArrayShape, internal/cloudsnapshot/pager_test.go:TestSnapshotPagerPageKeyCanonicalizesQueryButRejectsOriginEscapedPathAndTraversal, internal/cloudsnapshot/pager_test.go:TestSnapshotPagerOwnsInputsAndReturnsAtomicFailuresWithoutAnInventedResource, blockstorage/snapshot_read_pagination_test.go:TestVolumeSnapshotReadCanonicalURLCycleWithoutMarkerEqualityKeepsTwoPagesAtomically.

  • Explicit List expression repairs the pinned Proxy generator path by evaluating the full materialized normalized list after HTTP. Raw falsey legacy expression skips evaluation, but typed empty expression still reaches the engine and errors after completed pages. Arbitrary finite JSON expression results have no invented RawResource row association. Tests: internal/cloudsnapshot/query_test.go:TestSnapshotListFalseyFiltersAndLegacyExpressionKeepExplicitProjectionSeparate, blockstorage/snapshot_read_contract_test.go:TestVolumeSnapshotReadListExpressionRepairsGeneratorInputAfterCompleteMaterialization, blockstorage/snapshot_read_contract_test.go:TestVolumeSnapshotReadTypedEmptyListExpressionEvaluatesAfterCompleteList.

  • Per-call header/version policy owns canonical inputs, rejects invalid/reserved/inconsistent version headers and leaves selected native client/cached defaults unchanged. Explicit empty/symbolic microversions are preserved; no automatic3.65 negotiation or cap is performed by the supplied-client helper. Tests: internal/cloudread/policy_test.go:TestCloudReadPolicyCanonicalOverridesOwnInputsAndKeepSelectedSource, internal/cloudread/policy_test.go:TestCloudReadPolicyExplicitMicroversionsKeepEmptyAndSymbolicValues, internal/cloudread/policy_test.go:TestCloudReadPolicyRejectsInvalidHeadersAndVersionsAtomically, internal/cloudread/policy_test.go:TestCloudReadPolicyVersionOverrideRequiresConsistentCapturedHeaders, connection_volume_snapshots_test.go:TestConnectionVolumeSnapshotListControlsArePerCallAndDoNotChangeCachedDefaults.

  • Normalized Snapshot contains all16 actual nullable fields, retaining arbitrary JSON for untyped fields and excluding unknown/case-variant aliases from logical output. No implicit false/time/string/int native projection replaces null. RawResource retains actual unknown fields and number spelling independently. Tests: internal/cloudsnapshot/model_test.go:TestSnapshotModelHasSixteenNullableFieldsAndPreservesUntypedValues, internal/cloudsnapshot/model_test.go:TestSnapshotModelBoolStrIsNullableWithoutAnImplicitFalseDefault, blockstorage/snapshot_read_contract_test.go:TestVolumeSnapshotReadListMaterializesAllPagesAndOwnsRawAndNormalizedRows, connection_volume_snapshots_test.go:TestConnectionVolumeSnapshotOriginalOptionsPrecedeCachedCinderSelectionForAllEntries.

  • Ordinary descriptor conversion is eager at Resource constructor/cache refresh: strict nullable BoolStr, Python bool/arbitrary integer preservation, parsed finite IEEE float truncation and Unicode decimal-string integer conversion, nullable ordinary metadata dictionary. Parsed duplicate keys keep first insertion position with final value; selected alias wins in dictionary traversal order and discarded alias is not converted. Tests: internal/cloudsnapshot/model_test.go:TestSnapshotModelIntegerAndMetadataDescriptorsMatchOrdinaryResourceConversion, internal/cloudsnapshot/model_test.go:TestSnapshotModelAliasesUseParsedDuplicateCollapseAndFirstInsertionOrder, blockstorage/snapshot_read_contract_test.go:TestVolumeSnapshotReadListSelectedAliasConvertsOnlyFinalParsedDictionaryValue, blockstorage/snapshot_read_contract_test.go:TestVolumeSnapshotReadListEagerDescriptorsFailBeforeLocalExclusionAndContinuation.

  • Snapshot location is recomputed from the owned configured/authenticated scope and actual project descriptor, including empty/location-only rows. Falsey/equal project retains configured names; truthy foreign project keeps raw ID and clears names/domains. Zone is always null because Snapshot has no zone descriptor. Raw location/availability_zone cannot replace it; caller location errors remain local without fabricated response errors. Owned Location is validated before first HTTP, and Connection validates it before its Cinder getter. Tests: internal/cloudsnapshot/model_test.go:TestSnapshotModelRecomputesLocationFromProjectAndAlwaysUsesNullZone, internal/cloudsnapshot/model_test.go:TestSnapshotModelRejectsPhysicalShapeAndLocalLocationFailuresAtomicallyAndOwnsResult, connection_volume_snapshots_test.go:TestConnectionVolumeSnapshotRecordedScopeIsCapturedAfterOptionsBeforeGetterAndRetainedAcrossPages, connection_volume_snapshots_test.go:TestConnectionVolumeSnapshotExplicitLocationIsOwnedAndZoneIgnoredWithoutChangingDefaults.

  • Prepare/factories own full raw Location, pointer and collection policy; complete options replace earlier policy. Original callbacks run exactly once in captured slice order with independent snapshots after each callback. Nil context/options, canceled custom cause and callback failures stop without partial prepared policy or HTTP. Tests: blockstorage/volume_snapshot_options_test.go:TestVolumeSnapshotLocationFactoriesOwnEveryNullableComponentAndAreReusable, blockstorage/volume_snapshot_options_test.go:TestVolumeSnapshotWholeOptionsReplaceEarlierPolicyRatherThanMerging, blockstorage/volume_snapshot_options_test.go:TestVolumeSnapshotOriginalsRunOnceInCapturedOrderAndRetainedConfigsCannotAlterLaterPolicy, blockstorage/volume_snapshot_options_test.go:TestVolumeSnapshotPrepareRejectsNilAndCanceledContextBeforeOriginals, blockstorage/volume_snapshot_options_test.go:TestVolumeSnapshotPrepareNilOptionAndCallbackFailuresStopWithoutPartialPolicy, connection_volume_snapshots_test.go:TestConnectionVolumeSnapshotOriginalSliceAndRetainedOptionPointersCannotChangePreparedPolicy.

  • Direct workflows capture provider/endpoint/ResourceBase/type/microversion before originals and retain sticky source violations; ordinary headers remain snapshots while auth tokens stay live. Connection executes originals once before only cached Cinder v3 selection and captures current/explicit location before getter. Local callback/getter/preflight errors retain outer operation and custom causes without inventing physical proof. Tests: blockstorage/snapshot_read_transport_test.go:TestVolumeSnapshotReadOriginalOptionsOwnEachSnapshotAndSourceOrdinaryHeaders, blockstorage/snapshot_read_transport_test.go:TestVolumeSnapshotReadOriginalCallbackFailureJoinsSourceAndContextBeforeHTTP, internal/cloudread/policy_test.go:TestCloudReadPolicySourceChangeStaysStickyBeforeAnyPolicyCommit, internal/cloudread/policy_test.go:TestCloudReadPolicyCancellationRetainsCauseAndIsAtomic, connection_volume_snapshots_test.go:TestConnectionVolumeSnapshotOriginalOptionsPrecedeCachedCinderSelectionForAllEntries, connection_volume_snapshots_test.go:TestConnectionVolumeSnapshotPreflightOriginalAndGetterErrorsPreserveOuterOperationAndCause.

  • Each admitted physical page/member owns body/header/status; normalized Value, raw row and error proof own independent state. Read/Close/source drift/custom cancellation keep the actual current phase and all causes while logical outputs remain unpublished. Rejected later/blocked requests retain only earlier completed pages and never borrow an earlier successful or suppressed member response. Tests: blockstorage/snapshot_read_transport_test.go:TestVolumeSnapshotReadAcceptedReadCloseCancellationRetainsCurrentPhysicalStage, blockstorage/snapshot_read_transport_test.go:TestVolumeSnapshotReadAcceptedSourceFactsAreFrozenThroughBodyClose, blockstorage/snapshot_read_transport_test.go:TestVolumeSnapshotReadBlockedContinuationCancellationKeepsOnlyCompletedPage, blockstorage/snapshot_read_selection_test.go:TestVolumeSnapshotReadLookupFailureRetainsPagesButNeverSuppressedMemberProof, connection_volume_snapshots_test.go:TestConnectionVolumeSnapshotFailuresKeepOnlyActualPhysicalProofAndCustomCancellation.

  • Native reauth/retry remains live and bounded in fixtures while method/fixed route/query/bodyless decoder/body retention/original100..399 policy and source remain guarded. Expanded native400/403/404 is terminal with actual native status/body/header causes, not compatible fallback or admitted ResponseError. Redirect cannot forward credentials to an altered target. No SDK orchestration replay/wait/action/rollback is added. Tests: blockstorage/snapshot_read_transport_test.go:TestVolumeSnapshotReadNativeReauthRetryKeepLiveTokenAndOwnedSourceOnce, blockstorage/snapshot_read_transport_test.go:TestVolumeSnapshotReadNativeExpandedFallbackStatusIsTerminalOriginalPolicyRejection, blockstorage/snapshot_read_transport_test.go:TestVolumeSnapshotReadNativeRetryCannotReplaceBodyDecoderRetentionOrSource, blockstorage/snapshot_read_transport_test.go:TestVolumeSnapshotReadRedirectCannotSendTokenToChangedFixedTarget, internal/cloudread/policy_test.go:TestCloudReadPolicyOwnedWirePolicyKeepsLiveTokenAcrossNativeRetry, internal/cloudread/policy_test.go:TestCloudReadPolicySourceMutationInNativeRetryStopsBeforeResend.

Python/Go differences:

  • Only this actual direct BlockStorageCloudMixin helper is mapped using selected Cinder v3 and Gophercloud v2.15.0. Independent Proxy/native/v2/Resource/session/adapter/cache declarations retain separate reviews; full SDK is not complete.
  • Python default/overloaded/runtime arguments map to explicit Go request types and owned concrete With/Prepare options, not caller-implemented interface builders. Go accepts finite ordinary JSON and typed controls rather than arbitrary mutable Python Resource/custom runtime objects.
  • Logical normalized16-field nullable values, physical raw Resource/Observed/Pages and error proof are independently owned Go representations. Unknown raw fields and number spelling are evidence extensions; mutable Resource identity, stale dict cache and session memoization are not reproduced.
  • Ordinary source descriptor behavior and parsed dictionary duplicate/alias order are preserved. Go Unicode16 decimal tables and arbitrary integer policy do not reproduce configurable CPython integer digit limits; exact decimal truthiness/equality differs from Python float rounding/underflow. Untyped timestamps/IDs/names stay JSON rather than native typed leaf extraction.
  • Connected Snapshot location is recomputed including empty/location-only rows, using explicit/current recorded scope and raw project descriptor; zone remains null. Direct clients recover recorded auth without fabricating configured names. Go owns snapshots and rejects invalid policy locally rather than emulating dynamic Connection/session objects.
  • Go captures original source facts and ordinary headers before originals on direct calls; Connection prepares originals before cached Cinder getter. Native auth remains live, sticky source/fixed request/cause guards and atomic logical publication are explicit Go safety/proof extensions; no SDK replay/wait/rollback is introduced.
  • Source validHTTP100..399 and UTF8-valid empty/malformed member JSON tolerance are preserved instead of narrowing to native200. Go additionally requires complete valid UTF8 and JSON/object/envelope/descriptor shape on consumed data, preserves native rejected evidence and prevents expanded native>=400 from becoming success or fallback.
  • Selected native microversion is preserved, including symbolic/empty settings when supplied. Source Snapshot3.65 limit only caps absent-default server-discovery negotiation; Go does not automatically negotiate/cap/upgrade a supplied client. Explicit Connection version/range negotiation remains independent.
  • List retains source known-query/body-local split and inherited binding phases, including falsey filters, unknown drop, late conflicting attrs, all_projects aliases and counter/pagination timing. Dynamic controls are explicit Go bool/number/string/string-header JSON domains; allow_unknown remains a no-op and nil header omission does not claim an explicit nil-clear feature.
  • Inherited List expression is a deliberate generator repair: source Proxy passes a Resource generator directly to JMESPath, whereas Go evaluates completed normalized finite JSON after HTTP. Raw falsey legacy expression skips evaluation; typed empty expression reaches engine and can error after complete pages. Timing/results differ from pinned legacy generator path.
  • Paging keeps source lazy body links, marker/limit pop, blank-drop, raw ID synthesis and same-marker shape equality. Go repairs HTTP Link uri/url mismatch, resolves against effective URL, serializes canonical query once and guards origin/escaped collection path/complete URL cycles. It does not add Keystone links.next dictionary support to Snapshot.
  • Requests two-level JSON query expansion and deeper ordered Python repr are audited compatibility mappings. Requests/urllib/CPython float representation are dependencies not pinned by SDK commit; Go canonical key ordering and no duplicate query-only serialization are declared transport differences.
python:cloud/_block_storage/BlockStorageCloudMixin/search_volume_snapshots

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk.Connection.SearchVolumeSnapshots

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.SearchVolumeSnapshots

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.PrepareVolumeSnapshotSearchOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeSnapshotSearchOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeSnapshotSearchLocation

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeSnapshotSearchFilters

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeSnapshotSearchExpression

  • Cloud Search first completes ordinary detailed queryless List before name/ID or Filters selection, preserving source order/duplicates and all reached row/page/schema failures. A name/filter that excludes a malformed later row cannot hide eager constructor errors. Search status/project filters do not become server query. Tests: blockstorage/snapshot_read_selection_test.go:TestVolumeSnapshotReadSearchCompletesQuerylessListBeforeSelectionAndReturnsArbitraryExpression, blockstorage/snapshot_read_selection_test.go:TestVolumeSnapshotReadSearchDoesNotHideExcludedMalformedLaterRows, blockstorage/snapshot_read_contract_test.go:TestVolumeSnapshotReadListMaterializesAllPagesAndOwnsRawAndNormalizedRows, blockstorage/snapshot_read_contract_test.go:TestVolumeSnapshotReadListEagerDescriptorsFailBeforeLocalExclusionAndContinuation.

  • Identifier selection retains per-row exact ID/name or case-sensitive CPython glob matching, slash/newline/rune/classes/reversed ranges/unmatched bracket/literal backslash behavior and ordinary JSON-domain Python str/repr for nonstring fields. Empty input means no identifier restriction; missing/null differs from empty string. Tests: internal/cloudfilter/identifier_test.go:TestCloudFilterIdentifierPreservesPerRowExactGlobMatchesDuplicatesAndSourceOrder, internal/cloudfilter/identifier_test.go:TestCloudFilterGlobUsesCPythonRuneDotAllClassesAndLiteralBackslashes, internal/cloudfilter/identifier_test.go:TestCloudFilterIdentifiersUsePythonJSONDomainStringAndContainerRepresentation, internal/cloudfilter/identifier_test.go:TestCloudFilterMissingAndNullIdentifiersDifferFromEmptyStringsAndRemainCaseSensitive, blockstorage/snapshot_read_selection_test.go:TestVolumeSnapshotReadSearchCompletesQuerylessListBeforeSelectionAndReturnsArbitraryExpression.

  • Filters validation remains after the identifier phase. Ordered mapping keys use duplicate first-position/final-value semantics and lazy nested subset traversal; reached unknown keys fail, unmatched earlier predicates or empty identifier selection can leave unusable mapping fields unconsumed. Falsey Filters select all identifier matches; raw malformed Filters still fail locally. Tests: internal/cloudfilter/mapping_test.go:TestCloudFilterOrderedMappingConsumesOnlyReachedKeysAndKeepsDuplicateFirstPosition, internal/cloudfilter/mapping_test.go:TestCloudFilterNestedEmptyObjectsUseActualTruthinessBeforeShapeOrMissingKeys, internal/cloudfilter/mapping_test.go:TestCloudFilterNonmappingFilterShapeIsLazyAfterIdentifierAndActualTruthiness, internal/cloudfilter/mapping_test.go:TestCloudFilterInvalidJSONIsLocalAtomicAndStillValidatedAfterEmptyIdentifierSelection, blockstorage/snapshot_read_selection_test.go:TestVolumeSnapshotReadSearchLocalFilterErrorsDoNotBorrowAdmittedHTTPStatus.

  • Leaf comparisons preserve deep exact JSON shape and Python bool/number equality with arbitrary precision decimal policy. JMESPath nonempty expression runs the full engine on normalized complete list even empty selection, supports arbitrary JSON Value and has no row indices/RawResource projection; parser/runtime errors remain local with completed physical pages. Tests: internal/cloudfilter/mapping_test.go:TestCloudFilterLeafEqualityKeepsExactArrayShapeAndPythonBooleanNumberPrecision, internal/cloudfilter/results_test.go:TestCloudFilterExpressionBridgeReturnsArbitraryOwnedJSONWithoutInventedRowIndices, internal/cloudfilter/results_test.go:TestCloudFilterExpressionsStillParseEmptySelectionAndKeepRuntimeFailuresAtomic, internal/jmespath/engine_test.go:TestSearchReferenceAndDeclaredBoundaries, blockstorage/snapshot_read_selection_test.go:TestVolumeSnapshotReadSearchCompletesQuerylessListBeforeSelectionAndReturnsArbitraryExpression, blockstorage/snapshot_read_selection_test.go:TestVolumeSnapshotReadSearchLocalFilterErrorsDoNotBorrowAdmittedHTTPStatus.

  • Search options/factories independently own raw filters, literal expression JSON and full Location; originals are reusable and execute once. A later callback/source/context failure cannot change a retained prepared policy or partially publish selected results. Tests: blockstorage/volume_snapshot_options_test.go:TestVolumeSnapshotSearchExpressionFactoryEncodesLiteralAndSearchOptionsOwnItsInputs, blockstorage/volume_snapshot_options_test.go:TestVolumeSnapshotOriginalsRunOnceInCapturedOrderAndRetainedConfigsCannotAlterLaterPolicy, internal/cloudfilter/results_test.go:TestCloudFilterSelectOwnsViewsFiltersIndicesAndResultsBeforeGuardCallbacks, internal/cloudfilter/results_test.go:TestCloudFilterGuardInterruptsTraversalAndRetainsCancellationCauseWithoutPartialSelection.

  • Normalized Snapshot contains all16 actual nullable fields, retaining arbitrary JSON for untyped fields and excluding unknown/case-variant aliases from logical output. No implicit false/time/string/int native projection replaces null. RawResource retains actual unknown fields and number spelling independently. Tests: internal/cloudsnapshot/model_test.go:TestSnapshotModelHasSixteenNullableFieldsAndPreservesUntypedValues, internal/cloudsnapshot/model_test.go:TestSnapshotModelBoolStrIsNullableWithoutAnImplicitFalseDefault, blockstorage/snapshot_read_contract_test.go:TestVolumeSnapshotReadListMaterializesAllPagesAndOwnsRawAndNormalizedRows, connection_volume_snapshots_test.go:TestConnectionVolumeSnapshotOriginalOptionsPrecedeCachedCinderSelectionForAllEntries.

  • Ordinary descriptor conversion is eager at Resource constructor/cache refresh: strict nullable BoolStr, Python bool/arbitrary integer preservation, parsed finite IEEE float truncation and Unicode decimal-string integer conversion, nullable ordinary metadata dictionary. Parsed duplicate keys keep first insertion position with final value; selected alias wins in dictionary traversal order and discarded alias is not converted. Tests: internal/cloudsnapshot/model_test.go:TestSnapshotModelIntegerAndMetadataDescriptorsMatchOrdinaryResourceConversion, internal/cloudsnapshot/model_test.go:TestSnapshotModelAliasesUseParsedDuplicateCollapseAndFirstInsertionOrder, blockstorage/snapshot_read_contract_test.go:TestVolumeSnapshotReadListSelectedAliasConvertsOnlyFinalParsedDictionaryValue, blockstorage/snapshot_read_contract_test.go:TestVolumeSnapshotReadListEagerDescriptorsFailBeforeLocalExclusionAndContinuation.

  • Snapshot location is recomputed from the owned configured/authenticated scope and actual project descriptor, including empty/location-only rows. Falsey/equal project retains configured names; truthy foreign project keeps raw ID and clears names/domains. Zone is always null because Snapshot has no zone descriptor. Raw location/availability_zone cannot replace it; caller location errors remain local without fabricated response errors. Owned Location is validated before first HTTP, and Connection validates it before its Cinder getter. Tests: internal/cloudsnapshot/model_test.go:TestSnapshotModelRecomputesLocationFromProjectAndAlwaysUsesNullZone, internal/cloudsnapshot/model_test.go:TestSnapshotModelRejectsPhysicalShapeAndLocalLocationFailuresAtomicallyAndOwnsResult, connection_volume_snapshots_test.go:TestConnectionVolumeSnapshotRecordedScopeIsCapturedAfterOptionsBeforeGetterAndRetainedAcrossPages, connection_volume_snapshots_test.go:TestConnectionVolumeSnapshotExplicitLocationIsOwnedAndZoneIgnoredWithoutChangingDefaults.

  • Prepare/factories own full raw Location, pointer and collection policy; complete options replace earlier policy. Original callbacks run exactly once in captured slice order with independent snapshots after each callback. Nil context/options, canceled custom cause and callback failures stop without partial prepared policy or HTTP. Tests: blockstorage/volume_snapshot_options_test.go:TestVolumeSnapshotLocationFactoriesOwnEveryNullableComponentAndAreReusable, blockstorage/volume_snapshot_options_test.go:TestVolumeSnapshotWholeOptionsReplaceEarlierPolicyRatherThanMerging, blockstorage/volume_snapshot_options_test.go:TestVolumeSnapshotOriginalsRunOnceInCapturedOrderAndRetainedConfigsCannotAlterLaterPolicy, blockstorage/volume_snapshot_options_test.go:TestVolumeSnapshotPrepareRejectsNilAndCanceledContextBeforeOriginals, blockstorage/volume_snapshot_options_test.go:TestVolumeSnapshotPrepareNilOptionAndCallbackFailuresStopWithoutPartialPolicy, connection_volume_snapshots_test.go:TestConnectionVolumeSnapshotOriginalSliceAndRetainedOptionPointersCannotChangePreparedPolicy.

  • Direct workflows capture provider/endpoint/ResourceBase/type/microversion before originals and retain sticky source violations; ordinary headers remain snapshots while auth tokens stay live. Connection executes originals once before only cached Cinder v3 selection and captures current/explicit location before getter. Local callback/getter/preflight errors retain outer operation and custom causes without inventing physical proof. Tests: blockstorage/snapshot_read_transport_test.go:TestVolumeSnapshotReadOriginalOptionsOwnEachSnapshotAndSourceOrdinaryHeaders, blockstorage/snapshot_read_transport_test.go:TestVolumeSnapshotReadOriginalCallbackFailureJoinsSourceAndContextBeforeHTTP, internal/cloudread/policy_test.go:TestCloudReadPolicySourceChangeStaysStickyBeforeAnyPolicyCommit, internal/cloudread/policy_test.go:TestCloudReadPolicyCancellationRetainsCauseAndIsAtomic, connection_volume_snapshots_test.go:TestConnectionVolumeSnapshotOriginalOptionsPrecedeCachedCinderSelectionForAllEntries, connection_volume_snapshots_test.go:TestConnectionVolumeSnapshotPreflightOriginalAndGetterErrorsPreserveOuterOperationAndCause.

  • Each admitted physical page/member owns body/header/status; normalized Value, raw row and error proof own independent state. Read/Close/source drift/custom cancellation keep the actual current phase and all causes while logical outputs remain unpublished. Rejected later/blocked requests retain only earlier completed pages and never borrow an earlier successful or suppressed member response. Tests: blockstorage/snapshot_read_transport_test.go:TestVolumeSnapshotReadAcceptedReadCloseCancellationRetainsCurrentPhysicalStage, blockstorage/snapshot_read_transport_test.go:TestVolumeSnapshotReadAcceptedSourceFactsAreFrozenThroughBodyClose, blockstorage/snapshot_read_transport_test.go:TestVolumeSnapshotReadBlockedContinuationCancellationKeepsOnlyCompletedPage, blockstorage/snapshot_read_selection_test.go:TestVolumeSnapshotReadLookupFailureRetainsPagesButNeverSuppressedMemberProof, connection_volume_snapshots_test.go:TestConnectionVolumeSnapshotFailuresKeepOnlyActualPhysicalProofAndCustomCancellation.

  • Native reauth/retry remains live and bounded in fixtures while method/fixed route/query/bodyless decoder/body retention/original100..399 policy and source remain guarded. Expanded native400/403/404 is terminal with actual native status/body/header causes, not compatible fallback or admitted ResponseError. Redirect cannot forward credentials to an altered target. No SDK orchestration replay/wait/action/rollback is added. Tests: blockstorage/snapshot_read_transport_test.go:TestVolumeSnapshotReadNativeReauthRetryKeepLiveTokenAndOwnedSourceOnce, blockstorage/snapshot_read_transport_test.go:TestVolumeSnapshotReadNativeExpandedFallbackStatusIsTerminalOriginalPolicyRejection, blockstorage/snapshot_read_transport_test.go:TestVolumeSnapshotReadNativeRetryCannotReplaceBodyDecoderRetentionOrSource, blockstorage/snapshot_read_transport_test.go:TestVolumeSnapshotReadRedirectCannotSendTokenToChangedFixedTarget, internal/cloudread/policy_test.go:TestCloudReadPolicyOwnedWirePolicyKeepsLiveTokenAcrossNativeRetry, internal/cloudread/policy_test.go:TestCloudReadPolicySourceMutationInNativeRetryStopsBeforeResend.

Python/Go differences:

  • Only this actual direct BlockStorageCloudMixin helper is mapped using selected Cinder v3 and Gophercloud v2.15.0. Independent Proxy/native/v2/Resource/session/adapter/cache declarations retain separate reviews; full SDK is not complete.
  • Python default/overloaded/runtime arguments map to explicit Go request types and owned concrete With/Prepare options, not caller-implemented interface builders. Go accepts finite ordinary JSON and typed controls rather than arbitrary mutable Python Resource/custom runtime objects.
  • Logical normalized16-field nullable values, physical raw Resource/Observed/Pages and error proof are independently owned Go representations. Unknown raw fields and number spelling are evidence extensions; mutable Resource identity, stale dict cache and session memoization are not reproduced.
  • Ordinary source descriptor behavior and parsed dictionary duplicate/alias order are preserved. Go Unicode16 decimal tables and arbitrary integer policy do not reproduce configurable CPython integer digit limits; exact decimal truthiness/equality differs from Python float rounding/underflow. Untyped timestamps/IDs/names stay JSON rather than native typed leaf extraction.
  • Connected Snapshot location is recomputed including empty/location-only rows, using explicit/current recorded scope and raw project descriptor; zone remains null. Direct clients recover recorded auth without fabricating configured names. Go owns snapshots and rejects invalid policy locally rather than emulating dynamic Connection/session objects.
  • Go captures original source facts and ordinary headers before originals on direct calls; Connection prepares originals before cached Cinder getter. Native auth remains live, sticky source/fixed request/cause guards and atomic logical publication are explicit Go safety/proof extensions; no SDK replay/wait/rollback is introduced.
  • Source validHTTP100..399 and UTF8-valid empty/malformed member JSON tolerance are preserved instead of narrowing to native200. Go additionally requires complete valid UTF8 and JSON/object/envelope/descriptor shape on consumed data, preserves native rejected evidence and prevents expanded native>=400 from becoming success or fallback.
  • Selected native microversion is preserved, including symbolic/empty settings when supplied. Source Snapshot3.65 limit only caps absent-default server-discovery negotiation; Go does not automatically negotiate/cap/upgrade a supplied client. Explicit Connection version/range negotiation remains independent.
  • Search preserves complete detailed list-before-selection and the distinct full _filter_list path. NameOrID is a Go string (empty means omitted); nonstring raw row identifiers use ordinary JSON Python str/repr compatibility, full case-sensitive fnmatch translation and source order rather than filesystem matching.
  • The full in-repo JMESPath engine accepts UseNumber JSON and returns arbitrary finite JSON, not a promised Snapshot array. Selected Python jmespath1.0.1 reference pin is a validation dependency satisfying SDK>=0.9.0, not a new SDK source pin. Exact decimal, lexical object order, stricter malformed grammar and arbitrary nonJSON/runtime-object boundaries are declared in engine documentation.
  • Lazy ordered mapping/shape errors and nested Python bool-number equality are retained without narrowing expression outputs to rows. Go explicit Value/RawResource association distinguishes ordinary selected row indices from arbitrary expression values; local errors do not borrow completed HTTP status.
python:cloud/_block_storage/BlockStorageCloudMixin/get_volume_snapshot

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk.Connection.GetVolumeSnapshot

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.GetVolumeSnapshot

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.PrepareVolumeSnapshotSearchOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeSnapshotSearchOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeSnapshotSearchLocation

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeSnapshotSearchFilters

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeSnapshotSearchExpression

  • Omitted or literal null Filters takes ordinary exact Find; every nonnull Filters including{}[]false0 and empty string takes complete cloud Search then the source truthy/len/index0 rule. JSON null is the only explicit null that restores Find; original slice policy is not reapplied during prepared Find. Tests: blockstorage/snapshot_read_selection_test.go:TestVolumeSnapshotReadGetNonNullFalseyFiltersDispatchFullSearchButNullUsesFind, connection_volume_snapshots_test.go:TestConnectionVolumeSnapshotOriginalSliceAndRetainedOptionPointersCannotChangePreparedPolicy.

  • Safe literal identity first makes one bodyless member GET. Only original clean direct native400/403/404 enables detailed name-hinted fallback, with no trim/glob and exact string ID/name matching. Unsafe/path/space names use literal list query as a declared Go route boundary. Expanded status-policy/wrapped native failures and accepted schema/read errors are terminal. Tests: blockstorage/snapshot_read_selection_test.go:TestVolumeSnapshotReadFindCleanFallbackUsesExactNameAndActualResponseIdentity, blockstorage/snapshot_read_selection_test.go:TestVolumeSnapshotReadFindUnsafeAndWildcardNamesKeepExactLiteralSelection, blockstorage/snapshot_read_selection_test.go:TestVolumeSnapshotReadMemberSchemaAndUTF8ErrorsRemainPhysicalAndTerminal, blockstorage/snapshot_read_transport_test.go:TestVolumeSnapshotReadNativeExpandedFallbackStatusIsTerminalOriginalPolicyRejection, connection_volume_snapshots_test.go:TestConnectionVolumeSnapshotMemberSeedPreservesRawShapeAndByID404NeverFallsBack.

  • A second exact match raises ambiguity immediately before unused row/link errors; one match must exhaust all pages successfully and cannot hide later descriptor/link/HTTP failure. Completed absence returns nil Value/Snapshot with actual list proof, clearing a suppressed rejected member observation before list processing. Tests: blockstorage/snapshot_read_selection_test.go:TestVolumeSnapshotReadFindAmbiguityStopsBeforeUnusedBadTailButUniqueMustExhaust, blockstorage/snapshot_read_selection_test.go:TestVolumeSnapshotReadLookupFailureRetainsPagesButNeverSuppressedMemberProof, connection_volume_snapshots_test.go:TestConnectionVolumeSnapshotMemberSeedPreservesRawShapeAndByID404NeverFallsBack.

  • Accepted member100..399 supports canonical snapshot object or flat object; UTF8-valid empty/malformed JSON tolerates response.json ValueError as a nullable logical Snapshot, including physical204. Valid null/scalar/array/wrong envelope, invalidUTF8 and reached descriptor failures are terminal physical errors; they do not trigger fallback. Tests: blockstorage/snapshot_read_selection_test.go:TestVolumeSnapshotReadMemberAcceptsFlatPartialEmptyAndMalformedUTF8JSON, blockstorage/snapshot_read_selection_test.go:TestVolumeSnapshotReadMemberSchemaAndUTF8ErrorsRemainPhysicalAndTerminal, blockstorage/snapshot_read_selection_test.go:TestVolumeSnapshotReadMemberUsesSourceSub400PolicyIncludingOpaqueEmpty204.

  • Missing member id retains source input seed only in logical Value and RequestedID/SeededID, without adding raw Body.id. Explicit null/false/zero/empty/container ID and mismatched actual string ID are retained without seed or request-ID equality constraint. List missing id is null with no seed. Tests: blockstorage/snapshot_read_selection_test.go:TestVolumeSnapshotReadMemberSeparatesSeededLogicalIDFromActualWireBody, internal/cloudsnapshot/model_test.go:TestSnapshotModelMemberSeedsOnlyAbsentIDsWithoutChangingRawProof, connection_volume_snapshots_test.go:TestConnectionVolumeSnapshotMemberSeedPreservesRawShapeAndByID404NeverFallsBack.

  • Filtered Get allows arbitrary expression results: falsey overall result is absence; length>1 is ambiguity; remaining truthy shape must support integer index0. Selected false/zero/empty value is not retested as absence. Scalar/dictionary length/index errors stay local and no expression value gains a fabricated Snapshot association. Tests: blockstorage/snapshot_read_selection_test.go:TestVolumeSnapshotReadGetArbitraryExpressionDoesNotInventSnapshotAssociation, internal/cloudfilter/results_test.go:TestCloudFilterFirstFollowsTruthyLengthAndIntegerIndexWithoutRetestingSelectedFalsyValue, internal/cloudfilter/results_test.go:TestCloudFilterPythonTruthyPreservesExactDecimalZeroPolicyAndNullableResults.

  • Get selection/filter/expression errors retain completed actual pages without borrowing their accepted status. Partial logical values never escape; cancellation after admitted member keeps its member error despite shared Find cancellation override, while fallback clears suppressed member error before subsequent list failure. Tests: blockstorage/snapshot_read_selection_test.go:TestVolumeSnapshotReadSearchLocalFilterErrorsDoNotBorrowAdmittedHTTPStatus, blockstorage/snapshot_read_selection_test.go:TestVolumeSnapshotReadLookupFailureRetainsPagesButNeverSuppressedMemberProof, blockstorage/snapshot_read_transport_test.go:TestVolumeSnapshotReadAcceptedReadCloseCancellationRetainsCurrentPhysicalStage, connection_volume_snapshots_test.go:TestConnectionVolumeSnapshotFailuresKeepOnlyActualPhysicalProofAndCustomCancellation.

  • Normalized Snapshot contains all16 actual nullable fields, retaining arbitrary JSON for untyped fields and excluding unknown/case-variant aliases from logical output. No implicit false/time/string/int native projection replaces null. RawResource retains actual unknown fields and number spelling independently. Tests: internal/cloudsnapshot/model_test.go:TestSnapshotModelHasSixteenNullableFieldsAndPreservesUntypedValues, internal/cloudsnapshot/model_test.go:TestSnapshotModelBoolStrIsNullableWithoutAnImplicitFalseDefault, blockstorage/snapshot_read_contract_test.go:TestVolumeSnapshotReadListMaterializesAllPagesAndOwnsRawAndNormalizedRows, connection_volume_snapshots_test.go:TestConnectionVolumeSnapshotOriginalOptionsPrecedeCachedCinderSelectionForAllEntries.

  • Ordinary descriptor conversion is eager at Resource constructor/cache refresh: strict nullable BoolStr, Python bool/arbitrary integer preservation, parsed finite IEEE float truncation and Unicode decimal-string integer conversion, nullable ordinary metadata dictionary. Parsed duplicate keys keep first insertion position with final value; selected alias wins in dictionary traversal order and discarded alias is not converted. Tests: internal/cloudsnapshot/model_test.go:TestSnapshotModelIntegerAndMetadataDescriptorsMatchOrdinaryResourceConversion, internal/cloudsnapshot/model_test.go:TestSnapshotModelAliasesUseParsedDuplicateCollapseAndFirstInsertionOrder, blockstorage/snapshot_read_contract_test.go:TestVolumeSnapshotReadListSelectedAliasConvertsOnlyFinalParsedDictionaryValue, blockstorage/snapshot_read_contract_test.go:TestVolumeSnapshotReadListEagerDescriptorsFailBeforeLocalExclusionAndContinuation.

  • Snapshot location is recomputed from the owned configured/authenticated scope and actual project descriptor, including empty/location-only rows. Falsey/equal project retains configured names; truthy foreign project keeps raw ID and clears names/domains. Zone is always null because Snapshot has no zone descriptor. Raw location/availability_zone cannot replace it; caller location errors remain local without fabricated response errors. Owned Location is validated before first HTTP, and Connection validates it before its Cinder getter. Tests: internal/cloudsnapshot/model_test.go:TestSnapshotModelRecomputesLocationFromProjectAndAlwaysUsesNullZone, internal/cloudsnapshot/model_test.go:TestSnapshotModelRejectsPhysicalShapeAndLocalLocationFailuresAtomicallyAndOwnsResult, connection_volume_snapshots_test.go:TestConnectionVolumeSnapshotRecordedScopeIsCapturedAfterOptionsBeforeGetterAndRetainedAcrossPages, connection_volume_snapshots_test.go:TestConnectionVolumeSnapshotExplicitLocationIsOwnedAndZoneIgnoredWithoutChangingDefaults.

  • Prepare/factories own full raw Location, pointer and collection policy; complete options replace earlier policy. Original callbacks run exactly once in captured slice order with independent snapshots after each callback. Nil context/options, canceled custom cause and callback failures stop without partial prepared policy or HTTP. Tests: blockstorage/volume_snapshot_options_test.go:TestVolumeSnapshotLocationFactoriesOwnEveryNullableComponentAndAreReusable, blockstorage/volume_snapshot_options_test.go:TestVolumeSnapshotWholeOptionsReplaceEarlierPolicyRatherThanMerging, blockstorage/volume_snapshot_options_test.go:TestVolumeSnapshotOriginalsRunOnceInCapturedOrderAndRetainedConfigsCannotAlterLaterPolicy, blockstorage/volume_snapshot_options_test.go:TestVolumeSnapshotPrepareRejectsNilAndCanceledContextBeforeOriginals, blockstorage/volume_snapshot_options_test.go:TestVolumeSnapshotPrepareNilOptionAndCallbackFailuresStopWithoutPartialPolicy, connection_volume_snapshots_test.go:TestConnectionVolumeSnapshotOriginalSliceAndRetainedOptionPointersCannotChangePreparedPolicy.

  • Direct workflows capture provider/endpoint/ResourceBase/type/microversion before originals and retain sticky source violations; ordinary headers remain snapshots while auth tokens stay live. Connection executes originals once before only cached Cinder v3 selection and captures current/explicit location before getter. Local callback/getter/preflight errors retain outer operation and custom causes without inventing physical proof. Tests: blockstorage/snapshot_read_transport_test.go:TestVolumeSnapshotReadOriginalOptionsOwnEachSnapshotAndSourceOrdinaryHeaders, blockstorage/snapshot_read_transport_test.go:TestVolumeSnapshotReadOriginalCallbackFailureJoinsSourceAndContextBeforeHTTP, internal/cloudread/policy_test.go:TestCloudReadPolicySourceChangeStaysStickyBeforeAnyPolicyCommit, internal/cloudread/policy_test.go:TestCloudReadPolicyCancellationRetainsCauseAndIsAtomic, connection_volume_snapshots_test.go:TestConnectionVolumeSnapshotOriginalOptionsPrecedeCachedCinderSelectionForAllEntries, connection_volume_snapshots_test.go:TestConnectionVolumeSnapshotPreflightOriginalAndGetterErrorsPreserveOuterOperationAndCause.

  • Each admitted physical page/member owns body/header/status; normalized Value, raw row and error proof own independent state. Read/Close/source drift/custom cancellation keep the actual current phase and all causes while logical outputs remain unpublished. Rejected later/blocked requests retain only earlier completed pages and never borrow an earlier successful or suppressed member response. Tests: blockstorage/snapshot_read_transport_test.go:TestVolumeSnapshotReadAcceptedReadCloseCancellationRetainsCurrentPhysicalStage, blockstorage/snapshot_read_transport_test.go:TestVolumeSnapshotReadAcceptedSourceFactsAreFrozenThroughBodyClose, blockstorage/snapshot_read_transport_test.go:TestVolumeSnapshotReadBlockedContinuationCancellationKeepsOnlyCompletedPage, blockstorage/snapshot_read_selection_test.go:TestVolumeSnapshotReadLookupFailureRetainsPagesButNeverSuppressedMemberProof, connection_volume_snapshots_test.go:TestConnectionVolumeSnapshotFailuresKeepOnlyActualPhysicalProofAndCustomCancellation.

  • Native reauth/retry remains live and bounded in fixtures while method/fixed route/query/bodyless decoder/body retention/original100..399 policy and source remain guarded. Expanded native400/403/404 is terminal with actual native status/body/header causes, not compatible fallback or admitted ResponseError. Redirect cannot forward credentials to an altered target. No SDK orchestration replay/wait/action/rollback is added. Tests: blockstorage/snapshot_read_transport_test.go:TestVolumeSnapshotReadNativeReauthRetryKeepLiveTokenAndOwnedSourceOnce, blockstorage/snapshot_read_transport_test.go:TestVolumeSnapshotReadNativeExpandedFallbackStatusIsTerminalOriginalPolicyRejection, blockstorage/snapshot_read_transport_test.go:TestVolumeSnapshotReadNativeRetryCannotReplaceBodyDecoderRetentionOrSource, blockstorage/snapshot_read_transport_test.go:TestVolumeSnapshotReadRedirectCannotSendTokenToChangedFixedTarget, internal/cloudread/policy_test.go:TestCloudReadPolicyOwnedWirePolicyKeepsLiveTokenAcrossNativeRetry, internal/cloudread/policy_test.go:TestCloudReadPolicySourceMutationInNativeRetryStopsBeforeResend.

Python/Go differences:

  • Only this actual direct BlockStorageCloudMixin helper is mapped using selected Cinder v3 and Gophercloud v2.15.0. Independent Proxy/native/v2/Resource/session/adapter/cache declarations retain separate reviews; full SDK is not complete.
  • Python default/overloaded/runtime arguments map to explicit Go request types and owned concrete With/Prepare options, not caller-implemented interface builders. Go accepts finite ordinary JSON and typed controls rather than arbitrary mutable Python Resource/custom runtime objects.
  • Logical normalized16-field nullable values, physical raw Resource/Observed/Pages and error proof are independently owned Go representations. Unknown raw fields and number spelling are evidence extensions; mutable Resource identity, stale dict cache and session memoization are not reproduced.
  • Ordinary source descriptor behavior and parsed dictionary duplicate/alias order are preserved. Go Unicode16 decimal tables and arbitrary integer policy do not reproduce configurable CPython integer digit limits; exact decimal truthiness/equality differs from Python float rounding/underflow. Untyped timestamps/IDs/names stay JSON rather than native typed leaf extraction.
  • Connected Snapshot location is recomputed including empty/location-only rows, using explicit/current recorded scope and raw project descriptor; zone remains null. Direct clients recover recorded auth without fabricating configured names. Go owns snapshots and rejects invalid policy locally rather than emulating dynamic Connection/session objects.
  • Go captures original source facts and ordinary headers before originals on direct calls; Connection prepares originals before cached Cinder getter. Native auth remains live, sticky source/fixed request/cause guards and atomic logical publication are explicit Go safety/proof extensions; no SDK replay/wait/rollback is introduced.
  • Source validHTTP100..399 and UTF8-valid empty/malformed member JSON tolerance are preserved instead of narrowing to native200. Go additionally requires complete valid UTF8 and JSON/object/envelope/descriptor shape on consumed data, preserves native rejected evidence and prevents expanded native>=400 from becoming success or fallback.
  • Selected native microversion is preserved, including symbolic/empty settings when supplied. Source Snapshot3.65 limit only caps absent-default server-discovery negotiation; Go does not automatically negotiate/cap/upgrade a supplied client. Explicit Connection version/range negotiation remains independent.
  • Search preserves complete detailed list-before-selection and the distinct full _filter_list path. NameOrID is a Go string (empty means omitted); nonstring raw row identifiers use ordinary JSON Python str/repr compatibility, full case-sensitive fnmatch translation and source order rather than filesystem matching.
  • The full in-repo JMESPath engine accepts UseNumber JSON and returns arbitrary finite JSON, not a promised Snapshot array. Selected Python jmespath1.0.1 reference pin is a validation dependency satisfying SDK>=0.9.0, not a new SDK source pin. Exact decimal, lexical object order, stricter malformed grammar and arbitrary nonJSON/runtime-object boundaries are declared in engine documentation.
  • Lazy ordered mapping/shape errors and nested Python bool-number equality are retained without narrowing expression outputs to rows. Go explicit Value/RawResource association distinguishes ordinary selected row indices from arbitrary expression values; local errors do not borrow completed HTTP status.
  • Omitted/literal null filters use ordinary exact Find; every nonnull falsey JSON uses complete Search and source truthy/len/index0 selection. Python deprecated warning is not emitted as a Go runtime warning. Arbitrary expression values/shape failures are not narrowed to resource-only outputs.
  • Go NameOrID string and safe member route domain avoid source arbitrary Resource/object interpolation. Unsafe/path/whitespace names use literal name-hinted list and exact matching without trimming/glob. Only original direct native400/403/404 is compatible absence; wrappers/expanded policy remain terminal with native causes.
  • Source missing member ID seed is explicit logical Value plus RequestedID/SeededID, never fabricated physical Body.id. Explicit null/arbitrary IDs and list missing-id null preserve actual values. Accepted member cancellation proof survives shared Find cancellation, and suppressed member proof is cleared before fallback failure.
python:cloud/_block_storage/BlockStorageCloudMixin/get_volume_snapshot_by_id

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk.Connection.GetVolumeSnapshotByID

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.GetVolumeSnapshotByID

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.PrepareVolumeSnapshotReadOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeSnapshotReadOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeSnapshotReadLocation

  • ByID performs only fixed literal member GET with no list/name fallback; source Proxy.get_snapshot raises rejected400/403/404 despite cloud docstring absent=None wording. Accepted actual arbitrary/mismatched ID is not checked against the requested safe path ID. Preflight uses the documented single unescaped UTF8 segment route domain and nil result before execution. Tests: blockstorage/snapshot_read_selection_test.go:TestVolumeSnapshotReadByIDNeverFallsBackOnCleanNativeRejections, blockstorage/snapshot_read_selection_test.go:TestVolumeSnapshotReadMemberSeparatesSeededLogicalIDFromActualWireBody, connection_volume_snapshots_test.go:TestConnectionVolumeSnapshotPreflightOriginalAndGetterErrorsPreserveOuterOperationAndCause, connection_volume_snapshots_test.go:TestConnectionVolumeSnapshotMemberSeedPreservesRawShapeAndByID404NeverFallsBack, connection_snapshot_id_test.go:TestConnectionVolumeSnapshotByIDValidatesPathBeforeHTTPAndPreservesUnicodeProof.

  • Accepted member100..399 preserves canonical/flat/empty/malformed JSON-ValueError tolerance and source logical missing-ID seed independently of physical Body. Explicit null/false/zero/empty/container ID never seeds; null/scalar/array/envelope/invalidUTF8 and descriptor errors retain current admitted proof and publish no Snapshot/Value. Tests: blockstorage/snapshot_read_selection_test.go:TestVolumeSnapshotReadMemberAcceptsFlatPartialEmptyAndMalformedUTF8JSON, blockstorage/snapshot_read_selection_test.go:TestVolumeSnapshotReadMemberSchemaAndUTF8ErrorsRemainPhysicalAndTerminal, blockstorage/snapshot_read_selection_test.go:TestVolumeSnapshotReadMemberUsesSourceSub400PolicyIncludingOpaqueEmpty204, internal/cloudsnapshot/model_test.go:TestSnapshotModelMemberSeedsOnlyAbsentIDsWithoutChangingRawProof, connection_volume_snapshots_test.go:TestConnectionVolumeSnapshotMemberSeedPreservesRawShapeAndByID404NeverFallsBack.

  • Normalized Snapshot contains all16 actual nullable fields, retaining arbitrary JSON for untyped fields and excluding unknown/case-variant aliases from logical output. No implicit false/time/string/int native projection replaces null. RawResource retains actual unknown fields and number spelling independently. Tests: internal/cloudsnapshot/model_test.go:TestSnapshotModelHasSixteenNullableFieldsAndPreservesUntypedValues, internal/cloudsnapshot/model_test.go:TestSnapshotModelBoolStrIsNullableWithoutAnImplicitFalseDefault, blockstorage/snapshot_read_contract_test.go:TestVolumeSnapshotReadListMaterializesAllPagesAndOwnsRawAndNormalizedRows, connection_volume_snapshots_test.go:TestConnectionVolumeSnapshotOriginalOptionsPrecedeCachedCinderSelectionForAllEntries.

  • Ordinary descriptor conversion is eager at Resource constructor/cache refresh: strict nullable BoolStr, Python bool/arbitrary integer preservation, parsed finite IEEE float truncation and Unicode decimal-string integer conversion, nullable ordinary metadata dictionary. Parsed duplicate keys keep first insertion position with final value; selected alias wins in dictionary traversal order and discarded alias is not converted. Tests: internal/cloudsnapshot/model_test.go:TestSnapshotModelIntegerAndMetadataDescriptorsMatchOrdinaryResourceConversion, internal/cloudsnapshot/model_test.go:TestSnapshotModelAliasesUseParsedDuplicateCollapseAndFirstInsertionOrder, blockstorage/snapshot_read_contract_test.go:TestVolumeSnapshotReadListSelectedAliasConvertsOnlyFinalParsedDictionaryValue, blockstorage/snapshot_read_contract_test.go:TestVolumeSnapshotReadListEagerDescriptorsFailBeforeLocalExclusionAndContinuation.

  • Snapshot location is recomputed from the owned configured/authenticated scope and actual project descriptor, including empty/location-only rows. Falsey/equal project retains configured names; truthy foreign project keeps raw ID and clears names/domains. Zone is always null because Snapshot has no zone descriptor. Raw location/availability_zone cannot replace it; caller location errors remain local without fabricated response errors. Owned Location is validated before first HTTP, and Connection validates it before its Cinder getter. Tests: internal/cloudsnapshot/model_test.go:TestSnapshotModelRecomputesLocationFromProjectAndAlwaysUsesNullZone, internal/cloudsnapshot/model_test.go:TestSnapshotModelRejectsPhysicalShapeAndLocalLocationFailuresAtomicallyAndOwnsResult, connection_volume_snapshots_test.go:TestConnectionVolumeSnapshotRecordedScopeIsCapturedAfterOptionsBeforeGetterAndRetainedAcrossPages, connection_volume_snapshots_test.go:TestConnectionVolumeSnapshotExplicitLocationIsOwnedAndZoneIgnoredWithoutChangingDefaults.

  • Prepare/factories own full raw Location, pointer and collection policy; complete options replace earlier policy. Original callbacks run exactly once in captured slice order with independent snapshots after each callback. Nil context/options, canceled custom cause and callback failures stop without partial prepared policy or HTTP. Tests: blockstorage/volume_snapshot_options_test.go:TestVolumeSnapshotLocationFactoriesOwnEveryNullableComponentAndAreReusable, blockstorage/volume_snapshot_options_test.go:TestVolumeSnapshotWholeOptionsReplaceEarlierPolicyRatherThanMerging, blockstorage/volume_snapshot_options_test.go:TestVolumeSnapshotOriginalsRunOnceInCapturedOrderAndRetainedConfigsCannotAlterLaterPolicy, blockstorage/volume_snapshot_options_test.go:TestVolumeSnapshotPrepareRejectsNilAndCanceledContextBeforeOriginals, blockstorage/volume_snapshot_options_test.go:TestVolumeSnapshotPrepareNilOptionAndCallbackFailuresStopWithoutPartialPolicy, connection_volume_snapshots_test.go:TestConnectionVolumeSnapshotOriginalSliceAndRetainedOptionPointersCannotChangePreparedPolicy.

  • Direct workflows capture provider/endpoint/ResourceBase/type/microversion before originals and retain sticky source violations; ordinary headers remain snapshots while auth tokens stay live. Connection executes originals once before only cached Cinder v3 selection and captures current/explicit location before getter. Local callback/getter/preflight errors retain outer operation and custom causes without inventing physical proof. Tests: blockstorage/snapshot_read_transport_test.go:TestVolumeSnapshotReadOriginalOptionsOwnEachSnapshotAndSourceOrdinaryHeaders, blockstorage/snapshot_read_transport_test.go:TestVolumeSnapshotReadOriginalCallbackFailureJoinsSourceAndContextBeforeHTTP, internal/cloudread/policy_test.go:TestCloudReadPolicySourceChangeStaysStickyBeforeAnyPolicyCommit, internal/cloudread/policy_test.go:TestCloudReadPolicyCancellationRetainsCauseAndIsAtomic, connection_volume_snapshots_test.go:TestConnectionVolumeSnapshotOriginalOptionsPrecedeCachedCinderSelectionForAllEntries, connection_volume_snapshots_test.go:TestConnectionVolumeSnapshotPreflightOriginalAndGetterErrorsPreserveOuterOperationAndCause.

  • Each admitted physical page/member owns body/header/status; normalized Value, raw row and error proof own independent state. Read/Close/source drift/custom cancellation keep the actual current phase and all causes while logical outputs remain unpublished. Rejected later/blocked requests retain only earlier completed pages and never borrow an earlier successful or suppressed member response. Tests: blockstorage/snapshot_read_transport_test.go:TestVolumeSnapshotReadAcceptedReadCloseCancellationRetainsCurrentPhysicalStage, blockstorage/snapshot_read_transport_test.go:TestVolumeSnapshotReadAcceptedSourceFactsAreFrozenThroughBodyClose, blockstorage/snapshot_read_transport_test.go:TestVolumeSnapshotReadBlockedContinuationCancellationKeepsOnlyCompletedPage, blockstorage/snapshot_read_selection_test.go:TestVolumeSnapshotReadLookupFailureRetainsPagesButNeverSuppressedMemberProof, connection_volume_snapshots_test.go:TestConnectionVolumeSnapshotFailuresKeepOnlyActualPhysicalProofAndCustomCancellation.

  • Native reauth/retry remains live and bounded in fixtures while method/fixed route/query/bodyless decoder/body retention/original100..399 policy and source remain guarded. Expanded native400/403/404 is terminal with actual native status/body/header causes, not compatible fallback or admitted ResponseError. Redirect cannot forward credentials to an altered target. No SDK orchestration replay/wait/action/rollback is added. Tests: blockstorage/snapshot_read_transport_test.go:TestVolumeSnapshotReadNativeReauthRetryKeepLiveTokenAndOwnedSourceOnce, blockstorage/snapshot_read_transport_test.go:TestVolumeSnapshotReadNativeExpandedFallbackStatusIsTerminalOriginalPolicyRejection, blockstorage/snapshot_read_transport_test.go:TestVolumeSnapshotReadNativeRetryCannotReplaceBodyDecoderRetentionOrSource, blockstorage/snapshot_read_transport_test.go:TestVolumeSnapshotReadRedirectCannotSendTokenToChangedFixedTarget, internal/cloudread/policy_test.go:TestCloudReadPolicyOwnedWirePolicyKeepsLiveTokenAcrossNativeRetry, internal/cloudread/policy_test.go:TestCloudReadPolicySourceMutationInNativeRetryStopsBeforeResend.

Python/Go differences:

  • Only this actual direct BlockStorageCloudMixin helper is mapped using selected Cinder v3 and Gophercloud v2.15.0. Independent Proxy/native/v2/Resource/session/adapter/cache declarations retain separate reviews; full SDK is not complete.
  • Python default/overloaded/runtime arguments map to explicit Go request types and owned concrete With/Prepare options, not caller-implemented interface builders. Go accepts finite ordinary JSON and typed controls rather than arbitrary mutable Python Resource/custom runtime objects.
  • Logical normalized16-field nullable values, physical raw Resource/Observed/Pages and error proof are independently owned Go representations. Unknown raw fields and number spelling are evidence extensions; mutable Resource identity, stale dict cache and session memoization are not reproduced.
  • Ordinary source descriptor behavior and parsed dictionary duplicate/alias order are preserved. Go Unicode16 decimal tables and arbitrary integer policy do not reproduce configurable CPython integer digit limits; exact decimal truthiness/equality differs from Python float rounding/underflow. Untyped timestamps/IDs/names stay JSON rather than native typed leaf extraction.
  • Connected Snapshot location is recomputed including empty/location-only rows, using explicit/current recorded scope and raw project descriptor; zone remains null. Direct clients recover recorded auth without fabricating configured names. Go owns snapshots and rejects invalid policy locally rather than emulating dynamic Connection/session objects.
  • Go captures original source facts and ordinary headers before originals on direct calls; Connection prepares originals before cached Cinder getter. Native auth remains live, sticky source/fixed request/cause guards and atomic logical publication are explicit Go safety/proof extensions; no SDK replay/wait/rollback is introduced.
  • Source validHTTP100..399 and UTF8-valid empty/malformed member JSON tolerance are preserved instead of narrowing to native200. Go additionally requires complete valid UTF8 and JSON/object/envelope/descriptor shape on consumed data, preserves native rejected evidence and prevents expanded native>=400 from becoming success or fallback.
  • Selected native microversion is preserved, including symbolic/empty settings when supplied. Source Snapshot3.65 limit only caps absent-default server-discovery negotiation; Go does not automatically negotiate/cap/upgrade a supplied client. Explicit Connection version/range negotiation remains independent.
  • ByID requires one safe unescaped UTF8 string path segment; arbitrary Python Resource/runtime object and route-changing coercion are excluded. Native rejected400/403/404 is an error with no list fallback, matching actual Proxy behavior rather than the inaccurate cloud absent=None docstring.
  • Missing member ID is retained as explicit logical requested seed/RequestedID/SeededID while physical Body remains unchanged. Actual explicit null/false/zero/empty/containers or mismatched IDs remain actual response values; direct lookup does not invent a request-ID equality policy.
python:cloud/_block_storage/BlockStorageCloudMixin/create_volume_snapshot

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk.Connection.CreateVolumeSnapshot

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.CreateVolumeSnapshot

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.PrepareCreateVolumeSnapshotOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithCreateVolumeSnapshotOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithCreateVolumeSnapshotForce

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithCreateVolumeSnapshotWait

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithCreateVolumeSnapshotWaitPolicy

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithCreateVolumeSnapshotAttributes

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithCreateVolumeSnapshotFields

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithCreateVolumeSnapshotName

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithCreateVolumeSnapshotDisplayName

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithCreateVolumeSnapshotDescription

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithCreateVolumeSnapshotDisplayDescription

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithCreateVolumeSnapshotLocation

  • Concrete With/Prepare policy preserves omitted versus explicit false/zero, complete replacement and all raw nullable attributes/location/wait subtrees. Original callbacks run exactly once in captured slice order with an owned snapshot after each callback; factories support concurrent reuse. Preparation is pure and defers reached-value validation. Nil options/context, cancellation including custom causes and callback errors return no partial policy or HTTP. Tests: blockstorage/snapshot_mutation_options_test.go:TestSnapshotMutationOptionsPreserveOmissionAndExplicitFalseZero, blockstorage/snapshot_mutation_options_test.go:TestSnapshotMutationOptionsCompleteFactoriesOwnEverySubtreeAcrossReuses, blockstorage/snapshot_mutation_options_test.go:TestSnapshotMutationOptionsFactoriesSupportConcurrentIndependentPreparedValues, blockstorage/snapshot_mutation_options_test.go:TestSnapshotMutationOptionsAttributeFactoriesRetainAllAliasesWithoutNormalizing, blockstorage/snapshot_mutation_options_test.go:TestSnapshotMutationOptionsRawFactoriesPreserveNilEmptyMapsAndExactByteShapes, blockstorage/snapshot_mutation_options_test.go:TestSnapshotMutationOptionsIndividualFactoriesOverrideOnlySelectedSubtrees, blockstorage/snapshot_mutation_options_test.go:TestSnapshotMutationOptionsCompleteReplacementClearsPriorPolicyAndSubtrees, blockstorage/snapshot_mutation_options_test.go:TestSnapshotMutationOptionsCaptureOriginalSliceAndIsolateRetainedCallbacks, blockstorage/snapshot_mutation_options_test.go:TestSnapshotMutationOptionsRejectMissingCanceledOrExpiredContextBeforeCallbacks, blockstorage/snapshot_mutation_options_test.go:TestSnapshotMutationOptionsStopOnNilErrorOrCancellationWithoutPartialPolicy, blockstorage/snapshot_mutation_options_test.go:TestSnapshotMutationOptionsPreparationIsPureAndDefersReachedValueValidation.

  • Direct workflows capture provider/endpoint/ResourceBase/type/microversion before originals and ordinary headers as owned snapshots while auth tokens remain live. Sticky source changes and original failures join context causes before HTTP. Connection prepares originals once before only cached Cinder v3 selection without readiness probing; recorded/explicit scope is owned after originals and before getter, retaining snapshot location across phases. Tests: blockstorage/snapshot_mutation_source_test.go:TestVolumeSnapshotMutationOriginalFailuresJoinSourceAndContextBeforeHTTP, blockstorage/snapshot_mutation_source_test.go:TestVolumeSnapshotMutationDirectCaptureOwnsHeadersOptionsAndEveryPublishedStage, connection_volume_snapshot_mutations_test.go:TestConnectionSnapshotMutationsOriginalsPrecedeOnlyCinderV3AndReuseCacheWithoutReadiness, connection_volume_snapshot_mutations_test.go:TestConnectionSnapshotMutationsCaptureRecordedScopeAfterOriginalsBeforeGetterAcrossWait, connection_volume_snapshot_mutations_test.go:TestConnectionSnapshotMutationsExplicitLocationAndRetainedOriginalsStayOwned, connection_volume_snapshot_mutations_test.go:TestConnectionSnapshotMutationsNonemptyPreflightAndGetterFailuresKeepOperationCauses.

  • Snapshot logical state merges only known descriptors while preserving raw descriptor values, duplicate-key insertion/alias order and eager nullable16-field conversion. Location is recomputed from captured current/foreign-project scope and zone is null. Partial/flat responses merge prior state; valid UTF8 empty/malformed JSON has no actual object, parsed {} is an actual empty resource, and valid wrong shape/envelope/null or invalid UTF8 fails with current physical proof. Tests: internal/cloudsnapshot/mutation_state_test.go:TestSnapshotMutationStateMergesKnownPartialFieldsWithoutChangingRawDescriptorValues, internal/cloudsnapshot/mutation_state_test.go:TestSnapshotMutationStateAliasesUseParsedDuplicateInsertionOrder, internal/cloudsnapshot/mutation_state_test.go:TestSnapshotMutationStateConversionIsEagerAndErrorsDoNotRewriteRawState, internal/cloudsnapshot/mutation_response_test.go:TestSnapshotMutationObjectDistinguishesToleranceFromActualEmptyAndRejectsWrongShape, internal/cloudsnapshot/mutation_response_test.go:TestSnapshotMutationObjectOwnsActualFieldsAndMetadataSeparatelyFromLogicalView.

  • Accepted physical body/header/status, raw resources, logical stages and errors own independent copies. Admitted read/Close/source/context failures keep the actual current phase and all causes while completed logical outputs remain unpublished. Later blocked/canceled/rejected requests keep prior phase proof without borrowing it as the new failure response. Opaque mutation acknowledgement bytes remain actual proof. Tests: internal/cloudsnapshot/mutation_response_test.go:TestSnapshotMutationProofKeepsOpaqueBytesAndEveryPhaseOwnsItsCopy, blockstorage/snapshot_mutation_transport_test.go:TestVolumeSnapshotMutationAcceptedFailuresRetainCurrentPhaseAndCauses, connection_volume_snapshot_mutations_test.go:TestConnectionSnapshotMutationsDescriptorAndDeleteRejectionRetainTheirOwnPhase, connection_volume_snapshot_mutations_test.go:TestConnectionSnapshotMutationsAcceptedIOFailuresJoinReadCloseAndCallerCause, connection_volume_snapshot_mutations_test.go:TestConnectionSnapshotMutationsBlockedFreshPollPreservesEarlierProofAndCustomCause.

  • Create forwards literal volume_id including empty string with explicit force=false by default, without generated ID/name/description. Only name/display_name/description/display_description kwargs are accepted. Canonical key presence suppresses aliases even when falsey; selected falsey JSON is omitted, typed fields overlay the same key, and invalid unused aliases remain unused. Reached input validation occurs before POST and Connection getter; body data is not routed. Tests: internal/cloudsnapshot/mutation_body_test.go:TestSnapshotMutationCreateBodyPreservesOnlyFourCloudAttributesAndDefaultFalse, internal/cloudsnapshot/mutation_body_test.go:TestSnapshotMutationCreateBodyCanonicalPresenceSuppressesAliasesByJSONTruthiness, internal/cloudsnapshot/mutation_body_test.go:TestSnapshotMutationCreateBodyTypedOverridesAndUnusedAliasValidation, internal/cloudsnapshot/mutation_body_test.go:TestSnapshotMutationCreateBodyInputValidationIsAtomicAndBodyDataDoesNotUseRoutes, internal/cloudsnapshot/mutation_body_test.go:TestSnapshotMutationCreateBodyOwnsSuppliedFieldsAndIndependentState, blockstorage/snapshot_mutation_create_contract_test.go:TestCreateVolumeSnapshotDefaultsForwardLiteralBodyAndPreserveRequestSeed, blockstorage/snapshot_mutation_create_contract_test.go:TestCreateVolumeSnapshotAliasesUseCanonicalPresenceAndLiteralJSONValues, blockstorage/snapshot_mutation_create_contract_test.go:TestCreateVolumeSnapshotValidatesConsumedInputBeforePOSTButIgnoresShadowedAlias, blockstorage/snapshot_mutation_create_contract_test.go:TestCreateVolumeSnapshotOriginalOptionsAndFactoriesCannotChangeCapturedRequestAfterBoundary, connection_volume_snapshot_mutations_test.go:TestConnectionSnapshotMutationCreateInvalidLiteralAndUnknownAttributesFailBeforeGetter.

  • POST accepts original HTTP100..399 and merges the submitted known seed with actual response fields. Created physical proof and successfully normalized CreatedValue remain separate from final Value/Ready; malformed responses retain submitted values without manufacturing a raw object. Eager descriptor/shape failure keeps parsed current raw resource when available and never publishes final Snapshot/Value. Tests: blockstorage/snapshot_mutation_create_contract_test.go:TestCreateVolumeSnapshotMergesPartialFlatEmptyAndMalformedCreationResponses, blockstorage/snapshot_mutation_create_contract_test.go:TestCreateVolumeSnapshotAcceptedWrongShapesAndDescriptorsKeepOnlyCreationProof, blockstorage/snapshot_mutation_create_contract_test.go:TestCreateVolumeSnapshotOwnsEveryLogicalAndPhysicalPhaseIndependently.

  • Create defaults wait=true. Initial case-insensitive available is terminal before unused ID/timeout/interval validation; no-wait returns merged values even arbitrary/null IDs or statuses. Waiting consumes initial nonstring status locally; initial error never shortcuts the fresh GET. Fresh available succeeds before fresh case-insensitive error failure, while null status is nonterminal. Every poll merges prior fields and uses the latest logical ID only when another safe member request is reached, so terminal unsafe IDs need no route. Tests: blockstorage/snapshot_mutation_create_contract_test.go:TestCreateVolumeSnapshotCachedReadySkipsUnusedWaitAndRouteControls, blockstorage/snapshot_mutation_create_contract_test.go:TestCreateVolumeSnapshotNoWaitKeepsArbitraryNullableIdentityAndStatus, blockstorage/snapshot_mutation_wait_contract_test.go:TestCreateVolumeSnapshotFreshPollOverridesInitialErrorBeforeFailure, blockstorage/snapshot_mutation_wait_contract_test.go:TestCreateVolumeSnapshotFreshErrorOrInvalidStatusKeepsCreatedAndLastAccepted, blockstorage/snapshot_mutation_wait_contract_test.go:TestCreateVolumeSnapshotInitialNonstringStatusIsConsumedOnlyWhenWaiting, blockstorage/snapshot_mutation_wait_contract_test.go:TestCreateVolumeSnapshotWaitRebindsLatestLogicalIDButDoesNotRouteTerminalUnsafeID, blockstorage/snapshot_mutation_wait_contract_test.go:TestCreateVolumeSnapshotNonterminalUnsafeIDFailsBeforeAnotherPhysicalPoll, blockstorage/snapshot_mutation_wait_contract_test.go:TestCreateVolumeSnapshotToleratedPollBodiesMergePriorStateBeforeTerminalCheck, internal/cloudsnapshot/mutation_state_test.go:TestSnapshotMutationStateRawIDsAndNullableStatusesValidateOnlyAtReachedPhases.

  • Create SDK wait budget starts after POST/initial readiness check. Nil is unlimited, explicit nonpositive timeout fails before polling, and positive expiry is checked at loop boundaries without deriving an HTTP context deadline; a slow target GET succeeds. Interval defaults2s, zero normalizes100ms or a smaller positive timeout, and negative interval fails only at reached nonterminal sleep. Parent context cancellation still governs transport/sleep. Tests: blockstorage/snapshot_mutation_wait_contract_test.go:TestCreateVolumeSnapshotExplicitNonpositiveTimeoutIsPostCreateAndPrePoll, blockstorage/snapshot_mutation_wait_contract_test.go:TestCreateVolumeSnapshotPositiveWaitBudgetBeginsAfterCreationAndDoesNotAbortSlowTargetGET, blockstorage/snapshot_mutation_wait_contract_test.go:TestCreateVolumeSnapshotPositiveTimeoutIsNoticedAtNextLoopBoundary, blockstorage/snapshot_mutation_wait_contract_test.go:TestCreateVolumeSnapshotPollIntervalsAreConsumedOnlyAtNonterminalSleep.

  • Native retry cannot replace owned POST body, fixed route, method, decoder, retention, original status policy or captured source. Native auth is live but orchestration does not independently replay create or roll back accepted resources. Tests: blockstorage/snapshot_mutation_transport_test.go:TestVolumeSnapshotMutationCreateRetryCannotReplaceOwnedBodyOrDecoder.

Python/Go differences:

  • Only this actual direct BlockStorageCloudMixin cloud helper is mapped with selected Cinder v3 and Gophercloud v2.15.0. Independent Proxy/native/v2/Resource/session/adapter declarations retain separate reviews; full SDK remains incomplete.
  • Python defaults/kwargs and mutable runtime objects map to explicit Go request types and library-owned concrete With/Prepare options. Go controls use finite JSON, typed pointers and time.Duration rather than Python runtime objects or arbitrary Resource identity.
  • Owned raw HTTP/resource proof and normalized nullable logical stages are separate Go representations. Unknown raw fields and number spelling remain physical evidence; source stale dict cache, mutable Resource identity and session memoization are not reproduced.
  • Ordinary eager descriptor and parsed dictionary duplicate/alias semantics are preserved. Exact decimal truthiness/equality, Unicode16 decimal tables and arbitrary integers do not reproduce Python float rounding/underflow or configurable CPython integer digit limits.
  • Go requires complete valid UTF8 for consumed JSON and safe unescaped UTF8 member route segments; arbitrary runtime/route-changing coercion is excluded. Request VolumeID is literal body data and does not require route validation. Only reached fields/status/route/wait controls are validated.
  • Direct source capture, owned ordinary headers, sticky fixed-request/source/cause guards and atomic logical publication are Go safety/proof extensions. Native token/reauth/retry stays live; SDK orchestration adds no replay, rollback or cache invalidation.
  • Configured/authenticated location is captured and recomputed from project descriptors with null snapshot zone; raw location/availability_zone cannot replace it. Explicit selected Cinder microversion is preserved without automatic3.65 discovery/cap/upgrade or v2 selection.
  • Wait timeout is a nullable Go duration checked at source loop boundaries without an HTTP-derived context deadline. Parent contexts supply transport/sleep cancellation. Configurable poll interval is a Go extension; default2s and source zero100ms/smaller-timeout behavior are preserved.
  • Source creation default force=false/wait=true, four kwargs, merged request seed and initial available shortcut are preserved. No automatic native projection, generated names or metadata kwargs are added.
python:cloud/_block_storage/BlockStorageCloudMixin/delete_volume_snapshot

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk.Connection.DeleteVolumeSnapshot

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.DeleteVolumeSnapshot

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.PrepareDeleteVolumeSnapshotOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithDeleteVolumeSnapshotOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithDeleteVolumeSnapshotWait

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithDeleteVolumeSnapshotWaitPolicy

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithDeleteVolumeSnapshotLocation

  • Concrete With/Prepare policy preserves omitted versus explicit false/zero, complete replacement and all raw nullable attributes/location/wait subtrees. Original callbacks run exactly once in captured slice order with an owned snapshot after each callback; factories support concurrent reuse. Preparation is pure and defers reached-value validation. Nil options/context, cancellation including custom causes and callback errors return no partial policy or HTTP. Tests: blockstorage/snapshot_mutation_options_test.go:TestSnapshotMutationOptionsPreserveOmissionAndExplicitFalseZero, blockstorage/snapshot_mutation_options_test.go:TestSnapshotMutationOptionsCompleteFactoriesOwnEverySubtreeAcrossReuses, blockstorage/snapshot_mutation_options_test.go:TestSnapshotMutationOptionsFactoriesSupportConcurrentIndependentPreparedValues, blockstorage/snapshot_mutation_options_test.go:TestSnapshotMutationOptionsAttributeFactoriesRetainAllAliasesWithoutNormalizing, blockstorage/snapshot_mutation_options_test.go:TestSnapshotMutationOptionsRawFactoriesPreserveNilEmptyMapsAndExactByteShapes, blockstorage/snapshot_mutation_options_test.go:TestSnapshotMutationOptionsIndividualFactoriesOverrideOnlySelectedSubtrees, blockstorage/snapshot_mutation_options_test.go:TestSnapshotMutationOptionsCompleteReplacementClearsPriorPolicyAndSubtrees, blockstorage/snapshot_mutation_options_test.go:TestSnapshotMutationOptionsCaptureOriginalSliceAndIsolateRetainedCallbacks, blockstorage/snapshot_mutation_options_test.go:TestSnapshotMutationOptionsRejectMissingCanceledOrExpiredContextBeforeCallbacks, blockstorage/snapshot_mutation_options_test.go:TestSnapshotMutationOptionsStopOnNilErrorOrCancellationWithoutPartialPolicy, blockstorage/snapshot_mutation_options_test.go:TestSnapshotMutationOptionsPreparationIsPureAndDefersReachedValueValidation.

  • Direct workflows capture provider/endpoint/ResourceBase/type/microversion before originals and ordinary headers as owned snapshots while auth tokens remain live. Sticky source changes and original failures join context causes before HTTP. Connection prepares originals once before only cached Cinder v3 selection without readiness probing; recorded/explicit scope is owned after originals and before getter, retaining snapshot location across phases. Tests: blockstorage/snapshot_mutation_source_test.go:TestVolumeSnapshotMutationOriginalFailuresJoinSourceAndContextBeforeHTTP, blockstorage/snapshot_mutation_source_test.go:TestVolumeSnapshotMutationDirectCaptureOwnsHeadersOptionsAndEveryPublishedStage, connection_volume_snapshot_mutations_test.go:TestConnectionSnapshotMutationsOriginalsPrecedeOnlyCinderV3AndReuseCacheWithoutReadiness, connection_volume_snapshot_mutations_test.go:TestConnectionSnapshotMutationsCaptureRecordedScopeAfterOriginalsBeforeGetterAcrossWait, connection_volume_snapshot_mutations_test.go:TestConnectionSnapshotMutationsExplicitLocationAndRetainedOriginalsStayOwned, connection_volume_snapshot_mutations_test.go:TestConnectionSnapshotMutationsNonemptyPreflightAndGetterFailuresKeepOperationCauses.

  • Snapshot logical state merges only known descriptors while preserving raw descriptor values, duplicate-key insertion/alias order and eager nullable16-field conversion. Location is recomputed from captured current/foreign-project scope and zone is null. Partial/flat responses merge prior state; valid UTF8 empty/malformed JSON has no actual object, parsed {} is an actual empty resource, and valid wrong shape/envelope/null or invalid UTF8 fails with current physical proof. Tests: internal/cloudsnapshot/mutation_state_test.go:TestSnapshotMutationStateMergesKnownPartialFieldsWithoutChangingRawDescriptorValues, internal/cloudsnapshot/mutation_state_test.go:TestSnapshotMutationStateAliasesUseParsedDuplicateInsertionOrder, internal/cloudsnapshot/mutation_state_test.go:TestSnapshotMutationStateConversionIsEagerAndErrorsDoNotRewriteRawState, internal/cloudsnapshot/mutation_response_test.go:TestSnapshotMutationObjectDistinguishesToleranceFromActualEmptyAndRejectsWrongShape, internal/cloudsnapshot/mutation_response_test.go:TestSnapshotMutationObjectOwnsActualFieldsAndMetadataSeparatelyFromLogicalView.

  • Accepted physical body/header/status, raw resources, logical stages and errors own independent copies. Admitted read/Close/source/context failures keep the actual current phase and all causes while completed logical outputs remain unpublished. Later blocked/canceled/rejected requests keep prior phase proof without borrowing it as the new failure response. Opaque mutation acknowledgement bytes remain actual proof. Tests: internal/cloudsnapshot/mutation_response_test.go:TestSnapshotMutationProofKeepsOpaqueBytesAndEveryPhaseOwnsItsCopy, blockstorage/snapshot_mutation_transport_test.go:TestVolumeSnapshotMutationAcceptedFailuresRetainCurrentPhaseAndCauses, connection_volume_snapshot_mutations_test.go:TestConnectionSnapshotMutationsDescriptorAndDeleteRejectionRetainTheirOwnPhase, connection_volume_snapshot_mutations_test.go:TestConnectionSnapshotMutationsAcceptedIOFailuresJoinReadCloseAndCallerCause, connection_volume_snapshot_mutations_test.go:TestConnectionSnapshotMutationsBlockedFreshPollPreservesEarlierProofAndCustomCause.

  • Delete defaults wait=false. Empty NameOrID runs original policy/context checks once then returns false without consuming service/location, including nil Connection/client. Nonempty uses exact member lookup with only clean original concrete400/403/404 fallback, preserves normal absence and ambiguity, and requires exhausted unique fallback before mutation. Actual selected logical ID, including the missing-member-ID seed, determines the safe DELETE route; explicit null cannot route and raw fields are not manufactured. Tests: blockstorage/snapshot_mutation_delete_contract_test.go:TestDeleteVolumeSnapshotDefaultWaitOffDeletesActualResolvedIDWithOpaqueAcknowledgement, blockstorage/snapshot_mutation_delete_contract_test.go:TestDeleteVolumeSnapshotEmptyInputRunsOriginalsOnceWithoutConsumingServiceOrLocation, blockstorage/snapshot_mutation_delete_contract_test.go:TestDeleteVolumeSnapshotFallbackRequiresCompletedExactLookupAndPreservesAbsenceOrAmbiguity, blockstorage/snapshot_mutation_delete_contract_test.go:TestDeleteVolumeSnapshotMemberMissingIDSeedsLookupButExplicitNullCannotRoute, connection_volume_snapshot_mutations_test.go:TestConnectionSnapshotMutationEmptyDeleteIsServiceFreeEvenForNilConnection, internal/cloudsnapshot/mutation_state_test.go:TestSnapshotMutationStateDeleteLogicalSeedDoesNotManufacturePhysicalFields.

  • DELETE is bodyless without force/cascade and original HTTP100..399 acknowledgement is opaque, including nonJSON or binary bytes. No-wait returns true only after acknowledgement and guards. Original DELETE404 is terminal with mutation evidence and can never be treated as completed polling absence. Tests: blockstorage/snapshot_mutation_delete_contract_test.go:TestDeleteVolumeSnapshotDefaultWaitOffDeletesActualResolvedIDWithOpaqueAcknowledgement, blockstorage/snapshot_mutation_delete_contract_test.go:TestDeleteVolumeSnapshotMutation404IsTerminalAndNeverPollAbsence, connection_volume_snapshot_mutations_test.go:TestConnectionSnapshotMutationsDescriptorAndDeleteRejectionRetainTheirOwnPhase.

  • With wait=true, cached deleted alone cannot complete: after reached timeout/context/route guards, delete performs a fresh GET. Fresh case-insensitive deleted or a clean original concrete GET404 completes; error/error_deleting are nonterminal, fresh null/nonstring status is local failure, and omitted/empty/malformed fresh body merges prior state before terminal checks. The latest merged ID routes only a subsequent needed request. Deleted stays nil on error, false on initial absence/empty input, true only after completion. Tests: blockstorage/snapshot_mutation_delete_contract_test.go:TestDeleteVolumeSnapshotWaitAlwaysFetchesFreshAndToleratesMalformedBodyByMergingPriorDeleted, blockstorage/snapshot_mutation_delete_contract_test.go:TestDeleteVolumeSnapshotFreshNullOrNonstringStatusIsAnErrorAfterAcknowledgement, blockstorage/snapshot_mutation_delete_contract_test.go:TestDeleteVolumeSnapshotErrorsAreNonterminalAndLatestMergedIDControlsNextPoll, blockstorage/snapshot_mutation_delete_contract_test.go:TestDeleteVolumeSnapshotCleanPolling404CompletesWithSeparateAbsenceProof, internal/cloudsnapshot/mutation_state_test.go:TestSnapshotMutationStateRawIDsAndNullableStatusesValidateOnlyAtReachedPhases, internal/cloudsnapshot/mutation_state_test.go:TestSnapshotMutationStateDeleteLogicalSeedDoesNotManufacturePhysicalFields.

  • Delete wait budget starts after acknowledgement, overrides the standalone Proxy120-second default with cloud nil-unlimited behavior, and explicit nonpositive timeout fails before even a cached-deleted fresh GET. Positive SDK expiry is loop-only and does not abort a slow terminal GET; parent contexts still cancel HTTP/sleep. Nil-unlimited routing and multi-poll behavior are runtime fixtures; Python120-second default contrast is pinned source evidence, not a120-second live Go run. Tests: blockstorage/snapshot_mutation_delete_contract_test.go:TestDeleteVolumeSnapshotErrorsAreNonterminalAndLatestMergedIDControlsNextPoll, blockstorage/snapshot_mutation_delete_contract_test.go:TestDeleteVolumeSnapshotNonpositiveWaitTimeoutIsCheckedAfterDELETEBeforeEvenCachedDeletedGET, blockstorage/snapshot_mutation_delete_contract_test.go:TestDeleteVolumeSnapshotPositiveBudgetStartsAfterDELETEAndAcceptsSlowFreshDeleted, blockstorage/snapshot_mutation_options_test.go:TestSnapshotMutationOptionsPreserveOmissionAndExplicitFalseZero, blockstorage/snapshot_mutation_options_test.go:TestSnapshotMutationOptionsPreparationIsPureAndDefersReachedValueValidation.

  • Polling404 needs completed clean body Read/Close and source/context guards. Gophercloud v2.15.0 ignores unexpected-code read/Close errors, so the private observer preserves original rejection policy and joins all faults, including joined EOF/custom Read and Close EOF, preventing false absence. Wrapped native errors or expanded >=400 policy never complete. Native404 retry-to200 and401 reauth remain live with fixed request guards; clean404 has separate Absent proof rather than LastAccepted proof. Tests: blockstorage/snapshot_mutation_transport_test.go:TestVolumeSnapshotMutationDelete404RequiresCleanReadCloseAndGuard, blockstorage/snapshot_mutation_transport_test.go:TestVolumeSnapshotMutationDeletePollingPreservesLiveAuthAndNative404Retry, blockstorage/snapshot_mutation_delete_contract_test.go:TestDeleteVolumeSnapshotCleanPolling404CompletesWithSeparateAbsenceProof.

Python/Go differences:

  • Only this actual direct BlockStorageCloudMixin cloud helper is mapped with selected Cinder v3 and Gophercloud v2.15.0. Independent Proxy/native/v2/Resource/session/adapter declarations retain separate reviews; full SDK remains incomplete.
  • Python defaults/kwargs and mutable runtime objects map to explicit Go request types and library-owned concrete With/Prepare options. Go controls use finite JSON, typed pointers and time.Duration rather than Python runtime objects or arbitrary Resource identity.
  • Owned raw HTTP/resource proof and normalized nullable logical stages are separate Go representations. Unknown raw fields and number spelling remain physical evidence; source stale dict cache, mutable Resource identity and session memoization are not reproduced.
  • Ordinary eager descriptor and parsed dictionary duplicate/alias semantics are preserved. Exact decimal truthiness/equality, Unicode16 decimal tables and arbitrary integers do not reproduce Python float rounding/underflow or configurable CPython integer digit limits.
  • Go requires complete valid UTF8 for consumed JSON and safe unescaped UTF8 member route segments; arbitrary runtime/route-changing coercion is excluded. Request VolumeID is literal body data and does not require route validation. Only reached fields/status/route/wait controls are validated.
  • Direct source capture, owned ordinary headers, sticky fixed-request/source/cause guards and atomic logical publication are Go safety/proof extensions. Native token/reauth/retry stays live; SDK orchestration adds no replay, rollback or cache invalidation.
  • Configured/authenticated location is captured and recomputed from project descriptors with null snapshot zone; raw location/availability_zone cannot replace it. Explicit selected Cinder microversion is preserved without automatic3.65 discovery/cap/upgrade or v2 selection.
  • Wait timeout is a nullable Go duration checked at source loop boundaries without an HTTP-derived context deadline. Parent contexts supply transport/sleep cancellation. Configurable poll interval is a Go extension; default2s and source zero100ms/smaller-timeout behavior are preserved.
  • Source deletion default wait=false and empty input false are preserved with nullable bool Deleted. Mutation404 stays terminal; only a clean original concrete polling404 completes. Extra body-fault observation compensates for native ignored rejection Read/Close errors without bypassing native retry.
python:cloud/_block_storage/BlockStorageCloudMixin/list_volume_backups

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk.Connection.ListVolumeBackups

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.ListVolumeBackups

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.PrepareVolumeBackupListOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeBackupListOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeBackupListFilters

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeBackupListDetailed

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeBackupListPagination

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeBackupListMaxItems

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeBackupListMicroversion

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeBackupListHeaders

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeBackupListExpression

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeBackupListAllowUnknownParams

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeBackupListConflictingAttrs

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeBackupListLocation

  • Library-owned list policy preserves omission and source defaults detailed=true and paginated=true. Default detailed GET/backups/detail and basic GET/backups return complete owned lists. Preparation is pure; original callbacks run once from a captured slice and each snapshot owns raw filters, headers, pointer controls and location. Connection validates reached binding policy before selecting only cached Cinder v3 without readiness I/O. Tests: blockstorage/volume_backup_read_contract_test.go:TestVolumeBackupReadListDefaultDetailedAndBasicKeepCanonicalEmptyEOF, blockstorage/backup_read_transport_test.go:TestVolumeBackupReadOriginalOptionsOwnEveryPreparedValueAndSourceHeaders, connection_volume_backups_test.go:TestConnectionVolumeBackupOriginalOptionsRunOnceBeforeCachedCinderForEveryEntry, connection_volume_backups_test.go:TestConnectionVolumeBackupPreflightAndGetterFailuresKeepBackupOperationAndJoinedCauses, connection_volume_backups_test.go:TestConnectionVolumeBackupListBindingValidationPrecedesServiceSelection, connection_volume_backups_test.go:TestConnectionVolumeBackupCapturedOptionSliceAndRetainedPointersCannotReplacePreparedPolicy, internal/cloudsnapshot/backup_query_test.go:TestBackupListPolicyOwnsQueryLocalHeadersAndResourceSelectionAcrossReuse, internal/cloudsnapshot/backup_query_test.go:TestBackupListFalseyAndInvalidRawPoliciesHaveAtomicResourceSpecificCompilation.

  • Logical backups expose exactly nullable24 descriptors, distinct from typed native backups or Snapshot. force/is_incremental/has_dependent_backups use ordinary Python JSON-domain bool, links wraps a nonlist singleton, metadata uses nullable dict and size/object_count apply eager nullable integer conversion. Known conversions precede local exclusion; unknown raw fields remain only in physical evidence. Parsed duplicate insertion/alias order is preserved. Tests: blockstorage/volume_backup_read_contract_test.go:TestVolumeBackupReadListOwnsAllTwentyFourFieldsAndRawIndependentProofs, blockstorage/volume_backup_read_contract_test.go:TestVolumeBackupReadInvalidIntegersAreEagerBeforeLocalExclusion, blockstorage/volume_backup_read_contract_test.go:TestVolumeBackupReadCollectionEnvelopeAndListConstructorControlsStayResourceSpecific, internal/cloudsnapshot/backup_model_test.go:TestBackupModelHasTwentyFourNullableFieldsAndOwnDescriptorOrder, internal/cloudsnapshot/backup_model_test.go:TestBackupModelOrdinaryBooleanDescriptorsAreNullableAndDoNotUseBoolStr, internal/cloudsnapshot/backup_model_test.go:TestBackupModelLinksWrapSingleValuesAndMetadataUsesOrdinaryNullableDict, internal/cloudsnapshot/backup_model_test.go:TestBackupModelBothIntegerDescriptorsConvertBeforeAnySelection, internal/cloudsnapshot/backup_model_test.go:TestBackupModelProjectAliasesFollowParsedDuplicateFirstInsertionOrder, internal/cloudsnapshot/backup_model_test.go:TestBackupModelListConstructorControlsDoNotBecomeMemberResponseControls, internal/cloudsnapshot/backup_query_test.go:TestBackupListCallerPredicatesAreNeverCoercedLikeBackupResponseDescriptors.

  • Current/explicit scope is owned after originals and before the Connection getter, then retained across live-auth pages. Backup project wire alias and literal availability_zone recompute location; current/falsey projects retain configured names, foreign projects clear them. Caller zone/wire location cannot replace it. Physical descriptor failures and caller-local invalid location remain distinct and atomic. Tests: connection_volume_backups_test.go:TestConnectionVolumeBackupLocationIsCapturedAfterOriginalsBeforeGetterAndKeepsRawZoneAcrossLiveAuthPages, connection_volume_backups_test.go:TestConnectionVolumeBackupExplicitLocationOwnsEveryFieldAndUsesBackupProjectAndZone, internal/cloudsnapshot/backup_model_test.go:TestBackupModelLocationUsesBothRowProjectAndLiteralAvailabilityZone, internal/cloudsnapshot/backup_model_test.go:TestBackupModelPhysicalAndLocalLocationFailuresAreAtomicAndOutputIsOwned.

  • List separates actual server query mappings from ordered local Body predicates. Raw all_projects is literal all_tenants data and canonical presence beats its wire alias even falsey; late conflicting attrs bypass earlier Proxy bindings. Typed controls override the final applicable raw controls while preserving stage collisions. Unknown, Snapshot-only, native-only and creation-only names are ignored; caller predicates are uncoerced and use nested Python bool/numeric equality. Tests: blockstorage/volume_backup_read_contract_test.go:TestVolumeBackupReadAllProjectsIsLiteralWhileSnapshotProxyBindsTruthiness, blockstorage/volume_backup_read_contract_test.go:TestVolumeBackupReadLocalAttributesDifferFromIgnoredSnapshotAndCreationNames, blockstorage/volume_backup_read_contract_test.go:TestVolumeBackupReadLocalFilterOrderIsLazyAfterEagerBoolNormalization, internal/cloudsnapshot/backup_query_test.go:TestBackupListAllProjectsPreservesRawValuesInsteadOfSnapshotProxyTruthiness, internal/cloudsnapshot/backup_query_test.go:TestBackupListCanonicalAllProjectsPresenceWinsWireAliasEvenWhenFalsey, internal/cloudsnapshot/backup_query_test.go:TestBackupListLateAliasOverlayDoesNotPassThroughEitherProxyAgain, internal/cloudsnapshot/backup_query_test.go:TestBackupListQueryUsesItsOwnBodyPredicatesAndPreservesServerOnlyParameters, internal/cloudsnapshot/backup_query_test.go:TestBackupListCallerPredicatesAreNeverCoercedLikeBackupResponseDescriptors, internal/cloudsnapshot/backup_query_test.go:TestBackupListControlsKeepBindingStageAndTypedOverridesIndependentOfResourceModel, internal/cloudsnapshot/backup_query_test.go:TestBackupListFalseyAndInvalidRawPoliciesHaveAtomicResourceSpecificCompilation.

  • Raw canonical backups pages preserve actual rows, duplicate identities and plural backups_links continuation. Empty canonical collection ends before unused links. Source body-link precedence/falsey fallback, advertised query merge and repeated/null Requests-domain values are preserved within safe fixed-origin/path URLs; source HTTP uri/url mismatch is explicitly repaired. A truthy initial limit may follow the last consumed arbitrary raw ID even from an excluded short-page row into a second empty EOF. Tests: blockstorage/volume_backup_read_contract_test.go:TestVolumeBackupReadShortLimitUsesExcludedArbitraryMarkerThenEmptyEOF, blockstorage/volume_backup_read_contract_test.go:TestVolumeBackupReadBackupsLinksMaterializeDistinctRowsAcrossPages.

  • Maximum counts consumed raw rows including local exclusions; source zero is unlimited and negative maximum still fetches/parses the first canonical response before stopping. Unconsumed row constructors remain lazy. At an exact page-end maximum, source continuation and another canonical HTTP response may occur before the next raw-count check. Detailed/pagination/max/header/microversion policies remain per call and cannot alter cached source or Snapshot schema. Tests: blockstorage/volume_backup_read_contract_test.go:TestVolumeBackupReadMaximumCountsExcludedRowsAndDefersUnusedConstruction, blockstorage/volume_backup_read_contract_test.go:TestVolumeBackupReadMaximumAtPageEndStillFetchesAndDecodesNextResponse, connection_volume_backups_test.go:TestConnectionVolumeBackupListControlsStayPerCallAndDoNotLeakSnapshotQueryOrModel, internal/cloudsnapshot/backup_query_test.go:TestBackupListControlsKeepBindingStageAndTypedOverridesIndependentOfResourceModel, internal/cloudsnapshot/backup_query_test.go:TestBackupListPolicyOwnsQueryLocalHeadersAndResourceSelectionAcrossReuse.

  • Explicit list expression evaluates the completed normalized backup array, including empty syntax errors, and returns arbitrary owned JSON without fabricated raw-row association. Raw falsey expression controls remain omitted. This whole-value behavior deliberately repairs the source expression-on-generator defect, while ordinary successful empty selection exposes an owned nonnil empty Backups slice. Tests: blockstorage/volume_backup_read_contract_test.go:TestVolumeBackupReadListExpressionUsesCompletedBackupValueAndNoRowAssociation, internal/cloudsnapshot/backup_query_test.go:TestBackupListFalseyAndInvalidRawPoliciesHaveAtomicResourceSpecificCompilation, blockstorage/volume_backup_read_contract_test.go:TestVolumeBackupReadListDefaultDetailedAndBasicKeepCanonicalEmptyEOF.

  • Logical Value/Backups publish only after requested completion. Admitted Pages own original100..399 body/header/status, independent from row values/errors. Accepted Read/Close/source/context faults retain current proof and joined cancellation causes; later rejected/unreceived phases retain earlier pages without borrowing their response. Fixed bodyless requests keep live native reauth/retry and captured headers; concurrent Snapshot/Backup calls cannot change either closed schema. Tests: blockstorage/backup_read_transport_test.go:TestVolumeBackupReadAcceptedReadCloseCancellationRetainsCurrentPhysicalStage, blockstorage/backup_read_transport_test.go:TestVolumeBackupReadNativeReauthRetryKeepLiveTokenAndOwnedSourceOnce, connection_volume_backups_test.go:TestConnectionVolumeBackupAcceptedIOJoinsReadCloseCancellationAndSourceDriftWithCurrentProof, connection_volume_backups_test.go:TestConnectionVolumeBackupLaterFailureRetainsPagesWithoutBorrowingEarlierMemberEvidence, blockstorage/volume_backup_read_isolation_test.go:TestVolumeBackupReadConcurrentSnapshotAndBackupCallsKeepSchemaPolicyIsolated, internal/cloudsnapshot/backup_query_test.go:TestBackupListPolicyOwnsQueryLocalHeadersAndResourceSelectionAcrossReuse.

Python/Go differences:

  • Only this actual direct BlockStorageCloudMixin cloud helper is mapped with selected Cinder v3 and Gophercloud v2.15.0. Independent Proxy, native typed leaf, v2 Backup, generic Resource/session/adapter and backup mutation/export declarations retain separate reviews; the full SDK remains incomplete.
  • Python mutable kwargs/runtime objects map to owned Go request strings, nullable concrete With/Prepare policy, finite UTF8 JSON, raw-resource evidence and a separate normalized nullable24-field view. Go does not reproduce Resource identity, stale dict caches, session memoization, deprecated warning emission or arbitrary Python object coercion.
  • Parsed JSON dictionary insertion order and duplicate-key first-position/last-value alias traversal are preserved. Exact decimal truthiness/equality and arbitrary integers do not reproduce Python float rounding/underflow or configurable CPython integer digit limits; the Go Unicode16 decimal table is an explicit version boundary.
  • The selected Cinder microversion is retained, including explicit list overrides. Source Backup max3.64 limits absent-default negotiation only; Go performs no automatic negotiation, cap, upgrade or v2 selection. Selected and operation-owned headers are captured and validated while provider auth/reauth/retry tokens remain live.
  • Captured current or explicit location is recomputed from the actual backup project alias and literal availability_zone. Raw location and caller zone cannot replace the owned scope. This connected cloud-helper model is distinct from standalone/disconnected Resource constructor behavior.
  • Go validates consumed UTF8 JSON and safe literal member/continuation URLs, same origin/escaped path and canonical full-URL cycles. Source relative /v joining, query-only physical duplication and same-marker cycle rules are bounded by those deliberate safety rules. Robust HTTP Link URL support repairs the source uri/url mismatch.
  • Direct source snapshots precede original callbacks; Connection originals run once before only cached Cinder v3 selection, with location captured after originals before the getter. Fixed bodyless requests, sticky source/cause guards, independently owned phase proof and atomic logical publication are Go extensions; caller-configured native retry remains live and the SDK adds no orchestration replay.
  • Accepted response Read/Close/context/source faults retain their own physical evidence. Ordinary member native400/403/404 has a scoped body-fault observer so only fault-free original concrete rejections permit lookup fallback, without admitting those statuses or fabricating Observed. Rejected list responses and other rejected member statuses retain Gophercloud v2.15.0 discarded unexpected-body Read/Close behavior; this is not a universal rejection-I/O observer.
  • Local descriptor/predicate/selection errors keep completed independently admitted proof and do not borrow a successful response as a new local failure. Source probes use explicit AST/session/response/location stand-ins and are source-only, not authenticated Python/OpenStack runtime evidence.
  • Backup Proxy has no named all_projects argument: raw all_projects is a literal Resource alias to all_tenants. Snapshot named-argument truthiness/drop is intentionally isolated. Server-query versus local descriptor predicates, late conflicting-attribute remapping and inherited pagination/max/header/microversion controls have explicit owned Go equivalents; unsupported unknown keys remain ignored.
  • Explicit list expression evaluates the completed normalized list, including empty-expression syntax failure. Raw falsey jmespath_filters skips evaluation. This repairs the source generator passed to selected Python JMESPath reference, whose projection can return None before iteration; it is a whole-value Go mapping, not a claim to reproduce that generator defect.
python:cloud/_block_storage/BlockStorageCloudMixin/search_volume_backups

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk.Connection.SearchVolumeBackups

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.SearchVolumeBackups

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.PrepareVolumeBackupSearchOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeBackupSearchOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeBackupSearchFilters

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeBackupSearchExpression

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeBackupSearchLocation

  • Search always completes a queryless default-detailed backup list and every reached nullable descriptor before applying local identifier/filter selection. A matching first row cannot hide a later excluded malformed descriptor or later page failure; no partial Value/Backups is published. Search does not send a name hint or caller filter as list query. Tests: blockstorage/volume_backup_read_selection_test.go:TestVolumeBackupReadSearchCompletesQuerylessPagesBeforeBackupExpression, blockstorage/volume_backup_read_selection_test.go:TestVolumeBackupReadSearchDoesNotHideExcludedLaterDescriptorFailure, blockstorage/volume_backup_read_contract_test.go:TestVolumeBackupReadInvalidIntegersAreEagerBeforeLocalExclusion.

  • Within finite JSON, optional NameOrID uses source per-row exact ID/name OR case-sensitive fnmatch over Python-style value stringification. It preserves source order, duplicate match occurrences, Unicode/rune and dot-all glob/class behavior. Empty identifier skips that stage rather than becoming an ordinary member lookup. Tests: blockstorage/volume_backup_read_selection_test.go:TestVolumeBackupReadSearchCompletesQuerylessPagesBeforeBackupExpression, internal/cloudfilter/identifier_test.go:TestCloudFilterIdentifierPreservesPerRowExactGlobMatchesDuplicatesAndSourceOrder, internal/cloudfilter/identifier_test.go:TestCloudFilterGlobUsesCPythonRuneDotAllClassesAndLiteralBackslashes, internal/cloudfilter/identifier_test.go:TestCloudFilterIdentifiersUsePythonJSONDomainStringAndContainerRepresentation, internal/cloudfilter/identifier_test.go:TestCloudFilterMissingAndNullIdentifiersDifferFromEmptyStringsAndRemainCaseSensitive.

  • Mapping filters evaluate normalized backups as ordered recursive subsets. Reached unknown keys and invalid filter shape are local errors; preceding identifier or predicate mismatch can leave later keys unused. Actual truthiness precedes empty-object matching, nested arrays keep exact shape and bool/number equality follows Python within the precise JSON numeric domain. Tests: blockstorage/volume_backup_read_contract_test.go:TestVolumeBackupReadLocalAttributesDifferFromIgnoredSnapshotAndCreationNames, internal/cloudsnapshot/backup_query_test.go:TestBackupListCallerPredicatesAreNeverCoercedLikeBackupResponseDescriptors, internal/cloudfilter/mapping_test.go:TestCloudFilterOrderedMappingConsumesOnlyReachedKeysAndKeepsDuplicateFirstPosition, internal/cloudfilter/mapping_test.go:TestCloudFilterNestedEmptyObjectsUseActualTruthinessBeforeShapeOrMissingKeys, internal/cloudfilter/mapping_test.go:TestCloudFilterLeafEqualityKeepsExactArrayShapeAndPythonBooleanNumberPrecision, internal/cloudfilter/mapping_test.go:TestCloudFilterNonmappingFilterShapeIsLazyAfterIdentifierAndActualTruthiness, internal/cloudfilter/mapping_test.go:TestCloudFilterInvalidJSONIsLocalAtomicAndStillValidatedAfterEmptyIdentifierSelection.

  • String/explicit expression filters evaluate the complete selected normalized JSON through the full owned JMESPath engine and may return any JSON value. Projection has nil raw Backups association; ordinary selection retains its real rows. Expression/selection errors are local, preserve completed Pages, and do not invent an HTTP response or partial output. Tests: blockstorage/volume_backup_read_selection_test.go:TestVolumeBackupReadSearchCompletesQuerylessPagesBeforeBackupExpression, blockstorage/volume_backup_read_selection_test.go:TestVolumeBackupReadGetArbitraryExpressionRetainsNoBackupAssociation, internal/cloudfilter/results_test.go:TestCloudFilterExpressionBridgeReturnsArbitraryOwnedJSONWithoutInventedRowIndices, internal/cloudfilter/results_test.go:TestCloudFilterExpressionsStillParseEmptySelectionAndKeepRuntimeFailuresAtomic.

  • Search consumes the same closed Backup nullable24 descriptor policy: ordinary Boolean values, singleton links, nullable dict/integers, duplicate alias order and project plus literal zone location. Unknown raw fields stay in owned RawResource proof; mutable descriptor globals and concurrent Snapshot calls cannot leak Snapshot BoolStr, query all-projects or zoneless policy into Backup. Tests: internal/cloudsnapshot/backup_model_test.go:TestBackupModelHasTwentyFourNullableFieldsAndOwnDescriptorOrder, internal/cloudsnapshot/backup_model_test.go:TestBackupModelOrdinaryBooleanDescriptorsAreNullableAndDoNotUseBoolStr, internal/cloudsnapshot/backup_model_test.go:TestBackupModelLinksWrapSingleValuesAndMetadataUsesOrdinaryNullableDict, internal/cloudsnapshot/backup_model_test.go:TestBackupModelBothIntegerDescriptorsConvertBeforeAnySelection, internal/cloudsnapshot/backup_model_test.go:TestBackupModelProjectAliasesFollowParsedDuplicateFirstInsertionOrder, internal/cloudsnapshot/backup_model_test.go:TestBackupModelLocationUsesBothRowProjectAndLiteralAvailabilityZone, blockstorage/volume_backup_read_isolation_test.go:TestVolumeBackupReadConcurrentSnapshotAndBackupCallsKeepSchemaPolicyIsolated, blockstorage/volume_backup_read_contract_test.go:TestVolumeBackupReadListOwnsAllTwentyFourFieldsAndRawIndependentProofs.

  • Concrete With/Prepare search options own raw filters/expression/location across reusable factories and callbacks. Direct service capture precedes originals; Connection originals run once before only cached Cinder v3 selection, then explicit/current location is captured before getter/auth changes. Preflight/callback/getter errors retain operation and custom context causes with no invented physical stage. Tests: connection_volume_backups_test.go:TestConnectionVolumeBackupOriginalOptionsRunOnceBeforeCachedCinderForEveryEntry, connection_volume_backups_test.go:TestConnectionVolumeBackupLocationIsCapturedAfterOriginalsBeforeGetterAndKeepsRawZoneAcrossLiveAuthPages, connection_volume_backups_test.go:TestConnectionVolumeBackupExplicitLocationOwnsEveryFieldAndUsesBackupProjectAndZone, connection_volume_backups_test.go:TestConnectionVolumeBackupPreflightAndGetterFailuresKeepBackupOperationAndJoinedCauses, connection_volume_backups_test.go:TestConnectionVolumeBackupCapturedOptionSliceAndRetainedPointersCannotReplacePreparedPolicy, blockstorage/backup_read_transport_test.go:TestVolumeBackupReadOriginalOptionsOwnEveryPreparedValueAndSourceHeaders.

  • Search Value/Backups is atomic after completion; admitted Pages and raw rows own independent bytes/header/status. Accepted Read/Close/cancel/source failures preserve their current stage and all joined causes, while a later rejected or blocked phase keeps only actual earlier pages. Physical errors are not borrowed from a suppressed member or an earlier successful response. Tests: blockstorage/backup_read_transport_test.go:TestVolumeBackupReadAcceptedReadCloseCancellationRetainsCurrentPhysicalStage, connection_volume_backups_test.go:TestConnectionVolumeBackupAcceptedIOJoinsReadCloseCancellationAndSourceDriftWithCurrentProof, connection_volume_backups_test.go:TestConnectionVolumeBackupLaterFailureRetainsPagesWithoutBorrowingEarlierMemberEvidence, blockstorage/volume_backup_read_selection_test.go:TestVolumeBackupReadFallbackLaterNativeFailureNeverBorrowsSuppressedMemberProof.

  • Original source HTTP100..399 policy, fixed GET URL/query/body/decoder ownership and live native authentication/retry remain in force. Per-call or captured microversion is preserved without automatic max3.64 negotiation/cap. Safe continuation and source guards are shared closed reader rules; cached-client header/microversion state remains unchanged by prior Backup list controls. Tests: blockstorage/backup_read_transport_test.go:TestVolumeBackupReadNativeReauthRetryKeepLiveTokenAndOwnedSourceOnce, connection_volume_backups_test.go:TestConnectionVolumeBackupListControlsStayPerCallAndDoNotLeakSnapshotQueryOrModel, connection_volume_backups_test.go:TestConnectionVolumeBackupLaterFailureRetainsPagesWithoutBorrowingEarlierMemberEvidence, blockstorage/volume_backup_read_selection_test.go:TestVolumeBackupReadSearchCompletesQuerylessPagesBeforeBackupExpression.

Python/Go differences:

  • Only this actual direct BlockStorageCloudMixin cloud helper is mapped with selected Cinder v3 and Gophercloud v2.15.0. Independent Proxy, native typed leaf, v2 Backup, generic Resource/session/adapter and backup mutation/export declarations retain separate reviews; the full SDK remains incomplete.
  • Python mutable kwargs/runtime objects map to owned Go request strings, nullable concrete With/Prepare policy, finite UTF8 JSON, raw-resource evidence and a separate normalized nullable24-field view. Go does not reproduce Resource identity, stale dict caches, session memoization, deprecated warning emission or arbitrary Python object coercion.
  • Parsed JSON dictionary insertion order and duplicate-key first-position/last-value alias traversal are preserved. Exact decimal truthiness/equality and arbitrary integers do not reproduce Python float rounding/underflow or configurable CPython integer digit limits; the Go Unicode16 decimal table is an explicit version boundary.
  • The selected Cinder microversion is retained, including explicit list overrides. Source Backup max3.64 limits absent-default negotiation only; Go performs no automatic negotiation, cap, upgrade or v2 selection. Selected and operation-owned headers are captured and validated while provider auth/reauth/retry tokens remain live.
  • Captured current or explicit location is recomputed from the actual backup project alias and literal availability_zone. Raw location and caller zone cannot replace the owned scope. This connected cloud-helper model is distinct from standalone/disconnected Resource constructor behavior.
  • Go validates consumed UTF8 JSON and safe literal member/continuation URLs, same origin/escaped path and canonical full-URL cycles. Source relative /v joining, query-only physical duplication and same-marker cycle rules are bounded by those deliberate safety rules. Robust HTTP Link URL support repairs the source uri/url mismatch.
  • Direct source snapshots precede original callbacks; Connection originals run once before only cached Cinder v3 selection, with location captured after originals before the getter. Fixed bodyless requests, sticky source/cause guards, independently owned phase proof and atomic logical publication are Go extensions; caller-configured native retry remains live and the SDK adds no orchestration replay.
  • Accepted response Read/Close/context/source faults retain their own physical evidence. Ordinary member native400/403/404 has a scoped body-fault observer so only fault-free original concrete rejections permit lookup fallback, without admitting those statuses or fabricating Observed. Rejected list responses and other rejected member statuses retain Gophercloud v2.15.0 discarded unexpected-body Read/Close behavior; this is not a universal rejection-I/O observer.
  • Local descriptor/predicate/selection errors keep completed independently admitted proof and do not borrow a successful response as a new local failure. Source probes use explicit AST/session/response/location stand-ins and are source-only, not authenticated Python/OpenStack runtime evidence.
  • Search completes a queryless detailed list before identifier and recursive mapping/expression filters. Finite JSON filter values replace arbitrary Python filters; JMESPath output is returned as owned arbitrary JSON with no invented association to physical backup rows. Object key traversal is deterministic where JMESPath objects are unordered.
  • Source identifier stringification/fnmatch and ordered mapping lazy errors are preserved within the selected JSON domain. List server-query kwargs, inherited list controls and the source generator-expression defect are not silently reapplied to cloud Search.
python:cloud/_block_storage/BlockStorageCloudMixin/get_volume_backup

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk.Connection.GetVolumeBackup

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.GetVolumeBackup

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.PrepareVolumeBackupSearchOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeBackupSearchOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeBackupSearchFilters

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeBackupSearchExpression

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeBackupSearchLocation

  • Omitted or JSONnull filter uses ordinary exact member-first find. A physically absent member ID seeds only normalized logical id with RequestedID/SeededID evidence; raw Backup fields stay actual. Explicit null, false, zero, empty/container or a different returned ID is preserved passively. An actual empty object Resource remains present, distinct from completed lookup absence, which returns nil Value and Backup. Tests: blockstorage/volume_backup_read_selection_test.go:TestVolumeBackupReadGetKeepsActualIDsAndSeparatesSeedFromPhysicalBody, blockstorage/volume_backup_read_selection_test.go:TestVolumeBackupReadGetAllowsPartialFlatMalformedAndSub400MemberResponses, internal/cloudsnapshot/backup_model_test.go:TestBackupModelMemberSeedsOnlyAbsentInheritedIDAndKeepsPhysicalBytes, connection_volume_backups_test.go:TestConnectionVolumeBackupMemberSeedsOnlyLogicalMissingIDAndCleanFallbackKeepsListProof, blockstorage/volume_backup_read_isolation_test.go:TestVolumeBackupReadSuccessfulAbsenceIsDistinctFromPresentEmptyMember.

  • Only fault-free original direct concrete native400/403/404 permits detailed name-hinted fallback. Fallback treats ID/name literally, including wildcard or unsafe-member names, and preserves actual response identity. A second exact match raises ambiguity before unused bad tail/link construction; a unique result must exhaust all pages, and later errors never publish it or borrow suppressed member proof. Tests: blockstorage/volume_backup_read_selection_test.go:TestVolumeBackupReadFindCleanNativeFallbackIsExactAndUsesActualResponseID, blockstorage/volume_backup_read_selection_test.go:TestVolumeBackupReadFindUnsafeLiteralAndWildcardNamesNeverBecomeSearchPatterns, blockstorage/volume_backup_read_selection_test.go:TestVolumeBackupReadFindAmbiguityPrecedesUnusedBadTailAndUniqueMustExhaust, blockstorage/volume_backup_read_selection_test.go:TestVolumeBackupReadFallbackLaterNativeFailureNeverBorrowsSuppressedMemberProof, connection_volume_backups_test.go:TestConnectionVolumeBackupMemberSeedsOnlyLogicalMissingIDAndCleanFallbackKeepsListProof, blockstorage/cinder_member_rejection_test.go:TestCinderMemberCleanCompatibleRejectionsRetainFallbackAndByIDContrast.

  • Every explicitly nonnull filter, including false, zero, empty string/object/array, follows complete queryless Search plus first-selection behavior; only omitted/null follows ordinary find. This dispatch preserves full-list errors and source deprecation path semantics without warning emission, shortcut IDs, glob ordinary names or fabricated member observation. Tests: blockstorage/volume_backup_read_selection_test.go:TestVolumeBackupReadGetEveryNonNullFalseyFilterUsesFullSearchWhileNullFinds, connection_volume_backups_test.go:TestConnectionVolumeBackupSelectionErrorRetainsBackupIdentityWithoutChangingSnapshotErrorShape.

  • Arbitrary expression output uses source JSON-domain truthiness, length and integer-index first-selection without retesting a selected falsey value. Multiple output produces distinct VolumeBackupSelectionError carrying NameOrID and Length; projection never gains invented raw Backup association, and the existing Snapshot selection-error shape is unchanged. Tests: blockstorage/volume_backup_read_selection_test.go:TestVolumeBackupReadGetArbitraryExpressionRetainsNoBackupAssociation, connection_volume_backups_test.go:TestConnectionVolumeBackupSelectionErrorRetainsBackupIdentityWithoutChangingSnapshotErrorShape, internal/cloudfilter/results_test.go:TestCloudFilterFirstFollowsTruthyLengthAndIntegerIndexWithoutRetestingSelectedFalsyValue, internal/cloudfilter/results_test.go:TestCloudFilterExpressionBridgeReturnsArbitraryOwnedJSONWithoutInventedRowIndices.

  • Original admitted100..399 member responses allow canonical backup object, flat object and validUTF8 empty/malformed body tolerance. Parsed wrong shape/null envelope, nonobject valid JSON or invalidUTF8 is terminal with the actual current response. List-constructor controls are not applied to member response fields; absent-ID seeding stays separate from physical proof. Tests: blockstorage/volume_backup_read_selection_test.go:TestVolumeBackupReadGetAllowsPartialFlatMalformedAndSub400MemberResponses, blockstorage/volume_backup_read_selection_test.go:TestVolumeBackupReadGetValidShapeAndUTF8FailuresRemainTerminalPhysicalErrors, internal/cloudsnapshot/backup_model_test.go:TestBackupModelListConstructorControlsDoNotBecomeMemberResponseControls, internal/cloudsnapshot/backup_model_test.go:TestBackupModelPhysicalAndLocalLocationFailuresAreAtomicAndOutputIsOwned, internal/cloudsnapshot/backup_model_test.go:TestBackupModelMemberSeedsOnlyAbsentInheritedIDAndKeepsPhysicalBytes.

  • Selected logical member/fallback values use the same eager nullable24 Backup descriptors, ordinary Boolean/list/int/dict conversions and parsed alias order as List/Search. Captured project scope and literal availability_zone determine location independently of caller/raw location. Physical raw resource, normalized value and admitted response proof own distinct storage. Tests: internal/cloudsnapshot/backup_model_test.go:TestBackupModelHasTwentyFourNullableFieldsAndOwnDescriptorOrder, internal/cloudsnapshot/backup_model_test.go:TestBackupModelOrdinaryBooleanDescriptorsAreNullableAndDoNotUseBoolStr, internal/cloudsnapshot/backup_model_test.go:TestBackupModelLinksWrapSingleValuesAndMetadataUsesOrdinaryNullableDict, internal/cloudsnapshot/backup_model_test.go:TestBackupModelBothIntegerDescriptorsConvertBeforeAnySelection, internal/cloudsnapshot/backup_model_test.go:TestBackupModelProjectAliasesFollowParsedDuplicateFirstInsertionOrder, internal/cloudsnapshot/backup_model_test.go:TestBackupModelLocationUsesBothRowProjectAndLiteralAvailabilityZone, connection_volume_backups_test.go:TestConnectionVolumeBackupExplicitLocationOwnsEveryFieldAndUsesBackupProjectAndZone, blockstorage/volume_backup_read_contract_test.go:TestVolumeBackupReadListOwnsAllTwentyFourFieldsAndRawIndependentProofs.

  • Direct source facts and ordinary headers are captured before original options; owned slices/retained pointers cannot replace prepared policy. Connection originals run once before cached Cinder v3 and captured location before the getter. Invalid/context/callback/getter and reached local location failures retain operation/custom causes; accepted member I/O keeps current proof while failed selection remains atomic. Tests: blockstorage/backup_read_transport_test.go:TestVolumeBackupReadOriginalOptionsOwnEveryPreparedValueAndSourceHeaders, blockstorage/backup_read_transport_test.go:TestVolumeBackupReadAcceptedReadCloseCancellationRetainsCurrentPhysicalStage, connection_volume_backups_test.go:TestConnectionVolumeBackupOriginalOptionsRunOnceBeforeCachedCinderForEveryEntry, connection_volume_backups_test.go:TestConnectionVolumeBackupPreflightAndGetterFailuresKeepBackupOperationAndJoinedCauses, connection_volume_backups_test.go:TestConnectionVolumeBackupCapturedOptionSliceAndRetainedPointersCannotReplacePreparedPolicy, connection_volume_backups_test.go:TestConnectionVolumeBackupAcceptedIOJoinsReadCloseCancellationAndSourceDriftWithCurrentProof, connection_volume_backups_test.go:TestConnectionVolumeBackupLaterFailureRetainsPagesWithoutBorrowingEarlierMemberEvidence.

  • Fixed original bodyless member GET, native live reauth/caller-configured retry and original status policy remain owned. Expanded native OkCodes400/403/404 or callback/transport wrappers are terminal and never compatible absence. The scoped native400/403/404 body observer preserves rejected Read/Close faults and native causes without fabricated admitted Observed/Pages; clean native retries may still continue under guarded source/auth policy. Tests: blockstorage/backup_read_transport_test.go:TestVolumeBackupReadNativeReauthRetryKeepLiveTokenAndOwnedSourceOnce, blockstorage/backup_read_transport_test.go:TestVolumeBackupReadNativeExpandedFallbackStatusIsTerminalOriginalPolicyRejection, blockstorage/cinder_member_rejection_test.go:TestCinderMemberCompatibleRejectionsKeepPureReadAndCloseFaultsTerminal, blockstorage/cinder_member_rejection_test.go:TestCinderMemberNativeRetryCannotSwallowRejectedIOOrReplaceOriginalStatus.

Python/Go differences:

  • Only this actual direct BlockStorageCloudMixin cloud helper is mapped with selected Cinder v3 and Gophercloud v2.15.0. Independent Proxy, native typed leaf, v2 Backup, generic Resource/session/adapter and backup mutation/export declarations retain separate reviews; the full SDK remains incomplete.
  • Python mutable kwargs/runtime objects map to owned Go request strings, nullable concrete With/Prepare policy, finite UTF8 JSON, raw-resource evidence and a separate normalized nullable24-field view. Go does not reproduce Resource identity, stale dict caches, session memoization, deprecated warning emission or arbitrary Python object coercion.
  • Parsed JSON dictionary insertion order and duplicate-key first-position/last-value alias traversal are preserved. Exact decimal truthiness/equality and arbitrary integers do not reproduce Python float rounding/underflow or configurable CPython integer digit limits; the Go Unicode16 decimal table is an explicit version boundary.
  • The selected Cinder microversion is retained, including explicit list overrides. Source Backup max3.64 limits absent-default negotiation only; Go performs no automatic negotiation, cap, upgrade or v2 selection. Selected and operation-owned headers are captured and validated while provider auth/reauth/retry tokens remain live.
  • Captured current or explicit location is recomputed from the actual backup project alias and literal availability_zone. Raw location and caller zone cannot replace the owned scope. This connected cloud-helper model is distinct from standalone/disconnected Resource constructor behavior.
  • Go validates consumed UTF8 JSON and safe literal member/continuation URLs, same origin/escaped path and canonical full-URL cycles. Source relative /v joining, query-only physical duplication and same-marker cycle rules are bounded by those deliberate safety rules. Robust HTTP Link URL support repairs the source uri/url mismatch.
  • Direct source snapshots precede original callbacks; Connection originals run once before only cached Cinder v3 selection, with location captured after originals before the getter. Fixed bodyless requests, sticky source/cause guards, independently owned phase proof and atomic logical publication are Go extensions; caller-configured native retry remains live and the SDK adds no orchestration replay.
  • Accepted response Read/Close/context/source faults retain their own physical evidence. Ordinary member native400/403/404 has a scoped body-fault observer so only fault-free original concrete rejections permit lookup fallback, without admitting those statuses or fabricating Observed. Rejected list responses and other rejected member statuses retain Gophercloud v2.15.0 discarded unexpected-body Read/Close behavior; this is not a universal rejection-I/O observer.
  • Local descriptor/predicate/selection errors keep completed independently admitted proof and do not borrow a successful response as a new local failure. Source probes use explicit AST/session/response/location stand-ins and are source-only, not authenticated Python/OpenStack runtime evidence.
  • Omitted or JSONnull filter uses exact ordinary find, with safe member-first lookup and a literal name-hinted fallback. Every nonnull filter, even falsey JSON, follows full Search plus source truthy/length/index selection; arbitrary expression output is not invented into a Resource list or raw-row association.
  • Logical member lookup seeds only a physically absent ID; RequestedID and SeededID make that state explicit while raw Backup evidence remains actual. Explicit null, false, zero, empty/container or different returned IDs remain passive response values; Go does not require equality with the request or silently manufacture a physical ID.
python:cloud/_block_storage/BlockStorageCloudMixin/create_volume_backup

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk.Connection.CreateVolumeBackup

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.CreateVolumeBackup

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.PrepareCreateVolumeBackupOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithCreateVolumeBackupOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithCreateVolumeBackupName

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithCreateVolumeBackupDescription

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithCreateVolumeBackupForce

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithCreateVolumeBackupIncremental

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithCreateVolumeBackupSnapshotID

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithCreateVolumeBackupWait

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithCreateVolumeBackupWaitPolicy

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithCreateVolumeBackupLocation

  • All fixed six body fields are present: nullable name/description/snapshot_id plus literal volume_id, explicit forcefalse/incrementalfalse defaults. No generated name/description, Volume/Snapshot resolver or extra raw kwargs/native builder; empty/slashed body IDs are forwarded after stringUTF8 validation. Tests: blockstorage/backup_mutation_contract_test.go:TestCreateVolumeBackupDefaultsSendSixLiteralFieldsWithoutResolvers, blockstorage/backup_mutation_contract_test.go:TestCreateVolumeBackupConcreteOptionsPreserveEmptyFalseAndLiteralSnapshot, connection_volume_backup_mutations_test.go:TestConnectionBackupMutationCreateTextValidationPrecedesCinderSelection.

  • Incremental bool serializes wire incremental while request-seeded normalized state uses is_incremental. All six constructor fields including null/false are retained as dirty input; POST is queryless/backups and does not seed Backup.id from VolumeID. Tests: blockstorage/backup_mutation_contract_test.go:TestCreateVolumeBackupDefaultsSendSixLiteralFieldsWithoutResolvers, blockstorage/backup_mutation_contract_test.go:TestCreateVolumeBackupConcreteOptionsPreserveEmptyFalseAndLiteralSnapshot, connection_volume_backup_mutations_test.go:TestConnectionBackupMutationsOriginalsPrecedeOnlyCinderV3AndReuseCacheWithoutReadiness.

  • Original admittedHTTP100..399 create responses are consumed independently of native Create202 leaf. Canonical backup or flat object merges only known fields; missing preserves prior values and explicit null replaces. Parsed duplicate-key first-position/last-value alias order is retained without dirty-equality suppression. Tests: blockstorage/backup_mutation_contract_test.go:TestCreateVolumeBackupMergesKnownResponseFieldsWithoutInventingPhysicalInputs, blockstorage/backup_mutation_wait_test.go:TestCreateVolumeBackupInitialErrorIsCheckedOnlyAfterFreshFetchAndMerge, blockstorage/backup_mutation_wait_test.go:TestCreateVolumeBackupNullablePollContinuesAndLatestIDIsUsedOnlyForNeededRoute, internal/cloudsnapshot/backup_model_test.go:TestBackupModelProjectAliasesFollowParsedDuplicateFirstInsertionOrder, internal/cloudsnapshot/mutation_state_test.go:TestSnapshotMutationStateAliasesUseParsedDuplicateInsertionOrder.

  • Create and each fresh poll eagerly normalize the closed Backup23Body+computedlocation24 view, ordinary Boolean/list/dict/integer descriptors and untyped remaining values. Physical raw object keeps unknown fields and original numeric/types; snapshot descriptors/state indices do not leak. Tests: blockstorage/backup_mutation_contract_test.go:TestCreateVolumeBackupDefaultsSendSixLiteralFieldsWithoutResolvers, blockstorage/backup_mutation_contract_test.go:TestCreateVolumeBackupMergesKnownResponseFieldsWithoutInventingPhysicalInputs, blockstorage/backup_mutation_contract_test.go:TestCreateVolumeBackupRejectedShapesAndDescriptorsRetainCreationProof, internal/cloudsnapshot/backup_model_test.go:TestBackupModelHasTwentyFourNullableFieldsAndOwnDescriptorOrder, internal/cloudsnapshot/backup_model_test.go:TestBackupModelOrdinaryBooleanDescriptorsAreNullableAndDoNotUseBoolStr, internal/cloudsnapshot/backup_model_test.go:TestBackupModelLinksWrapSingleValuesAndMetadataUsesOrdinaryNullableDict, internal/cloudsnapshot/backup_model_test.go:TestBackupModelBothIntegerDescriptorsConvertBeforeAnySelection.

  • Current or supplied owned location is captured after originals once, then recomputed for every merged Backup from actual project alias and literal availability_zone. Foreign project clears configured names/domain; rowzone overrides caller/raw location; live auth does not recapture current call scope. Tests: connection_volume_backup_mutations_test.go:TestConnectionBackupMutationsCaptureRecordedScopeAfterOriginalsBeforeGetterAcrossWait, connection_volume_backup_mutations_test.go:TestConnectionBackupMutationsExplicitLocationAndRetainedOriginalsStayOwned, internal/cloudsnapshot/backup_model_test.go:TestBackupModelLocationUsesBothRowProjectAndLiteralAvailabilityZone, internal/cloudsnapshot/backup_model_test.go:TestBackupModelPhysicalAndLocalLocationFailuresAreAtomicAndOutputIsOwned.

  • Empty or malformed validUTF8 JSON preserves prior logical state and actual proof without fabricating RawResource. Parsed{} is actual nonnil object; valid wrongshape/null envelope/invalidUTF8 or descriptor failure keeps current physical evidence and leaves final success publication atomic. Tests: blockstorage/backup_mutation_contract_test.go:TestCreateVolumeBackupMergesKnownResponseFieldsWithoutInventingPhysicalInputs, blockstorage/backup_mutation_contract_test.go:TestCreateVolumeBackupRejectedShapesAndDescriptorsRetainCreationProof.

  • Wait defaults true. Initial merged case-insensitive available completes with no GET and no unused route/timeout/interval checks; noWait also avoids status/route waiting while complete descriptor normalization remains eager. Tests: blockstorage/backup_mutation_contract_test.go:TestCreateVolumeBackupNoWaitPreservesArbitraryIdentityAndStatus, blockstorage/backup_mutation_wait_test.go:TestCreateVolumeBackupCachedAvailableSkipsTimeoutIntervalAndUnusableIdentity, blockstorage/backup_mutation_contract_test.go:TestCreateVolumeBackupConcreteOptionsPreserveEmptyFalseAndLiteralSnapshot.

  • Otherwise a fresh GET begins after loop boundary and safe currentID validation. Initialerror is not failed until fresh observation; available wins before exactcaselesserror failure. Explicitnullstatus remains nonterminal, nonstringstatus errors only when status wait is reached. Tests: blockstorage/backup_mutation_wait_test.go:TestCreateVolumeBackupInitialErrorIsCheckedOnlyAfterFreshFetchAndMerge, blockstorage/backup_mutation_wait_test.go:TestCreateVolumeBackupNullablePollContinuesAndLatestIDIsUsedOnlyForNeededRoute, blockstorage/backup_mutation_wait_test.go:TestCreateVolumeBackupPollIntervalIsConsumedOnlyAfterNonterminalState.

  • Fresh canonical/flat/empty/malformed polls merge prior state and may change logicalID. A latest arbitrary or unusable ID is preserved passively on terminal/noWait output; it is validated only if another fixed member request is needed. Tests: blockstorage/backup_mutation_wait_test.go:TestCreateVolumeBackupInitialErrorIsCheckedOnlyAfterFreshFetchAndMerge, blockstorage/backup_mutation_wait_test.go:TestCreateVolumeBackupNullablePollContinuesAndLatestIDIsUsedOnlyForNeededRoute, blockstorage/backup_mutation_contract_test.go:TestCreateVolumeBackupNoWaitPreservesArbitraryIdentityAndStatus.

  • Nil timeout is unlimited; explicitzero/negative fails before first usedpoll unless initialready/noWait. Positive budget begins after initial mutation/merge and checks loop boundaries without deriving HTTP deadline. Pollnil2s; zero100ms capped by a smaller explicit timeout, negative only errors on reachedsleep; parentctx interrupts HTTP/sleep and retains customcause. Tests: blockstorage/backup_mutation_wait_test.go:TestVolumeBackupMutationNonpositiveTimeoutRunsMutationButPreventsFirstPoll, blockstorage/backup_mutation_wait_test.go:TestVolumeBackupMutationPositiveBudgetStartsAfterMutationAndAllowsSlowTerminalHTTP, blockstorage/backup_mutation_wait_test.go:TestCreateVolumeBackupPollIntervalIsConsumedOnlyAfterNonterminalState, blockstorage/backup_mutation_wait_test.go:TestVolumeBackupMutationPositiveTimeoutIsObservedAtLoopBoundaryWithoutBorrowingProof, connection_volume_backup_mutations_test.go:TestConnectionBackupMutationsBlockedFreshPollPreservesEarlierProofAndCustomCause.

  • Created/CreatedValue/CreatedBackup, latest raw BackupID, LastAccepted and Ready/ReadyBackup are independently owned actual/logical phases. Final Value/Backup publishes only after requested policy and final guard; acceptedRead/Close/decode/source/context errors retain prior/current actual evidence without rollback. Tests: blockstorage/backup_mutation_contract_test.go:TestCreateVolumeBackupOwnsCreatedFinalReadyAndRawIdentityIndependently, blockstorage/backup_mutation_contract_test.go:TestCreateVolumeBackupRejectedShapesAndDescriptorsRetainCreationProof, blockstorage/backup_mutation_transport_test.go:TestVolumeBackupMutationAcceptedFailuresRetainOnlyCurrentProofAndAllCauses, connection_volume_backup_mutations_test.go:TestConnectionBackupMutationsAcceptedIOFailuresJoinReadCloseAndCallerCause, connection_volume_backup_mutations_test.go:TestConnectionBackupMutationsBlockedFreshPollPreservesEarlierProofAndCustomCause.

  • Concrete With/Prepare owns pointers/location/waitpolicy and snapshots original options slice. Direct capture precedes originals; Connection originals run once before ownedCurrentLocation and only cached Cinderv3 getter. Source/method/URL/body/status ownership holds through native liveauth/reauth/retry without SDK orchestration replay. Tests: blockstorage/backup_mutation_options_test.go:TestBackupMutationOptionsPreserveOmissionAndExplicitEmptyFalseZero, blockstorage/backup_mutation_options_test.go:TestBackupMutationOptionsOwnFactoryInputsAndEveryPreparedTree, blockstorage/backup_mutation_options_test.go:TestBackupMutationOptionsRunOriginalsOnceAndFreezeMembershipAndWrites, blockstorage/backup_mutation_options_test.go:TestBackupMutationOptionsJoinCancellationAndOriginalErrors, blockstorage/backup_mutation_options_test.go:TestBackupMutationOptionsReuseFactoriesConcurrentlyWithOwnedLocations, connection_volume_backup_mutations_test.go:TestConnectionBackupMutationsOriginalsPrecedeOnlyCinderV3AndReuseCacheWithoutReadiness, connection_volume_backup_mutations_test.go:TestConnectionBackupMutationsExplicitLocationAndRetainedOriginalsStayOwned, connection_volume_backup_mutations_test.go:TestConnectionBackupMutationsNonemptyPreflightAndGetterFailuresKeepOperationCauses, connection_volume_backup_mutations_test.go:TestConnectionBackupMutationCreateTextValidationPrecedesCinderSelection, blockstorage/backup_mutation_transport_test.go:TestVolumeBackupMutationNativeAuthAndRetryUseLiveTokenWithOwnedHeadersAndVersion, blockstorage/backup_mutation_transport_test.go:TestVolumeBackupMutationRetryCannotReplaceOwnedBodyDecoderOrFixedScope, blockstorage/backup_mutation_transport_test.go:TestVolumeBackupMutationExpandedNativeStatusNeverCreatesSuccessOrAbsenceProof, blockstorage/backup_mutation_transport_test.go:TestVolumeBackupMutationOriginalSourceChangesAreTerminalBeforeLaterRestoration.

Python/Go differences:

  • Only this actual direct BlockStorageCloudMixin helper is the candidate target with selected Cinder v3 and Gophercloudv2.15.0. Independent Proxy/native/v2/generic Resource/session/adapter and other backup helpers retain separate reviews; full SDK remains incomplete.
  • Python mutable/arbitrary runtime inputs map to owned Go UTF8 request strings, concrete nullable bool/string options, finite JSON raw/logical values and phase results. Python Resource object identity, stale dict caches, arbitrary Python object coercion and warning emission are not reproduced.
  • Normal selected microversion is retained without automatic absent-default discovery/cap/upgrade. Python Backupmax3.64 constrains absent-default negotiation only; explicit configured defaults take precedence. Forceaction is separately the exact source3.64 behavior.
  • Go safe consumed member IDs and fixed same-origin method/URL/body/status ownership replace source urljoin falsey/container coercion/leading slash behavior. Unsafe names use exact list lookup; passive resultIDs remain arbitrary JSON until a needed route.
  • Nullable23Body+computedlocation model is independent of actual RawResource and admitted/rejected HTTP proof. Unknown actual fields/numeric spelling are preserved as Go evidence extension while only known fields overlay logical state; parsed JSON alias/duplicate insertion traversal is retained.
  • Exact decimal truthiness/equality, arbitrary integer JSON, Go Unicode decimal runtime table and strict UTF8 are explicit boundaries from Python parsedfloat rounding/underflow/configurableintegerlimits. Nonnumeric integer containers normalize0; bool remainsbool; digit-but-nondecimal strings can fail.
  • Captured current/explicit configured scope recomputes from Backup project alias and literal rowzone, separate from live provider authentication. Standalone/disconnected Resource location/runtime construction are independent capabilities.
  • Positive SDK timeout is loop-boundary only; parentcontext cancellation/deadline adds a Go interruption/cause contract. Nil alone unlimited; zero/negative remain used-loop timeout. PollInterval is a concrete Go convenience absent from the direct Python helper.
  • Accepted Read/Close/decode/context/source failures retain their actual phase evidence. Only ordinary member400403404 and deletionpoll404 have bounded rejection-body fault observation; rejected Lists, other member statuses and mutations retain native discarded-bodyIO policy. This is not universal rejection-IO preservation.
  • Go errors retain operation/resource/custom context causes and independently owned partial phase results; Source probes use explicit AST/session/response/location stand-ins and are not authenticated Python/OpenStack runtime evidence. No orchestration replay or rollback is added.
  • The fixed cloud signature has no Fields/display aliases/native extraCreate attributes. Omitted nullabletext serializesnull, explicitempty retained, force/incremental defaults serializefalse; Go typed bool/string domain replaces arbitrary Python arguments.
  • VolumeID/SnapshotID are literal bodydata, not resource.Ref resolution or generated Backup.id/name. Create response partial merge preserves request-known state while CreatedBackup is actual only.
python:cloud/_block_storage/BlockStorageCloudMixin/delete_volume_backup

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk.Connection.DeleteVolumeBackup

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.DeleteVolumeBackup

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.PrepareDeleteVolumeBackupOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithDeleteVolumeBackupOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithDeleteVolumeBackupForce

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithDeleteVolumeBackupWait

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithDeleteVolumeBackupWaitPolicy

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithDeleteVolumeBackupLocation

  • Empty string input returns completed Deletedfalse after valid context/original callbacks, selecting no client/location/service/waitpolicy and allowing nil direct client/nilConnection. Successful completed lookup absence is false; any lookup/operation error leaves Deletednil. Tests: blockstorage/backup_mutation_contract_test.go:TestDeleteVolumeBackupEmptyInputRunsOriginalsWithoutServiceOrLocation, blockstorage/backup_mutation_contract_test.go:TestDeleteVolumeBackupLookupCompletionAndLogicalSeedControlMutation, connection_volume_backup_mutations_test.go:TestConnectionBackupMutationEmptyDeleteIsServiceFreeEvenForNilConnection, blockstorage/backup_mutation_options_test.go:TestBackupMutationOptionsJoinCancellationAndOriginalErrors.

  • Nonempty delete runs one ordinary exact Backup find on the same captured reader, with member-first safe identity and detailed literal-name fallback only from clean original native400403404. Unsafe names use exact list-only route domain, duplicates/later exhaustion errors prevent mutation; no extra confirmGET or Volume/Snapshot/Identity resolution. Tests: blockstorage/backup_mutation_contract_test.go:TestDeleteVolumeBackupLookupCompletionAndLogicalSeedControlMutation, blockstorage/volume_backup_read_selection_test.go:TestVolumeBackupReadFindCleanNativeFallbackIsExactAndUsesActualResponseID, blockstorage/volume_backup_read_selection_test.go:TestVolumeBackupReadFindUnsafeLiteralAndWildcardNamesNeverBecomeSearchPatterns, blockstorage/volume_backup_read_selection_test.go:TestVolumeBackupReadFindAmbiguityPrecedesUnusedBadTailAndUniqueMustExhaust, blockstorage/volume_backup_read_selection_test.go:TestVolumeBackupReadFallbackLaterNativeFailureNeverBorrowsSuppressedMemberProof.

  • Selected actual changedID is used; only a physically absent memberID seeds requested identity logically with Resolved RequestedID/SeededID, never physical raw fields. Explicitnull/false/zero/empty/container/unusable mutationID is a reached local route error with completed Resolved retained. Tests: blockstorage/backup_mutation_contract_test.go:TestDeleteVolumeBackupLookupCompletionAndLogicalSeedControlMutation, blockstorage/backup_mutation_contract_test.go:TestDeleteVolumeBackupDefaultWaitOffUsesActualIDAndOpaqueAcknowledgement, internal/cloudsnapshot/backup_model_test.go:TestBackupModelMemberSeedsOnlyAbsentInheritedIDAndKeepsPhysicalBytes.

  • Normal branch sends fixed bodyless DELETE/backups/{selectedID}, no force/cascadequery. Force branch sends fixed POST/backups/{selectedID}/action with literal os-force_deleteNull; no native{} body substitution. Tests: blockstorage/backup_mutation_contract_test.go:TestDeleteVolumeBackupDefaultWaitOffUsesActualIDAndOpaqueAcknowledgement, blockstorage/backup_mutation_contract_test.go:TestDeleteVolumeBackupForceActionUsesNullAnd364WithoutChangingPollVersion, blockstorage/backup_mutation_contract_test.go:TestDeleteVolumeBackupNormalAndForceMutation404NeverBecomeAbsence.

  • Force action explicitly uses3.64 independently of empty/3.60/3.80 normal selection. Only copied operation client/canonical generic+legacy version headers override; original service/headers and ordinary lookup/poll microversion remain unchanged and original source facts remain guarded. Tests: blockstorage/backup_mutation_contract_test.go:TestDeleteVolumeBackupForceActionUsesNullAnd364WithoutChangingPollVersion, connection_volume_backup_mutations_test.go:TestConnectionBackupMutationsForceKeepsCachedSelectionAndNormalWaitPolicyIndependent.

  • Force nativeRetry cannot alter/remove required version aliases via MoreHeaders/OmitHeaders, and actual physical request requires exactly one exact generic/legacy3.64header each. Callback/source/policy faults keep original native evidence and block physical resend; fixed redirects/liveauth/native retry remain guarded. Tests: blockstorage/backup_mutation_transport_test.go:TestVolumeBackupMutationNativeAuthAndRetryUseLiveTokenWithOwnedHeadersAndVersion, blockstorage/backup_mutation_transport_test.go:TestVolumeBackupMutationRetryCannotReplaceOwnedBodyDecoderOrFixedScope, connection_volume_backup_mutations_test.go:TestConnectionBackupMutationsForceKeepsCachedSelectionAndNormalWaitPolicyIndependent.

  • Both mutations use original finiteHTTP100..399 opaque acknowledgement without JSON/UTF8/status merge. Native or expanded-policy rejected normal/force404 is terminal ignore_missingFalse and cannot become Deletedfalse/Absent or admitted Applied. Tests: blockstorage/backup_mutation_contract_test.go:TestDeleteVolumeBackupDefaultWaitOffUsesActualIDAndOpaqueAcknowledgement, blockstorage/backup_mutation_contract_test.go:TestDeleteVolumeBackupForceActionUsesNullAnd364WithoutChangingPollVersion, blockstorage/backup_mutation_contract_test.go:TestDeleteVolumeBackupNormalAndForceMutation404NeverBecomeAbsence, blockstorage/backup_mutation_transport_test.go:TestVolumeBackupMutationExpandedNativeStatusNeverCreatesSuccessOrAbsenceProof.

  • DeleteWait defaults false, so admitted acknowledgement plus final guard yields true without later route/status/wait checks. WithWaittrue always performs firstfreshGET even cacheddeleted after used loop-boundary/currentID checks. Tests: blockstorage/backup_mutation_contract_test.go:TestDeleteVolumeBackupDefaultWaitOffUsesActualIDAndOpaqueAcknowledgement, blockstorage/backup_mutation_contract_test.go:TestDeleteVolumeBackupForceActionUsesNullAnd364WithoutChangingPollVersion, blockstorage/backup_mutation_wait_test.go:TestDeleteVolumeBackupFreshFetchMergesCachedDeletedButRejectsExplicitNullStatus, connection_volume_backup_mutations_test.go:TestConnectionBackupMutationsOriginalsPrecedeOnlyCinderV3AndReuseCacheWithoutReadiness.

  • Fresh merged case-insensitivedeleted or clean original nativeGET404 completes. Error/error_deleting are nonterminal; explicitnull/nonstringstatus is error when reached, unlike create nullstatus. Missing/partial/flat/malformed poll fields retain semantic prior state and changedID controls needed laterpoll only. Tests: blockstorage/backup_mutation_wait_test.go:TestDeleteVolumeBackupFreshFetchMergesCachedDeletedButRejectsExplicitNullStatus, blockstorage/backup_mutation_wait_test.go:TestDeleteVolumeBackupErrorStatesContinueAndLatestIDDoesNotRouteTerminalFalse.

  • Poll404 keeps native rejection/retry/reauth and bounded Read/Close observation. Only direct fault-free native404 can become Absent; wrapped/callback/expandedOkCodes/IO/source/context404 remains terminal with Deletednil. Rejected proof never overwrites admitted LastAccepted or earlier Applied. Tests: blockstorage/backup_mutation_transport_test.go:TestDeleteVolumeBackupPolling404RequiresCleanBodyAndOriginalNativePolicy, blockstorage/backup_mutation_transport_test.go:TestVolumeBackupMutationExpandedNativeStatusNeverCreatesSuccessOrAbsenceProof, blockstorage/backup_mutation_transport_test.go:TestVolumeBackupMutationAcceptedFailuresRetainOnlyCurrentProofAndAllCauses.

  • Nil cloud timeout overrides Proxy standalone120 with unlimited. Explicitzero/negative timeout fails after acknowledgement before firstfreshpoll. Positive loop budget does not derive HTTP deadline and may accept slowterminal response; parentctx/customcause separately interrupts request/sleep. Tests: blockstorage/backup_mutation_wait_test.go:TestVolumeBackupMutationNonpositiveTimeoutRunsMutationButPreventsFirstPoll, blockstorage/backup_mutation_wait_test.go:TestVolumeBackupMutationPositiveBudgetStartsAfterMutationAndAllowsSlowTerminalHTTP, blockstorage/backup_mutation_wait_test.go:TestVolumeBackupMutationPositiveTimeoutIsObservedAtLoopBoundaryWithoutBorrowingProof, connection_volume_backup_mutations_test.go:TestConnectionBackupMutationsBlockedFreshPollPreservesEarlierProofAndCustomCause.

  • Resolved, raw BackupID, opaque Applied, admitted LastAccepted, Ready/ReadyBackup from deleted GET and clean404Absent are independently owned phase evidence. Deleted is nil on error and true only after requested policy/finalguard; no partial remote-completion bool or rollback is invented. Tests: blockstorage/backup_mutation_contract_test.go:TestDeleteVolumeBackupDefaultWaitOffUsesActualIDAndOpaqueAcknowledgement, blockstorage/backup_mutation_wait_test.go:TestDeleteVolumeBackupFreshFetchMergesCachedDeletedButRejectsExplicitNullStatus, blockstorage/backup_mutation_wait_test.go:TestDeleteVolumeBackupErrorStatesContinueAndLatestIDDoesNotRouteTerminalFalse, blockstorage/backup_mutation_transport_test.go:TestDeleteVolumeBackupPolling404RequiresCleanBodyAndOriginalNativePolicy, blockstorage/backup_mutation_transport_test.go:TestVolumeBackupMutationAcceptedFailuresRetainOnlyCurrentProofAndAllCauses, connection_volume_backup_mutations_test.go:TestConnectionBackupMutationsAcceptedIOFailuresJoinReadCloseAndCallerCause, connection_volume_backup_mutations_test.go:TestConnectionBackupMutationsBlockedFreshPollPreservesEarlierProofAndCustomCause.

  • Known24 Backup descriptor/projectzone/alias semantics are preserved from selected logical prior values without claiming original wire provenance; fresh physicalRawResource remains actual. Caller options/source/headers/scope remain owned and concurrent snapshot/backup tables independent. Tests: internal/cloudsnapshot/backup_model_test.go:TestBackupModelHasTwentyFourNullableFieldsAndOwnDescriptorOrder, internal/cloudsnapshot/backup_model_test.go:TestBackupModelOrdinaryBooleanDescriptorsAreNullableAndDoNotUseBoolStr, internal/cloudsnapshot/backup_model_test.go:TestBackupModelLinksWrapSingleValuesAndMetadataUsesOrdinaryNullableDict, internal/cloudsnapshot/backup_model_test.go:TestBackupModelBothIntegerDescriptorsConvertBeforeAnySelection, internal/cloudsnapshot/backup_model_test.go:TestBackupModelProjectAliasesFollowParsedDuplicateFirstInsertionOrder, internal/cloudsnapshot/backup_model_test.go:TestBackupModelLocationUsesBothRowProjectAndLiteralAvailabilityZone, internal/cloudsnapshot/backup_model_test.go:TestBackupModelPhysicalAndLocalLocationFailuresAreAtomicAndOutputIsOwned, internal/cloudsnapshot/mutation_state_test.go:TestSnapshotMutationStateAliasesUseParsedDuplicateInsertionOrder, blockstorage/backup_mutation_options_test.go:TestBackupMutationOptionsOwnFactoryInputsAndEveryPreparedTree, blockstorage/backup_mutation_options_test.go:TestBackupMutationOptionsReuseFactoriesConcurrentlyWithOwnedLocations, connection_volume_backup_mutations_test.go:TestConnectionBackupMutationsCaptureRecordedScopeAfterOriginalsBeforeGetterAcrossWait, connection_volume_backup_mutations_test.go:TestConnectionBackupMutationsExplicitLocationAndRetainedOriginalsStayOwned.

  • Original callbacks execute once before ConnectionCurrentLocation/cachedCinderv3 getter; direct source capture precedes callbacks. Fixed method/URL/body/originalstatus, sticky source and parentcause guards preserve native liveauth/reauth/caller retry; no SDK workflow replay or automatic cleanup. Tests: blockstorage/backup_mutation_options_test.go:TestBackupMutationOptionsRunOriginalsOnceAndFreezeMembershipAndWrites, blockstorage/backup_mutation_options_test.go:TestBackupMutationOptionsJoinCancellationAndOriginalErrors, connection_volume_backup_mutations_test.go:TestConnectionBackupMutationsOriginalsPrecedeOnlyCinderV3AndReuseCacheWithoutReadiness, connection_volume_backup_mutations_test.go:TestConnectionBackupMutationsNonemptyPreflightAndGetterFailuresKeepOperationCauses, blockstorage/backup_mutation_transport_test.go:TestVolumeBackupMutationNativeAuthAndRetryUseLiveTokenWithOwnedHeadersAndVersion, blockstorage/backup_mutation_transport_test.go:TestVolumeBackupMutationRetryCannotReplaceOwnedBodyDecoderOrFixedScope, blockstorage/backup_mutation_transport_test.go:TestVolumeBackupMutationExpandedNativeStatusNeverCreatesSuccessOrAbsenceProof, blockstorage/backup_mutation_transport_test.go:TestVolumeBackupMutationOriginalSourceChangesAreTerminalBeforeLaterRestoration, connection_volume_backup_mutations_test.go:TestConnectionBackupMutationsAcceptedIOFailuresJoinReadCloseAndCallerCause.

Python/Go differences:

  • Only this actual direct BlockStorageCloudMixin helper is the candidate target with selected Cinder v3 and Gophercloudv2.15.0. Independent Proxy/native/v2/generic Resource/session/adapter and other backup helpers retain separate reviews; full SDK remains incomplete.
  • Python mutable/arbitrary runtime inputs map to owned Go UTF8 request strings, concrete nullable bool/string options, finite JSON raw/logical values and phase results. Python Resource object identity, stale dict caches, arbitrary Python object coercion and warning emission are not reproduced.
  • Normal selected microversion is retained without automatic absent-default discovery/cap/upgrade. Python Backupmax3.64 constrains absent-default negotiation only; explicit configured defaults take precedence. Forceaction is separately the exact source3.64 behavior.
  • Go safe consumed member IDs and fixed same-origin method/URL/body/status ownership replace source urljoin falsey/container coercion/leading slash behavior. Unsafe names use exact list lookup; passive resultIDs remain arbitrary JSON until a needed route.
  • Nullable23Body+computedlocation model is independent of actual RawResource and admitted/rejected HTTP proof. Unknown actual fields/numeric spelling are preserved as Go evidence extension while only known fields overlay logical state; parsed JSON alias/duplicate insertion traversal is retained.
  • Exact decimal truthiness/equality, arbitrary integer JSON, Go Unicode decimal runtime table and strict UTF8 are explicit boundaries from Python parsedfloat rounding/underflow/configurableintegerlimits. Nonnumeric integer containers normalize0; bool remainsbool; digit-but-nondecimal strings can fail.
  • Captured current/explicit configured scope recomputes from Backup project alias and literal rowzone, separate from live provider authentication. Standalone/disconnected Resource location/runtime construction are independent capabilities.
  • Positive SDK timeout is loop-boundary only; parentcontext cancellation/deadline adds a Go interruption/cause contract. Nil alone unlimited; zero/negative remain used-loop timeout. PollInterval is a concrete Go convenience absent from the direct Python helper.
  • Accepted Read/Close/decode/context/source failures retain their actual phase evidence. Only ordinary member400403404 and deletionpoll404 have bounded rejection-body fault observation; rejected Lists, other member statuses and mutations retain native discarded-bodyIO policy. This is not universal rejection-IO preservation.
  • Go errors retain operation/resource/custom context causes and independently owned partial phase results; Source probes use explicit AST/session/response/location stand-ins and are not authenticated Python/OpenStack runtime evidence. No orchestration replay or rollback is added.
  • Empty typed identity is a service-free Go no-op but still context/originalcallback checked. Actual Resource presence is not ID truthiness; member missingID seed is logical only, while changed/unusable responseID drives reached safe route policy.
  • Forced deletion deliberately uses sourceNull action at explicit3.64, even when normal selected version differs; native ForceDelete202/{} remains independently reviewed. Mutation404 is terminal, cleanpoll404 completes only after proof/source/cause guards.
python:cloud/_block_storage/BlockStorageCloudMixin/export_volume_backup

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk.Connection.ExportVolumeBackup

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.ExportVolumeBackup

  • Required BackupID is one safe nonempty literal UTF-8 member segment. Export requests bodyless queryless GET backups/{ID}/export_record without member/list/Volume/Snapshot/Identity resolution, generated identity, wait or SDK workflow replay. Unicode is escaped once; result retains the requested ID string rather than a response-derived identity. Tests: blockstorage/backup_export_contract_test.go:TestExportVolumeBackupOpaqueSub400ResponseUsesOneBodylessFixedGETAndSelectedMicroversion, blockstorage/backup_export_contract_test.go:TestExportVolumeBackupPreflightCapturesSourceBeforeSafeIDAndNeverMakesLookupRequests, connection_volume_backup_export_test.go:TestConnectionBackupExportPreflightAndSafeIDRejectBeforeCinder, connection_volume_backup_export_test.go:TestConnectionBackupExportOnlyCachedCinderPreservesSelectedPolicyWithoutLocationConsumption.

  • The original finite HTTP 100..399 policy preserves final opaque body bytes, headers and status without JSON, UTF-8, envelope, Backup descriptor or native base64/typed-record parsing. Selected service microversion, including omission, is unchanged; no automatic 3.64 override, default, discovery or cap is added. Tests: blockstorage/backup_export_contract_test.go:TestExportVolumeBackupOpaqueSub400ResponseUsesOneBodylessFixedGETAndSelectedMicroversion, connection_volume_backup_export_test.go:TestConnectionBackupExportOnlyCachedCinderPreservesSelectedPolicyWithoutLocationConsumption.

  • Exported Body, multivalue Header and StatusCode form an independently owned physical response snapshot. Different calls and physical fixtures do not alias, and error response evidence is separately owned. Full requests.Response object identity is an intentional Go mapping. Tests: blockstorage/backup_export_contract_test.go:TestExportVolumeBackupOwnsOpaqueBodyAndHeadersAcrossIndependentCalls, blockstorage/backup_export_transport_test.go:TestExportVolumeBackupAcceptedIOCancellationAndSourceFailuresKeepCurrentOwnedOpaqueProof, connection_volume_backup_export_test.go:TestConnectionBackupExportOnlyCachedCinderPreservesSelectedPolicyWithoutLocationConsumption, connection_volume_backup_export_test.go:TestConnectionBackupExportAcceptedOpaqueIOOwnsCurrentProofAndAllCauses.

  • Direct calls capture and validate the selected Cinder source before literal ID validation. Connection validates context/provider/ID before selecting cached Cinder v3 and passes service.RawClient; no CurrentLocation or Backup model/readiness is consumed. Invalid context/ID/source/getter is local, with outer ExportVolumeBackup/volume backup operation and caller causes preserved. Tests: blockstorage/backup_export_contract_test.go:TestExportVolumeBackupPreflightCapturesSourceBeforeSafeIDAndNeverMakesLookupRequests, connection_volume_backup_export_test.go:TestConnectionBackupExportPreflightAndSafeIDRejectBeforeCinder, connection_volume_backup_export_test.go:TestConnectionBackupExportOnlyCachedCinderPreservesSelectedPolicyWithoutLocationConsumption, connection_volume_backup_export_test.go:TestConnectionBackupExportGetterFailuresJoinCustomAndContextCauses.

  • Admitted response proof is published before accepted Read/Close/source/context errors are returned. Current partial bytes, status and headers remain in Exported with joined caller causes and independently owned ResponseError. Exported presence alone does not establish success; accepted faults do not trigger retry, SDK replay or rollback. Tests: blockstorage/backup_export_transport_test.go:TestExportVolumeBackupAcceptedIOCancellationAndSourceFailuresKeepCurrentOwnedOpaqueProof, connection_volume_backup_export_test.go:TestConnectionBackupExportAcceptedOpaqueIOOwnsCurrentProofAndAllCauses.

  • Original native 400/403/404 and other rejected >=400 responses are terminal with native evidence and Exported nil; no lookup fallback or normal absence is introduced. Native expanded OkCodes cannot fabricate admitted proof outside the original policy. Rejected response body IO retains native discarded Read/Close limitations, independent of member/poll response-body observers. Tests: blockstorage/backup_export_contract_test.go:TestExportVolumeBackupNativeRejectionsAreTerminalAndDoNotInventAdmittedProof, blockstorage/backup_export_transport_test.go:TestExportVolumeBackupNativeExpandedStatusCannotCreateAdmittedProof.

  • Live provider authentication, native 401 reauthentication and bounded caller retry retain the fixed request and captured ordinary source headers while allowing existing native header hooks. Export changes no selected microversion/client state; cached Connection calls consume no CurrentLocation and use later live tokens and later call header snapshots. Tests: blockstorage/backup_export_transport_test.go:TestExportVolumeBackupNativeReauthAndBoundedRetryUseLiveTokensAndOwnedHeaders, connection_volume_backup_export_test.go:TestConnectionBackupExportOnlyCachedCinderPreservesSelectedPolicyWithoutLocationConsumption.

  • Fixed method/URL, native option bodylessness/body retention/decoder policy and five sticky service facts remain SDK-owned through retries and redirects. Export also rejects physical nonnil Body other than http.NoBody, nonzero ContentLength and nonempty TransferEncoding before underlying transport. That physical body rejection remains terminal after native retry restores the request, preserving original rejection, callback and cancellation causes without fabricated admitted proof. Changed-path/foreign-origin redirects stop before a new physical request or token transmission; no SDK workflow replay occurs. Tests: blockstorage/backup_export_transport_test.go:TestExportVolumeBackupRejectsNativeRetryBodyDecoderRetentionOrSourceMutationBeforeResend, blockstorage/backup_export_transport_test.go:TestExportVolumeBackupRedirectCannotChangeFixedTargetOrSendTokenToAnotherOrigin, blockstorage/backup_export_redirect_body_test.go:TestExportVolumeBackupSameTargetRedirectCannotAddPhysicalBodyFraming, blockstorage/backup_export_redirect_body_test.go:TestExportVolumeBackupRedirectBodyRejectionSurvivesNativeRetryRestorationAndJoinedCauses.

Python/Go differences:

  • Only actual direct v3 BlockStorageCloudMixin.export_volume_backup is mapped. Independently parsed Proxy.export_backup/Backup.export_record, deprecated aliases, native typed Export/base64 BackupRecord, v2 dict-return path and remaining Backup actions retain independent reviews. Full SDK remains incomplete.
  • Python dynamic resource/dict/Munch/None and permissive urljoin falsey/container/leading-slash behavior map to a safe single literal UTF8 Go BackupID string. No NameOrID resolver, generatedID or Resource._get_id shortcut is introduced.
  • Source Proxy._get_resource creates or updates a connected mutable Backup with incidental constructor location/descriptor/to_dict side effects. ID-only Go export deliberately skips those effects and consumes no configured CurrentLocation; these constructor failures/caches/identity are not replicated.
  • v3 returns the same requests.Response without response.json. Go snapshots actual raw Body/Header/StatusCode rather than mutable Response request/history/cookies/encoding/elapsed/methods and deprecated warnings. Numeric spelling and arbitrarybinarybytes remain physical data.
  • The source has no options or wait policy. Go adds parent context interruption/customcause and ownedpartialproof, not empty With/Prepare builders, wait/location options, readinesspoll or SDKtimeout. Selected microversion is preserved without automatic discovery/cap or forceaction3.64.
  • Fixed same-origin method/route/request-policy and sticky source guards constrain redirects and native callbacks. A closed export-only physical guard also rejects Body, ContentLength and TransferEncoding mutations after redirect hooks; it does not alter old shared request code or apply rejected response-body IO observers. Existing native ordinary header hooks remain; this is not force-style per-header microversion enforcement.
  • Accepted Read/Close/context/source failures retain actual admitted proof and simultaneous causes. Originalnative or originalpolicy>=400 rejection has no Exported; native rejectedbodyRead/Close discardedfault scope remains, not a universal IOobserver repair.
  • FiniteHTTP100..399 mirrors source<400 in realHTTPdomain. Local source/probe evidence uses frozen literals and explicitly labeled AST/session/response stand-ins; authenticated Python/OpenStack execution is not claimed.
python:block_storage/v3/export_record

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/backups.API.ExportRecord

  • API.ExportRecord requires context and one safe nonempty literal UTF-8 backup ID, escaped once; names remain literal IDs. The captured raw engine validates source before ID and performs no member/list/Identity resolution or generated identity. Python Resource/dict/Munch/None construction and local location/descriptor side effects map to the explicit Go string-ID boundary. Tests: blockstorage/backup_export_contract_test.go:TestExportVolumeBackupPreflightCapturesSourceBeforeSafeIDAndNeverMakesLookupRequests, blockstorage/backup_proxy_export_service_test.go:TestBackupProxyExportServiceFacadesPreflightKeepOuterMethodContext.

  • The raw operation requests bodyless queryless GET backups/{ID}/export_record through one captured source without wait, model normalization, cleanup, rollback or SDK workflow replay. Fixed method/URL/source and physical Body/ContentLength/TransferEncoding policy remain guarded through redirects and native callbacks. Tests: blockstorage/backup_export_contract_test.go:TestExportVolumeBackupOpaqueSub400ResponseUsesOneBodylessFixedGETAndSelectedMicroversion, blockstorage/backup_export_transport_test.go:TestExportVolumeBackupRedirectCannotChangeFixedTargetOrSendTokenToAnotherOrigin, blockstorage/backup_export_redirect_body_test.go:TestExportVolumeBackupSameTargetRedirectCannotAddPhysicalBodyFraming, blockstorage/backup_export_redirect_body_test.go:TestExportVolumeBackupRedirectBodyRejectionSurvivesNativeRetryRestorationAndJoinedCauses, blockstorage/backup_proxy_export_service_test.go:TestBackupProxyExportServiceFacadesSeparateOpaqueJSONAndLegacyTypedProjection.

  • Keep selected microversion including omission, captured ordinary source headers and existing live token/native reauthentication/bounded caller retry. No forced 3.64, discovery, default or cap is added. The raw engine consumes no CurrentLocation and never recaptures resource scope. Tests: blockstorage/backup_export_contract_test.go:TestExportVolumeBackupOpaqueSub400ResponseUsesOneBodylessFixedGETAndSelectedMicroversion, blockstorage/backup_export_transport_test.go:TestExportVolumeBackupNativeReauthAndBoundedRetryUseLiveTokensAndOwnedHeaders, connection_volume_backup_export_test.go:TestConnectionBackupExportOnlyCachedCinderPreservesSelectedPolicyWithoutLocationConsumption, blockstorage/backup_proxy_export_service_test.go:TestBackupProxyExportServiceFacadesSeparateOpaqueJSONAndLegacyTypedProjection.

  • Original finite HTTP 100..399 responses return an independently owned opaque Body/Header/StatusCode snapshot, including binary, invalid UTF-8, malformed/nonobject JSON and empty 204, without JSON or native base64/BackupRecord projection. Result BackupID is the requested string. Tests: blockstorage/backup_export_contract_test.go:TestExportVolumeBackupOpaqueSub400ResponseUsesOneBodylessFixedGETAndSelectedMicroversion, blockstorage/backup_export_contract_test.go:TestExportVolumeBackupOwnsOpaqueBodyAndHeadersAcrossIndependentCalls, connection_volume_backup_export_test.go:TestConnectionBackupExportOnlyCachedCinderPreservesSelectedPolicyWithoutLocationConsumption, blockstorage/backup_proxy_export_service_test.go:TestBackupProxyExportServiceFacadesSeparateOpaqueJSONAndLegacyTypedProjection.

  • Accepted Read/Close/source/context errors retain current Exported and independently owned ResponseError evidence, simultaneous caller causes and outer operation wrapping; Exported alone is not success. Rejected >=400 including 404 or failed redirect has no Exported and no lookup/absence fallback. Rejected response-body IO retains native limitations; no universal observer claim. Tests: blockstorage/backup_export_contract_test.go:TestExportVolumeBackupNativeRejectionsAreTerminalAndDoNotInventAdmittedProof, blockstorage/backup_export_transport_test.go:TestExportVolumeBackupAcceptedIOCancellationAndSourceFailuresKeepCurrentOwnedOpaqueProof, blockstorage/backup_export_transport_test.go:TestExportVolumeBackupNativeExpandedStatusCannotCreateAdmittedProof, blockstorage/backup_export_transport_test.go:TestExportVolumeBackupRedirectCannotChangeFixedTargetOrSendTokenToAnotherOrigin, connection_volume_backup_export_test.go:TestConnectionBackupExportAcceptedOpaqueIOOwnsCurrentProofAndAllCauses, blockstorage/backup_proxy_export_service_test.go:TestBackupProxyExportServiceFacadesPreflightKeepOuterMethodContext.

  • Retry body/decoder/retention or five captured service fact changes, and physical redirected request body/framing mutation, stop underlying resend with sticky policy errors. Restoration or swallowed callback errors cannot erase physical body rejection. Original rejection, callback and context.Cause remain reachable without fabricated admitted proof. Tests: blockstorage/backup_export_transport_test.go:TestExportVolumeBackupRejectsNativeRetryBodyDecoderRetentionOrSourceMutationBeforeResend, blockstorage/backup_export_transport_test.go:TestExportVolumeBackupRedirectCannotChangeFixedTargetOrSendTokenToAnotherOrigin, blockstorage/backup_export_redirect_body_test.go:TestExportVolumeBackupSameTargetRedirectCannotAddPhysicalBodyFraming, blockstorage/backup_export_redirect_body_test.go:TestExportVolumeBackupRedirectBodyRejectionSurvivesNativeRetryRestorationAndJoinedCauses, blockstorage/backup_proxy_export_service_test.go:TestBackupProxyExportServiceFacadesPreflightKeepOuterMethodContext.

  • The manual API.ExportRecord facade delegates to the existing raw engine, owns ExportRecord/backups outer error context, retains inner causes and physical result, and handles nil API as a local missing-client failure. The actual source target is deprecated v3 Proxy.export_record→Backup.export; Python warnings/filter-as-error are intentionally omitted and existing native API.Export is an independent typed operation. Tests: blockstorage/backup_proxy_export_service_test.go:TestBackupProxyExportServiceFacadesPreflightKeepOuterMethodContext, blockstorage/backup_proxy_export_service_test.go:TestBackupProxyExportServiceFacadesSeparateOpaqueJSONAndLegacyTypedProjection.

Python/Go differences:

  • Only actual v3 Proxy.export_record is this target. Its bodyless raw path is shared with separately reviewed cloud export_volume_backup. Parsed Proxy.export_backup/Resource Backup.export_record, deprecated Backup.export, native typed Export and v2 retain independent declaration reviews; full SDK remains incomplete.
  • Python permits connected mutable Resource, dict/Munch, None and permissive urljoin falsey/container/leading-slash identity. Go requires one safe literal UTF-8 string ID and intentionally omits Resource construction/update/current_location/descriptor/cache/object-identity side effects.
  • Both deprecated Proxy and Backup source warnings, including warning filters that can raise before construction or HTTP, are omitted from Go. API.ExportRecord/backups outer OperationError wraps the shared ExportVolumeBackup/volume backup engine while retaining causes.
  • The same mutable requests.Response maps to owned actual Body/Header/StatusCode rather than request/history/cookies/encoding/elapsed/response convenience methods. No UTF-8/JSON/base64/schema requirement is applied to raw bytes.
  • Go adds parent context interruption, joined custom causes and separately owned accepted partial/error proof. Original/native >=400 has no Exported, and native rejected response Read/Close limitations remain; no generic response-body observer promotion.
  • Safe fixed route/method/option policy and export-only physical body/framing guard constrain mutable native hooks/redirects. Native ordinary header hooks, live token and native retry/reauth remain; there is no force-style 3.64 override or universal header enforcement.
  • Finite real HTTP100..399 maps source <400. Source literals and local tests are distinct evidence; no authenticated Python/OpenStack execution, exhaustive HTTP/runtime-object domain or generic transport/Resource parity claim.
python:block_storage/v3/export_backup

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/backups.API.ExportBackup

  • github.com/JSYoo5B/go-openstacksdk.Connection.ExportVolumeBackupRecord

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.ExportVolumeBackupRecord

  • ExportVolumeBackupRecord package and Connection plus API.ExportBackup accept one safe nonempty literal UTF-8 ID with no resolver, generated identity, options, wait or CurrentLocation conversion. Direct/service engine captures selected source before ID; Connection performs local context/provider/ID preflight before cached Cinder v3 selection. Tests: blockstorage/backup_export_record_contract_test.go:TestExportVolumeBackupRecordPreflightUsesCapturedSourceAndSafeLiteralID, connection_volume_backup_export_record_test.go:TestConnectionBackupExportRecordPreflightAndSafeIDRejectBeforeCinder, connection_volume_backup_export_record_test.go:TestConnectionBackupExportRecordOnlyCachedCinderPreservesSelectedPolicyWithoutLocationConsumption, connection_volume_backup_export_record_test.go:TestConnectionBackupExportRecordGetterFailuresJoinCustomAndContextCauses, blockstorage/backup_proxy_export_service_test.go:TestBackupProxyExportServiceFacadesPreflightKeepOuterMethodContext.

  • One captured reader owns bodyless queryless GET backups/{ID}/export_record, pure parse and final source check; source is not recaptured after response. Original HTTP100..399 and selected microversion including omission remain, without forced3.64/discovery/cap. Live token/native authentication/retry and fixed request policies are shared with raw exchange. Tests: blockstorage/backup_export_record_contract_test.go:TestExportVolumeBackupRecordAcceptsArbitraryJSONAndPreservesLiteralValue, blockstorage/backup_export_record_transport_test.go:TestExportVolumeBackupRecordNativeReauthAndBoundedRetryUseLiveTokensAndOwnedHeaders, blockstorage/backup_export_record_transport_test.go:TestExportVolumeBackupRecordRejectsNativeRetryBodyDecoderRetentionOrSourceMutationBeforeResend, connection_volume_backup_export_record_test.go:TestConnectionBackupExportRecordOnlyCachedCinderPreservesSelectedPolicyWithoutLocationConsumption, blockstorage/backup_proxy_export_service_test.go:TestBackupProxyExportServiceFacadesSeparateOpaqueJSONAndLegacyTypedProjection.

  • Value is one whole arbitrary JSON value without backup-record extraction, runtime dict/object assertion, base64 projection or Backup descriptor conversion. Object/array/string/number/bool/null and falsey/empty values are valid; successful null is nonnil bytes null, while no published Value is nil. Tests: blockstorage/backup_export_record_contract_test.go:TestExportVolumeBackupRecordAcceptsArbitraryJSONAndPreservesLiteralValue, connection_volume_backup_export_record_test.go:TestConnectionBackupExportRecordOnlyCachedCinderPreservesSelectedPolicyWithoutLocationConsumption, blockstorage/backup_proxy_export_service_test.go:TestBackupProxyExportServiceFacadesSeparateOpaqueJSONAndLegacyTypedProjection.

  • The chosen Go representation is independently owned literal UTF-8 json.RawMessage: document leading/trailing whitespace excluded; interior whitespace, number spelling/precision, escapes and duplicate member literals retained. No float64/UseNumber tree or serialization normalization is introduced. This is explicitly different from semantic mutable Python dict/list/scalar decoding. Tests: blockstorage/backup_export_record_contract_test.go:TestExportVolumeBackupRecordAcceptsArbitraryJSONAndPreservesLiteralValue, blockstorage/backup_export_record_contract_test.go:TestExportVolumeBackupRecordValuePhysicalProofAndSeparateCallsOwnDifferentStorage, blockstorage/backup_proxy_export_service_test.go:TestBackupProxyExportServiceFacadesSeparateOpaqueJSONAndLegacyTypedProjection.

  • A complete ordinary UTF-8 JSON document and EOF are required. Empty/malformed/trailing-second-value/trailing-garbage, unsupported UTF16/UTF32/BOM/invalidUTF8 and nonfinite NaN/Infinity tokens fail parsing without another HTTP request or native JSONResponse retry. Original rejected HTTP errors precede JSON parsing and never invent Exported/Value. Tests: blockstorage/backup_export_record_contract_test.go:TestExportVolumeBackupRecordRejectsInvalidDocumentWithoutParserRetryAndKeepsActualProof, blockstorage/backup_export_record_contract_test.go:TestExportVolumeBackupRecordHTTPRejectionPrecedesJSONParsingAndHasOnlyNativeProof, connection_volume_backup_export_record_test.go:TestConnectionBackupExportRecordParserFailureRetainsOpaqueProofWithParsedOperationAndNoNativeRetry, blockstorage/backup_proxy_export_service_test.go:TestBackupProxyExportServiceParsedFailuresKeepCurrentProofAndNeverRetryDecoder.

  • Actual opaque Exported is copied before accepted IO/source/context or JSON failures. Value is published only after full parse and last guard on the same captured source succeeds. Partial/current physical bytes/header/status and joined custom causes remain separately owned; Value, Exported and ResponseError do not alias. Exported presence alone does not establish success. Tests: blockstorage/backup_export_record_contract_test.go:TestExportVolumeBackupRecordRejectsInvalidDocumentWithoutParserRetryAndKeepsActualProof, blockstorage/backup_export_record_contract_test.go:TestExportVolumeBackupRecordValuePhysicalProofAndSeparateCallsOwnDifferentStorage, blockstorage/backup_export_record_transport_test.go:TestExportVolumeBackupRecordAcceptedIOCancellationAndSourceFailuresKeepCurrentOwnedOpaqueProof, connection_volume_backup_export_record_test.go:TestConnectionBackupExportRecordAcceptedOpaqueIOOwnsCurrentProofAndAllCauses, connection_volume_backup_export_record_test.go:TestConnectionBackupExportRecordParserFailureRetainsOpaqueProofWithParsedOperationAndNoNativeRetry, blockstorage/backup_proxy_export_service_test.go:TestBackupProxyExportServiceParsedFailuresKeepCurrentProofAndNeverRetryDecoder.

  • Bodyless/decoder/retention/method/URL and sticky five-fact source policy apply through native retry/reauth and redirects, including physical Body/ContentLength/TransferEncoding rejection before transport and terminal rejection after restoration. Expanded native OkCodes cannot admit original-policy >=400; safe changed-path/foreign-origin redirects cannot resend credentials. No SDK replay/rollback occurs. Tests: blockstorage/backup_export_record_transport_test.go:TestExportVolumeBackupRecordRejectsNativeRetryBodyDecoderRetentionOrSourceMutationBeforeResend, blockstorage/backup_export_record_transport_test.go:TestExportVolumeBackupRecordNativeExpandedStatusCannotCreateAdmittedProof, blockstorage/backup_export_record_transport_test.go:TestExportVolumeBackupRecordRejectsPhysicalRedirectMutationAndKeepsStickyCause, blockstorage/backup_export_redirect_body_test.go:TestExportVolumeBackupSameTargetRedirectCannotAddPhysicalBodyFraming, blockstorage/backup_export_redirect_body_test.go:TestExportVolumeBackupRedirectBodyRejectionSurvivesNativeRetryRestorationAndJoinedCauses.

  • Connection exposes ExportVolumeBackupRecord and cached Cinder v3 only; direct package and service ExportBackup retain their exact public/outer operation context and underlying causes, including nil API local failure. The actual source graph is v3 Proxy.export_backup→Backup.export_record→response.json; warning/Resource/session/backend/encoding identities are explicit Go mappings, independently of raw and native/v2/Resource review status. Tests: connection_volume_backup_export_record_test.go:TestConnectionBackupExportRecordPreflightAndSafeIDRejectBeforeCinder, connection_volume_backup_export_record_test.go:TestConnectionBackupExportRecordOnlyCachedCinderPreservesSelectedPolicyWithoutLocationConsumption, connection_volume_backup_export_record_test.go:TestConnectionBackupExportRecordGetterFailuresJoinCustomAndContextCauses, connection_volume_backup_export_record_test.go:TestConnectionBackupExportRecordAcceptedOpaqueIOOwnsCurrentProofAndAllCauses, connection_volume_backup_export_record_test.go:TestConnectionBackupExportRecordParserFailureRetainsOpaqueProofWithParsedOperationAndNoNativeRetry, blockstorage/backup_proxy_export_service_test.go:TestBackupProxyExportServiceFacadesPreflightKeepOuterMethodContext, blockstorage/backup_proxy_export_service_test.go:TestBackupProxyExportServiceFacadesSeparateOpaqueJSONAndLegacyTypedProjection, blockstorage/backup_proxy_export_service_test.go:TestBackupProxyExportServiceParsedFailuresKeepCurrentProofAndNeverRetryDecoder.

Python/Go differences:

  • Only actual v3 Proxy.export_backup is this target. ExportVolumeBackupRecord is a Go convenience spelling for this Proxy operation, not a new Python cloud declaration. Raw Proxy.export_record, Backup.export_record method, native typed/base64 Export, v2 and generic Resource remain independent reviews; full SDK is incomplete.
  • Go uses a safe literal UTF-8 BackupID string and skips Python _get_resource construction/update of connected Resource/dict/Munch/None, mutable descriptor/location/cache/object identity and permissive urljoin coercion. Connection consumes no CurrentLocation.
  • Python response.json returns a semantic backend/interpreter object. Go preserves a validated one-document UTF-8 literal RawMessage of any shape, with number/escape/duplicate text and interior spacing intact; document exterior whitespace is excluded. Duplicate last-value semantics, float rounding/underflow, unpaired string surrogate interpretation and interpreter/backend number/depth limits are not replicated. Value must be explicitly decoded by callers who need a semantic Go structure.
  • The SDK source pin does not lock Requests/simplejson/interpreter versions or selected decoder. Requests v2.32.5 references show optional simplejson/stdlib, encoding detection including UTF16/32/BOM and text replacement fallback; those references are not SDK exact dependency pins. Go accepts only ordinary UTF8 JSON, rejects unsupported encoding/BOM/nonfinite tokens and applies Go parser structural limits.
  • Source annotations/cast do not enforce a dict, BackupRecord envelope or base64; Go likewise admits arbitrary JSON shapes. Source .json occurs after session.get, so parsing is local after the opaque exchange and never causes another HTTP attempt. Existing native JSONResponse/BackupRecord projection remains untouched.
  • Go adds raw admitted Exported and joined partial IO/context/source/parser proof, with nil Value on any failure and nonnil null on successful JSON null. Parent context, independently owned result/error bytes/header and operation wrapping replace Python exception/session/Response identities. Native rejected body Read/Close discarded errors remain a bounded limitation.
  • Safe fixed route/method/native option and export-only physical body/framing policy constrain mutable native callbacks/redirects. Ordinary native header hooks and live authentication/retry remain; source/body rejection is sticky, selected microversion unchanged and no 3.64 forced action/default/cap/discovery is added.
  • Parsed source path contains neither the raw Proxy nor Backup deprecated warning emission; Go does not recreate the Python warning machinery. Local source/tests/docs gates and backend references do not establish authenticated Python/OpenStack runtime or automatic native/v2/Resource parity.
python:block_storage/v3/restore_backup

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/backups.API.RestoreBackup

  • github.com/JSYoo5B/go-openstacksdk.Connection.RestoreVolumeBackup

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.RestoreVolumeBackup

  • RestoreVolumeBackup, Connection.RestoreVolumeBackup and API.RestoreBackup use a safe literal nonempty UTF-8 BackupID and one queryless POST backups/{ID}/restore. Only nonempty literal VolumeID/Name enter the restore object; both nil/empty are rejected. There is no destination resolver, backup lookup, generated ID, wait or implicit forced microversion; the selected microversion, including omission, remains unchanged. Tests: blockstorage/backup_proxy_action_contract_test.go:TestRestoreVolumeBackupSendsOnlyNonemptyLiteralTargetsAndKeepsSelectedMicroversion, blockstorage/backup_restore_options_test.go:TestRestoreVolumeBackupRejectsInvalidTargetSeedAndLocalDescriptorsBeforeHTTP, blockstorage/backup_proxy_action_service_test.go:TestBackupProxyServiceActionsPreserveNativeTypedRestoreAndSelectedVersionReset.

  • Direct source capture precedes original options. Local context/source/route/body UTF-8/Seed checks reject before HTTP with no ResponseError; Seed must be an object and any present Seed.id must be the same safe string ID. Descriptor and owned Location failures are local rather than borrowed HTTP proof. Tests: blockstorage/backup_restore_options_test.go:TestRestoreVolumeBackupRejectsInvalidTargetSeedAndLocalDescriptorsBeforeHTTP, blockstorage/backup_restore_options_test.go:TestRestoreVolumeBackupCapturesSourceBeforeOriginalsAndRejectsDriftBeforeRestoration, connection_volume_backup_actions_test.go:TestConnectionBackupProxyActionPreflightAndOriginalFailuresNeverSelectService.

  • Restore factories and Prepare own pointer strings, raw Seed, complete Location and original option slice; originals execute once in order. Copies after each callback prevent retained option mutation, nil/canceled/callback errors stop later originals, and sticky five-fact source drift cannot be restored by a later original. Ordinary source headers are captured without freezing live authentication. Tests: blockstorage/backup_restore_options_test.go:TestRestoreVolumeBackupPrepareOwnsFactoryValuesAndRemainsReusableWithoutHTTP, blockstorage/backup_restore_options_test.go:TestRestoreVolumeBackupPrepareCapturesOriginalSliceAndIsolatesRetainedCallbacks, blockstorage/backup_restore_options_test.go:TestRestoreVolumeBackupPrepareStopsOnNilContextCancellationNilOptionAndJoinedCallbackCauses, blockstorage/backup_restore_options_test.go:TestRestoreVolumeBackupCapturesSourceBeforeOriginalsAndRejectsDriftBeforeRestoration, blockstorage/backup_proxy_action_transport_test.go:TestBackupProxyActionTransportLiveReauthAndOwnedBodyRetryReachOneAcceptedAction.

  • Connection prepares originals and local input first, snapshots CurrentLocation next, then selects only cached Cinder v3. Originals execute once per call, getter/HTTP changes do not alter that call scope, and a later call refreshes recorded scope while reusing the cached client. Getter, callback and context failures keep RestoreVolumeBackup operation and reachable custom causes. Tests: connection_volume_backup_actions_test.go:TestConnectionBackupProxyActionOriginalsRunOnceBeforeOnlyCachedCinderSelection, connection_volume_backup_actions_test.go:TestConnectionBackupProxyActionRestoreScopeAndOptionsSnapshotPrecedeGetterAndRefreshNextCall, connection_volume_backup_actions_test.go:TestConnectionBackupProxyActionPreflightAndOriginalFailuresNeverSelectService, connection_volume_backup_actions_test.go:TestConnectionBackupProxyActionGetterFailuresKeepOuterOperationAndCallerCauses.

  • A complete explicit owned Location override replaces recorded defaults without mutating them. The merged Backup project and literal availability_zone compute the result location; foreign project IDs clear configured project names/domain fields, and missing zone is null rather than the configured zone. Explicit valid Location can bypass malformed unused recorded scope. Tests: connection_volume_backup_actions_test.go:TestConnectionBackupProxyActionRestoreCompleteLocationOverrideRemainsOwnedAndDoesNotChangeDefaults, connection_volume_backup_actions_test.go:TestConnectionBackupProxyActionResetDoesNotConsumeMalformedRecordedScope, blockstorage/backup_proxy_action_contract_test.go:TestRestoreVolumeBackupMergesKnownSeedAndResponseWhileKeepingPhysicalObjectAndValueIndependent, internal/cloudsnapshot/backup_model_test.go:TestBackupModelLocationUsesBothRowProjectAndLiteralAvailabilityZone.

  • Response translation selects present restore, otherwise present backup, otherwise flat object. A selected valid wrong shape blocks fallback; empty/malformed ordinary UTF-8 JSON preserves the seeded logical state with no invented physical object. Invalid UTF-8 and descriptor failures are terminal with current admitted proof, nil Value, and no decoder-triggered HTTP retry. Tests: blockstorage/backup_proxy_action_contract_test.go:TestRestoreVolumeBackupUsesEnvelopePresenceAndToleratesOnlyMalformedJSONWithoutInventingObject.

  • Known Seed and response attributes form a partial logical Backup overlay, with response aliases consumed in parsed object order. Unknown and runtime/control response fields remain only in the actual selected RawResource. Request volume/name and native backup_id do not fabricate logical id/name. Response id remains arbitrary JSON and may replace the returned logical BackupID without changing the fixed request target. Tests: blockstorage/backup_proxy_action_contract_test.go:TestRestoreVolumeBackupMergesKnownSeedAndResponseWhileKeepingPhysicalObjectAndValueIndependent, blockstorage/backup_proxy_action_contract_test.go:TestRestoreVolumeBackupRetainsArbitraryResponseIDWithoutChangingFixedRequestTarget, blockstorage/backup_proxy_action_service_test.go:TestBackupProxyServiceActionsPreserveNativeTypedRestoreAndSelectedVersionReset, internal/cloudsnapshot/backup_model_test.go:TestBackupModelProjectAliasesFollowParsedDuplicateFirstInsertionOrder.

  • Successful Value is the full nullable 23-Body-field plus computed-location Backup view, independently of the actual response object. Reused descriptors retain untyped nullable IDs/status/strings, ordinary Boolean truthiness rather than BoolStr, list wrapping, nullable ordinary dictionary metadata, and eager size/object_count integer conversion. Container integer values become zero; invalid superscript-digit strings fail. Exact-decimal Go truthiness and Python float boundaries are explicit differences. Tests: blockstorage/backup_proxy_action_contract_test.go:TestRestoreVolumeBackupMergesKnownSeedAndResponseWhileKeepingPhysicalObjectAndValueIndependent, blockstorage/backup_proxy_action_contract_test.go:TestRestoreVolumeBackupUsesEnvelopePresenceAndToleratesOnlyMalformedJSONWithoutInventingObject, internal/cloudsnapshot/backup_model_test.go:TestBackupModelHasTwentyFourNullableFieldsAndOwnDescriptorOrder, internal/cloudsnapshot/backup_model_test.go:TestBackupModelOrdinaryBooleanDescriptorsAreNullableAndDoNotUseBoolStr, internal/cloudsnapshot/backup_model_test.go:TestBackupModelLinksWrapSingleValuesAndMetadataUsesOrdinaryNullableDict, internal/cloudsnapshot/backup_model_test.go:TestBackupModelBothIntegerDescriptorsConvertBeforeAnySelection.

  • Applied owns actual full admitted bytes/header/status. Backup owns only the selected physical object with actual metadata; Value and BackupID own the merged logical output independently. Sparse response raw objects never invent cached fields or seeded ID, and mutations of each result part do not alter the others. Tests: blockstorage/backup_proxy_action_contract_test.go:TestRestoreVolumeBackupMergesKnownSeedAndResponseWhileKeepingPhysicalObjectAndValueIndependent, blockstorage/backup_proxy_action_contract_test.go:TestRestoreVolumeBackupRetainsArbitraryResponseIDWithoutChangingFixedRequestTarget, blockstorage/backup_proxy_action_contract_test.go:TestRestoreVolumeBackupUsesEnvelopePresenceAndToleratesOnlyMalformedJSONWithoutInventingObject.

  • The original exchange admits HTTP100..399 and rejects >=400 through the native error path before logical translation. Native rejected body/header/status remain reachable without Applied or invented ResponseError; expanded mutable native OkCodes cannot turn an original-policy rejection into success. Tests: blockstorage/backup_proxy_action_contract_test.go:TestRestoreVolumeBackupSendsOnlyNonemptyLiteralTargetsAndKeepsSelectedMicroversion, blockstorage/backup_proxy_action_contract_test.go:TestRestoreVolumeBackupUsesEnvelopePresenceAndToleratesOnlyMalformedJSONWithoutInventingObject, blockstorage/backup_proxy_action_contract_test.go:TestBackupProxyPublicActionsRejectNativeHTTPWithoutBorrowedProofOrLogicalCompletion, blockstorage/backup_proxy_action_transport_test.go:TestBackupProxyActionTransportNativeAndExpandedRejectionsNeverBecomeApplied.

  • Admitted Read/Close, five-fact source drift and custom context failures retain current Applied and independently owned ResponseError proof with every joined cause, but publish no Value/Backup. Close occurs once and accepted body IO faults do not call native RetryFunc or trigger SDK replay/rollback. Tests: blockstorage/backup_proxy_action_transport_test.go:TestBackupProxyActionTransportAcceptedFaultsKeepCurrentProofAndEveryCause, connection_volume_backup_actions_test.go:TestConnectionBackupProxyActionAcceptedIOKeepsActualAppliedAndJoinedSourceCancellation.

  • Live native reauthentication and bounded retry retain fixed selected source and captured ordinary headers with owned serialized JSON body. Mutable native body/decoder/retention options or Provider/Endpoint/ResourceBase/Type/Microversion changes stop resend; original rejection and callback causes remain reachable. Tests: blockstorage/backup_proxy_action_transport_test.go:TestBackupProxyActionTransportLiveReauthAndOwnedBodyRetryReachOneAcceptedAction, blockstorage/backup_proxy_action_transport_test.go:TestBackupProxyActionTransportRetryMutationStopsBeforeSecondPhysicalRequest.

  • The closed shared POST helper checks exact physical serialized body, ContentLength, TransferEncoding and framing headers on redirects as well as ordinary attempts, closes the inspected Body once, and reinstalls an owned valid body. Changed method/path/origin or body/framing and injected Read/Close faults stop before a second physical request. Sticky faults survive native retry restoration/swallowing and preserve source/context/callback causes. Tests: blockstorage/backup_proxy_action_transport_test.go:TestBackupProxyActionTransportSameTarget307CannotChangePhysicalBodyOrFraming, blockstorage/backup_proxy_action_transport_test.go:TestBackupProxyActionTransportPhysicalReadCloseFaultsStayTerminalAfterRetryRestoration, blockstorage/backup_proxy_action_transport_test.go:TestBackupProxyActionTransportRedirectScopeCannotChangeMethodPathOrOrigin.

  • Service RestoreBackup owns the same factories/options and wraps failures with its actual outer method/resource while package and Connection keep their own operation names. Existing native RestoreFromBackup remains an independent accepted202 three-string Restore DTO, permitting empty native options; it does not replace the new merged Backup view or acquire this declaration review. Tests: blockstorage/backup_proxy_action_service_test.go:TestBackupProxyServiceActionsExposeOwnedLocalFactoriesAndCorrectOuterErrorLabels, blockstorage/backup_proxy_action_service_test.go:TestBackupProxyServiceActionsPreserveNativeTypedRestoreAndSelectedVersionReset, connection_volume_backup_actions_test.go:TestConnectionBackupProxyActionGetterFailuresKeepOuterOperationAndCallerCauses.

Python/Go differences:

  • Go VolumeID/Name are optional copied UTF-8 string pointers; nil/empty are omitted and both falsey fail locally. Python volume may be Resource/dict/literal and truthy volume triggers Resource._get_id before Backup construction; nonstring dynamic values and warning machinery are not typed Go inputs. Deprecated volume_id overrides volume in the source decorator, and warning-as-error effects are not recreated.
  • Go Seed is an owned canonical object overlay with a matching safe ID, rather than mutation of a supplied connected Backup. Seed unknown/computed/runtime controls are ignored by the known state; source constructors/update descriptors and mutable dirty/cache state are not reproduced. Complete owned location plus configured/token scope replace constructor connection identity.
  • Restore returns merged logical RawMessage BackupID and full nullable Backup Value separately from Applied and actual selected RawResource; source returns the same mutated Backup. Response id is an untyped attribute and is not the fixed request route; native backup_id stays unknown raw evidence rather than being mapped to logical id. No destination request values are backfilled as response fields.
  • Go preserves literal raw unknown response fields/number spelling as physical evidence, while the logical view uses ordinary JSON descriptors and known-only overlay. Exact decimal Boolean/project equality versus Python parsed-float underflow/rounding, parser/UTF8/string-surrogate/depth/backend boundaries and Python mutable dictionary identities are explicit differences. Parsed duplicate collapse retains first insertion position for alias consumption; raw wire member text is not promoted to semantic Python identity.
  • Ordinary UTF-8 malformed/empty JSON tolerance and present-envelope precedence are bounded response mappings. Go rejects invalid UTF8 and valid wrong shapes with actual response proof; Python selected JSON backend/encoding/exception behavior is not universally replicated. Existing native RestoreFromBackup still has its accepted202/three-string result and allows empty native options.
  • Go accepts safe literal string BackupID, rejecting permissive Python urljoin/coercion and mutable Resource/dict/Munch/None inputs. Source constructor/session/cache/object identities are not reproduced; this is a coherent owned Go mapping of this direct Proxy declaration, not automatic parity for those separate dependencies.
  • Source raise_from_response rejects >=400; the owned Go exchange admits finite HTTP100..399, preserving native rejected errors. Admitted result/error bytes/header are independent snapshots with joined IO/source/context proof. Native rejected response body Read/Close discarded errors remain a bounded transport limitation rather than universally preserved IO.
  • Safe fixed route/method and closed exact POST body/framing plus sticky five-fact source guards constrain mutable native retry/redirect hooks. Ordinary native header hooks, live token, reauthentication and bounded retry remain. Parent context and operation wrapping replace Python exception/session identities; no SDK rollback/replay or wait is added.
  • Source bindings are static pinned declarations: the historical restore33 and reset38 graphs overlap and are not new Python probes or authenticated OpenStack integration. Only this actual v3 Proxy target is classified; Backup method, generic Resource, native/v2, deprecated alias, other cloud/Proxy helpers and full SDK remain independent.
python:block_storage/v3/reset_backup_status

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/backups.API.ResetBackupStatus

  • github.com/JSYoo5B/go-openstacksdk.Connection.ResetVolumeBackupStatus

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.ResetVolumeBackupStatus

  • ResetVolumeBackupStatus, Connection.ResetVolumeBackupStatus and API.ResetBackupStatus require a safe literal BackupID and explicit UTF-8 Status string, including empty, unknown, whitespace/control and Unicode values. One queryless POST backups/{ID}/action contains exactly os-reset_status.status. There is no status enum/default, resolver, wait or semantic status confirmation. Tests: blockstorage/backup_proxy_action_contract_test.go:TestResetVolumeBackupStatusForwardsEveryUTF8StringWithForcedMicroversionAndOpaqueAck, blockstorage/backup_proxy_action_contract_test.go:TestResetVolumeBackupStatusPreflightRejectsUnsafeIDInvalidUTF8AndInvalidSourceBeforeHTTP, blockstorage/backup_proxy_action_service_test.go:TestBackupProxyServiceActionsPreserveNativeTypedRestoreAndSelectedVersionReset.

  • Reset forces action microversion3.64 independently of the selected client version, without discovery/default/cap and without mutating the original client or headers. Actual modern and legacy action headers must remain consistent through native retry and physical redirects; valid case-folded aliases are permitted while deletion, conflict and OmitHeaders are terminal. Tests: blockstorage/backup_proxy_action_contract_test.go:TestResetVolumeBackupStatusForwardsEveryUTF8StringWithForcedMicroversionAndOpaqueAck, blockstorage/backup_proxy_action_transport_test.go:TestBackupProxyActionTransportResetRetryVersionAliasesAreValidatedBeforeResend, blockstorage/backup_proxy_action_transport_test.go:TestBackupProxyActionTransportPhysicalResetHeaderRejectionSurvivesRetryRepair.

  • Direct Reset captures source before ID/status validation. Invalid context/source/route/UTF-8 status fails before HTTP; Connection validates context/provider/input before selecting only cached Cinder v3. There are no reset options or CurrentLocation/Backup descriptor construction; malformed unused recorded scope cannot block an otherwise valid opaque reset. Tests: blockstorage/backup_proxy_action_contract_test.go:TestResetVolumeBackupStatusPreflightRejectsUnsafeIDInvalidUTF8AndInvalidSourceBeforeHTTP, connection_volume_backup_actions_test.go:TestConnectionBackupProxyActionPreflightAndOriginalFailuresNeverSelectService, connection_volume_backup_actions_test.go:TestConnectionBackupProxyActionOriginalsRunOnceBeforeOnlyCachedCinderSelection, connection_volume_backup_actions_test.go:TestConnectionBackupProxyActionResetDoesNotConsumeMalformedRecordedScope.

  • Original HTTP100..399 acknowledgement is opaque: invalid UTF-8, malformed JSON, empty body or arbitrary JSON need no decoder. Applied holds actual bytes/header/status, BackupID is the fixed string input, and Completed becomes true only after exchange/read/Close/final captured-source validation succeeds. Completed is helper acknowledgement rather than a polled status postcondition. Tests: blockstorage/backup_proxy_action_contract_test.go:TestResetVolumeBackupStatusForwardsEveryUTF8StringWithForcedMicroversionAndOpaqueAck, blockstorage/backup_proxy_action_service_test.go:TestBackupProxyServiceActionsPreserveNativeTypedRestoreAndSelectedVersionReset, connection_volume_backup_actions_test.go:TestConnectionBackupProxyActionResetDoesNotConsumeMalformedRecordedScope.

  • Original-policy >=400 keeps native rejected code/body/header and has no Applied, Completed or borrowed ResponseError. Expanded native OkCodes do not admit a rejected response; no reset parser or SDK replay is introduced. Tests: blockstorage/backup_proxy_action_contract_test.go:TestBackupProxyPublicActionsRejectNativeHTTPWithoutBorrowedProofOrLogicalCompletion, blockstorage/backup_proxy_action_transport_test.go:TestBackupProxyActionTransportNativeAndExpandedRejectionsNeverBecomeApplied.

  • Admitted Read/Close/source/custom context faults retain actual Applied and independently owned ResponseError with all joined causes and Completed=false. Close occurs once and accepted faults do not invoke native RetryFunc; reset success never requires logical Backup conversion. Tests: blockstorage/backup_proxy_action_transport_test.go:TestBackupProxyActionTransportAcceptedFaultsKeepCurrentProofAndEveryCause, connection_volume_backup_actions_test.go:TestConnectionBackupProxyActionAcceptedIOKeepsActualAppliedAndJoinedSourceCancellation.

  • Native reauthentication and bounded retry use live tokens with captured ordinary headers and owned serialized action body. Mutated native body/decoder/retention policy or five-fact source stops before resend with original and callback causes retained. Tests: blockstorage/backup_proxy_action_transport_test.go:TestBackupProxyActionTransportLiveReauthAndOwnedBodyRetryReachOneAcceptedAction, blockstorage/backup_proxy_action_transport_test.go:TestBackupProxyActionTransportRetryMutationStopsBeforeSecondPhysicalRequest.

  • The action body/framing is verified at every physical POST, including same-target307 redirects. Changed bytes, size/framing, nil body and injected Read/Close failures are terminal; valid inspected Body is closed once and replaced by an owned body. Sticky rejection survives a repairing native RetryFunc and preserves joined source/context/callback causes. Tests: blockstorage/backup_proxy_action_transport_test.go:TestBackupProxyActionTransportSameTarget307CannotChangePhysicalBodyOrFraming, blockstorage/backup_proxy_action_transport_test.go:TestBackupProxyActionTransportPhysicalReadCloseFaultsStayTerminalAfterRetryRestoration.

  • Method/path/origin redirect changes are rejected before a second transport call and before foreign credentials escape. Connection getter and service preflight failures keep exact ResetVolumeBackupStatus or ResetBackupStatus operation context and custom cancellation causes; cached selection is Cinder v3 only. Tests: blockstorage/backup_proxy_action_transport_test.go:TestBackupProxyActionTransportRedirectScopeCannotChangeMethodPathOrOrigin, connection_volume_backup_actions_test.go:TestConnectionBackupProxyActionGetterFailuresKeepOuterOperationAndCallerCauses, blockstorage/backup_proxy_action_service_test.go:TestBackupProxyServiceActionsExposeOwnedLocalFactoriesAndCorrectOuterErrorLabels.

  • New service ResetBackupStatus returns owned opaque Applied plus Completed and forces3.64, while existing native ResetStatus remains selected-version accepted202 error-only. The actual source graph is v3 Proxy.reset_backup_status→Backup.reset_status→Backup._action; source Resource/session/warning identities and None return are explicit Go mappings, independently of native/v2/deprecated alias/Resource review status. Tests: blockstorage/backup_proxy_action_service_test.go:TestBackupProxyServiceActionsPreserveNativeTypedRestoreAndSelectedVersionReset, blockstorage/backup_proxy_action_service_test.go:TestBackupProxyServiceActionsExposeOwnedLocalFactoriesAndCorrectOuterErrorLabels, connection_volume_backup_actions_test.go:TestConnectionBackupProxyActionResetDoesNotConsumeMalformedRecordedScope.

Python/Go differences:

  • Go Status is an explicitly supplied UTF8 string with no default/enum, including empty/control/unknown values. Python annotations do not runtime-reject null, numeric, bool or containers; those dynamic values are outside this typed request domain.
  • Reset uses only safe ID and opaque acknowledgement and consumes no CurrentLocation or Backup descriptors. Python _get_resource may construct/update a mutable connected Resource/dict/Munch/None with location/descriptor/constructor side effects; those side effects are deliberately omitted from this ID-only Go operation.
  • Source Proxy.reset_backup_status and Backup.reset_status return implicit None and do not update the supplied Backup status. Go adds independently owned Applied plus Completed, which means complete helper acknowledgement rather than semantic status change confirmation. Failed admitted exchanges retain Applied but leave Completed false.
  • Source Backup._action explicitly uses its3.64 class maximum; Go forces3.64 on an operation copy and validates modern/legacy physical action headers. Selected original client policy remains unchanged. Existing native ResetStatus stays selected-version/accepted202/error-only, and deprecated reset_backup/reset warning behavior is not recreated.
  • Go accepts safe literal string BackupID, rejecting permissive Python urljoin/coercion and mutable Resource/dict/Munch/None inputs. Source constructor/session/cache/object identities are not reproduced; this is a coherent owned Go mapping of this direct Proxy declaration, not automatic parity for those separate dependencies.
  • Source raise_from_response rejects >=400; the owned Go exchange admits finite HTTP100..399, preserving native rejected errors. Admitted result/error bytes/header are independent snapshots with joined IO/source/context proof. Native rejected response body Read/Close discarded errors remain a bounded transport limitation rather than universally preserved IO.
  • Safe fixed route/method and closed exact POST body/framing plus sticky five-fact source guards constrain mutable native retry/redirect hooks. Ordinary native header hooks, live token, reauthentication and bounded retry remain. Parent context and operation wrapping replace Python exception/session identities; no SDK rollback/replay or wait is added.
  • Source bindings are static pinned declarations: the historical restore33 and reset38 graphs overlap and are not new Python probes or authenticated OpenStack integration. Only this actual v3 Proxy target is classified; Backup method, generic Resource, native/v2, deprecated alias, other cloud/Proxy helpers and full SDK remain independent.
python:block_storage/v3/import_backup

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/backups.API.ImportBackup

  • github.com/JSYoo5B/go-openstacksdk.Connection.ImportVolumeBackup

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.ImportVolumeBackup

  • Package, Connection and service import take two explicit literal UTF-8 strings, including empty/control/Unicode values, without defaults, enum, URI/base64 validation, resolver, builder or wait. One queryless POST backups/import_record contains exactly backup-record.backup_service and the caller backup_url. This explicitly repairs the pinned Source overwritten export_record route and argument. Caller composition with a parsed export locator adds no automatic bytes conversion. Tests: blockstorage/backup_import_contract_test.go:TestImportVolumeBackupRepairsRouteAndForwardsBothLiteralStrings, blockstorage/backup_import_contract_test.go:TestImportVolumeBackupComposesWithParsedExportWithoutBase64Transformation.

  • Direct source capture and context/provider/endpoint/resource/header validation precede input admission. Invalid UTF-8 fails locally. Connection validates context/provider/input before selecting only cached Cinder v3; getter errors retain outer operation and every custom cancellation cause without fabricated HTTP proof. Tests: blockstorage/backup_import_contract_test.go:TestImportVolumeBackupPreflightRejectsOnlyInvalidUTF8AndInvalidCapturedSource, connection_volume_backup_import_test.go:TestConnectionImportVolumeBackupPreflightRejectsBeforeOnlyCinderSelection, connection_volume_backup_import_test.go:TestConnectionImportVolumeBackupGetterFailuresJoinCallerCausesWithoutProof.

  • Selected nonempty client microversion wins literally with no discovery/cap or original-client mutation. Otherwise finite same-origin captured-endpoint bodyless discovery preserves encoded reverse-proxy prefixes and selects the first usable v3 row from supported flat/version/versions/versions.values shapes. Maximum is parsed before optional minimum, capped against3.64 using tuple order/length; missing maximum ignores unused minimum, and minimum above cap omits version. Signed arbitrary-precision Unicode decimal/underscore strings and finite-major latest header failure follow the owned bounded parser policy. Tests: blockstorage/backup_import_discovery_test.go:TestImportVolumeBackupSelectedMicroversionWinsWithoutDiscoveryOrCap, blockstorage/backup_import_discovery_test.go:TestImportVolumeBackupDiscoverySelectsBoundedMaximumAndOptionalMinimum, internal/cloudsnapshot/backup_import_version_test.go:TestBackupImportVersionIndependentStringAndHeaderCases, internal/cloudsnapshot/backup_import_version_test.go:TestBackupImportVersionIndependentMaximumMinimumCases.

  • Only clean concrete native404/405 allows finite candidate fallback; accepted empty/no usable v3 may advance candidates, while a found v3 row without maximum ends version selection. Accepted discovery HTTP200/300 proof is independent of import Applied. Malformed accepted data, joined rejected IO/callback faults, expanded OkCodes, five-fact source drift and custom cancellation are terminal and cannot authorize POST or fabricate admitted proof. Tests: blockstorage/backup_import_discovery_test.go:TestImportVolumeBackupDiscoveryIsFiniteAndCleanUnavailableFallsBack, blockstorage/backup_import_discovery_test.go:TestImportVolumeBackupInvalidAcceptedDiscoveryKeepsOnlyCurrentDiscoveryProof, blockstorage/backup_import_discovery_test.go:TestImportVolumeBackupDiscoveryFaultsSourceDriftAndCancellationAreTerminal.

  • A fresh disconnected nullable24 Backup has literal null location and never consumes CurrentLocation, configured/token project lookup, response zone/location or request-ID seed. Response ID remains untyped, including missing/null/false/zero/empty/container values. Known-only overlay shares ordinary Boolean/list/dict/integer descriptors; actual raw unknown/member fields remain independent evidence. Connection reuses cached Cinder and live token with captured ordinary headers, while each discovered microversion belongs to that call rather than the cached client. Tests: blockstorage/backup_import_contract_test.go:TestImportVolumeBackupBuildsDisconnectedNullableBackupFromActualKnownFields, blockstorage/backup_import_contract_test.go:TestImportVolumeBackupKeepsArbitraryResponseIDWithoutInventingSeed, internal/cloudsnapshot/backup_disconnected_test.go:TestBackupDisconnectedModelKeepsNullLocationAndNeverSeedsIdentity, internal/cloudsnapshot/backup_disconnected_test.go:TestBackupDisconnectedModelSharesNullableDescriptorConversion, connection_volume_backup_import_test.go:TestConnectionImportVolumeBackupUsesCachedCinderAndIgnoresInvalidLocation, connection_volume_backup_import_test.go:TestConnectionImportVolumeBackupDiscoveryPolicyIsPerCallAndDoesNotMutateCache.

  • Present backup envelope wins; absent envelope selects a flat object. Ordinary empty/malformed UTF-8 JSON retains the all-null view without an invented raw object; genuine empty object remains actual evidence. Valid wrong shapes, invalid UTF-8 and descriptor conversion errors keep current accepted proof and no Value or decoder retry. A consumed physical response ID survives later descriptor failure; failures before overlay retain null. Tests: blockstorage/backup_import_contract_test.go:TestImportVolumeBackupUsesEnvelopePresenceAndOnlyMalformedJSONLeavesDefaults.

  • Publish logical Value only after translation, descriptor conversion and final captured-source guard. BackupID, Value, selected raw Backup, Applied bytes/headers and separate calls own independent storage. Native original-policy >=400 rejection has no Applied or logical success. Accepted Read/Close/source/context errors keep actual stage proof and independent ResponseError with all causes, close once, and do not replay; earlier admitted discovery is never borrowed as import Applied. Tests: blockstorage/backup_import_contract_test.go:TestImportVolumeBackupLogicalPhysicalAndSeparateCallsOwnIndependentStorage, blockstorage/backup_import_contract_test.go:TestImportVolumeBackupHTTPRejectionNeverBecomesAppliedOrLogicalSuccess, blockstorage/backup_import_transport_test.go:TestImportVolumeBackupAcceptedFaultsKeepAppliedAndEveryCauseWithoutValue, connection_volume_backup_import_test.go:TestConnectionImportVolumeBackupExecutionErrorsKeepOnlyActualStageProof.

  • Live native reauthentication and bounded caller retry preserve captured ordinary headers, source and owned serialized literal body. Mutable body/decoder/retention options, source changes or context interruption stop before resend with original and callback causes. Nonempty operation microversion owns consistent modern/legacy headers; explicit empty policy rejects injected versions. Retry map aliases may agree, while physical headers require one value per name. Tests: blockstorage/backup_import_transport_test.go:TestImportVolumeBackupLiveReauthAndBoundedRetryKeepLiteralOwnedBody, blockstorage/backup_import_transport_test.go:TestImportVolumeBackupRetryMutationCannotSendChangedTargetBodyOrVersion.

  • Every physical POST, including same-target307 redirects, guards exact method/path/origin, owned body bytes, ContentLength/TransferEncoding/framing and operation microversion headers. Changed target/body/framing or Read/Close faults stop before second transport call, close inspected Body once, and remain sticky after a repairing native retry; valid body is replaced by owned bytes. Source/context/callback causes remain reachable. Tests: blockstorage/backup_import_transport_test.go:TestImportVolumeBackupPhysicalRedirectCannotChangeBodyFramingOrScope.

  • API.ImportBackup and Connection.ImportVolumeBackup expose the same owned result while preserving their actual outer operation labels. Existing native API.Import remains independent: []byte record is base64 JSON, status201 only, and typed ID/Name DTO. New import retains literal string and admits original sub400 response to its full disconnected model; native Import is neither replaced nor classified by this Proxy review. Tests: blockstorage/backup_import_service_test.go:TestBackupProxyImportUsesFullDisconnectedModelWhileNativeImportRetainsBase64AndTypedResult, blockstorage/backup_import_service_test.go:TestBackupProxyImportPreflightKeepsCorrectOuterOperationAndCauses.

Python/Go differences:

  • The pinned Backup.import_record overwrites caller url with backups/export_record and posts that value both as route and backup_url. Go deliberately repairs both to backups/import_record and the original literal locator; exact pinned Python wire parity is not claimed.
  • Two explicit Go UTF-8 strings replace Python dynamically typed service/url. Empty/control/Unicode strings are admitted, while null, numeric and container arguments and Python mutable Resource/session/constructor identities are outside this typed contract. No automatic native bytes/base64 adapter is added.
  • Source constructs cls() disconnected. Go returns independent nullable24 Value plus untyped BackupID, actual raw Backup and separately owned Discovery/Applied proof rather than the same mutable Resource; location is null without CurrentLocation, scope lookup or ID seed.
  • Selected nonempty microversion is forwarded literally. Current upstream Keystoneauth Session normalization of prefixes/padding/tuple/latest and complete Adapter/discovery cache, link, endpoint, envelope precedence, legacy-header or deployment-specific HTTP behavior are not replicated. Upstream references are not evidence of running the exact installed dependency.
  • The discovery parser maps utility-stage maximum-before-optional-minimum and tuple order/cap. Finite body-only candidate/shapes/status policy, Unicode16 decimal table and arbitrary-precision integer strings have explicit Go boundaries; CPython runtime digit limits and dependency endpoint-data exception order are not claimed. Accepted malformed discovery is terminal with actual proof, unlike paths that catch Keystoneauth DiscoveryFailure and return None.
  • Known-only descriptor mapping retains raw wire members independently. Exact JSON number/truthiness, first insertion position for duplicate alias consumption, UTF-8/surrogate/depth/backend boundaries and dictionary identity differ from Python selected JSON/Requests runtime. Ordinary malformed UTF-8 JSON tolerance is bounded; valid wrong shape or descriptor failures remain errors with consumed ID and proof.
  • Owned exchange admits finite HTTP100..399 and preserves native original-policy >=400 errors. Accepted bytes/header/status and Read/Close/source/context causes are independently observed without wait/rollback/replay. Native rejected POST IO discard remains a bounded limitation; only rejected discovery404/405 explicitly observes Read/Close for safe fallback.
  • Fixed source/target/body/framing and microversion ownership constrain mutable native retry/redirect hooks while live authentication and bounded caller retry remain. This review covers only the actual pinned v3 Proxy.import_backup declaration; native/v2/Resource/inherited declarations and the full SDK remain independent. Source bindings and offline HTTP tests are not Python SDK execution or authenticated OpenStack integration.
python:block_storage/v3/reserve_volume

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.API.ReserveVolume

  • github.com/JSYoo5B/go-openstacksdk.Connection.ReserveVolume

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.ReserveVolume

  • ReserveVolume sends exactly {"os-reserve":null}. Use one explicit safe nonempty UTF-8 volume ID and the exact pinned null action through queryless POST volumes/{ID}/action. Unicode literal IDs are preserved, and VolumeDetail never inserts detail into the route. There is no UUID-only restriction, lookup, Resource conversion, status enum, options/defaults, builder, wait, refresh or rollback. Tests: blockstorage/volume_state_actions_test.go:TestVolumeStateActionsPostSourceNullBodiesAndAcceptOpaqueHTTPReplies, blockstorage/volume_state_actions_test.go:TestVolumeStateActionsRejectInvalidIDAndSourceBeforeAnyHTTP.

  • Direct calls capture the Cinder service and validate context/role/provider/endpoint/resource/header before ID admission. Connection checks context/provider/ID before selecting only cached Cinder v3, without CurrentLocation or recorded scope consumption. Getter errors retain the actual outer operation and custom cancellation causes before any request or fabricated proof. Tests: connection_volume_state_actions_test.go:TestConnectionVolumeStateActionsUseOnlyCachedCinderAndIgnoreLocation, connection_volume_state_actions_test.go:TestConnectionVolumeStateActionsPreflightNeverSelectsCinder, connection_volume_state_actions_test.go:TestConnectionVolumeStateActionsGetterErrorsKeepOperationAndCancellation.

  • Selected nonempty microversion wins literally without discovery/cap. Otherwise operation-owned finite negotiation uses the Volume3.71 ceiling and server maximum before optional minimum, with tuple length/order retained; minimum above ceiling omits version and missing maximum ignores unused minimum. Original client/cache stays unchanged, each call owns its selected policy, and independent Backup import retains3.64 on the same server advertisement. Tests: blockstorage/volume_state_actions_test.go:TestVolumeStateActionsSelectedVersionKeepsOwnedHeadersAndLiveNativeAuthentication, blockstorage/volume_state_actions_test.go:TestVolumeStateActionsNegotiateFiniteVolumeCapWithoutChangingBackupCap, connection_volume_state_actions_test.go:TestConnectionVolumeStateActionsOwnDiscoveryPerCallAndKeepStageProof, internal/cloudsnapshot/backup_import_version_test.go:TestBackupImportVersionIndependentStringAndHeaderCases, internal/cloudsnapshot/backup_import_version_test.go:TestBackupImportVersionIndependentMaximumMinimumCases.

  • Finite discovery preserves captured encoded reverse-proxy prefix, admits200/300 supported body forms and first usable v3, and keeps admitted pages separate from action Applied. Only clean concrete native404/405 permits unavailable fallback. Accepted malformed/null/invalid-UTF8 or other discovery failures stop before action, with current ResponseError proof; later native rejection cannot borrow an earlier admitted page as current error proof. Tests: blockstorage/volume_state_actions_test.go:TestVolumeStateActionsDiscoveryFailuresRetainCurrentStageAndNeverBorrowProof.

  • Action replies are opaque finite HTTP100..399 acknowledgements including empty, malformed and invalid-UTF8 bytes. Applied owns actual body/header/status, independently of separate calls or error proof. Completed means accepted Read/Close/source validation succeeded, never a server status postcondition. Original-policy>=400 and expanded native OkCodes retain native rejected evidence without Applied or Completed. Existing native Reserve/Unreserve/BeginDetaching keep their {} body and narrower status policy; all four new service methods and nil API preserve actual labels. Tests: blockstorage/volume_state_actions_test.go:TestVolumeStateActionAdmissionUsesOriginalSub400PolicyAndKeepsNativeRejections, blockstorage/volume_state_actions_test.go:TestVolumeStateActionServiceMethodsPreserveNativeBodiesCodesAndNilAPILabels.

  • Accepted Read/Close, captured-source drift and custom cancellation retain actual Applied and every joined cause, with Completed=false and an independently owned ResponseError. Body closes once and accepted IO errors invoke no caller retry or SDK replay; proof storage never aliases the caller response or another result. Tests: blockstorage/volume_state_actions_test.go:TestVolumeStateActionsAcceptedFaultsKeepActualProofAndAllCauses, blockstorage/volume_state_action_transport_test.go:TestVolumeStateActionsAcceptedFaultsKeepAppliedAndEveryCauseWithoutCompletion.

  • Live native401 reauthentication and bounded503 caller retry retain exact owned null body, captured ordinary headers, selected source and operation version. Body/decoder/retention changes, version conflicts or source drift stop before resend while original/callback/custom cancellation causes remain reachable. Tests: blockstorage/volume_state_action_transport_test.go:TestVolumeStateActionLiveReauthAndBoundedRetryKeepLiteralNullBody, blockstorage/volume_state_action_transport_test.go:TestVolumeStateActionRetryMutationStopsBodyVersionAndSourceBeforeResend.

  • Every physical POST including same-target307 redirects verifies exact method/path/origin, body bytes/framing and modern/legacy version policy. Changed body/framing/header/target stops before second transport attempt. Physical body Read/Close and header faults remain sticky after caller repair, close inspected body once and preserve actual causes. Tests: blockstorage/volume_state_action_transport_test.go:TestVolumeStateActionPhysicalRedirectMutationRemainsStickyAfterRepair.

Python/Go differences:

  • Go takes safe literal UTF-8 ID only. Source accepts mutable Volume/VolumeDetail/Resource/dict/Munch inputs through _get_resource with constructor/to_dict/descriptor/computed location side effects and Python urljoin coercion. Go skips those identities/side effects and name lookup deliberately; this does not classify separate Resource declarations.
  • Source Proxy and Resource methods return None without translating response or updating local fields. Go adds independently owned Microversion, Discovery, Applied and Completed acknowledgement with literal input VolumeID. No semantic server-state confirmation, wait, follow-up GET or rollback is added.
  • Volume uses class ceiling3.71 while Backup import keeps3.64 through the shared Cinder policy. Selected nonempty version is forwarded literally; Keystoneauth Session canonicalization, dynamic nonstring defaults, full Adapter cache/link/envelope/header discovery and deployment HTTP behavior are outside this owned Go mapping.
  • Finite same-origin body-only first usable v3 discovery, typed advertisement shapes/status and clean concrete404/405 fallback are explicit mapping policy. Accepted malformed discovery is terminal with current proof rather than reproducing every caught Keystoneauth DiscoveryFailure/None path or endpoint-data exception order.
  • Utility tuple selection retains maximum-before-optional-minimum, length/order and missing bounds. Shared arbitrary-precision Unicode16 decimal/underscore string parsing and latest handling are bounded Go behavior; exact installed CPython digit limits, nonstring input normalization and pinned dependency runtime are not claimed.
  • Owned finite HTTP100..399 policy preserves opaque action bytes and admitted IO/source/context proof separately from native>=400 rejection. Native discarded rejected POST body Read/Close faults remain a documented limitation; mutable OkCodes cannot widen SDK acknowledgement. No response model conversion is introduced.
  • Fixed source/method/route/body/framing and operation microversion ownership constrain mutable native retry/redirect hooks while live authentication and bounded caller retry remain. Native Reserve/Unreserve/BeginDetaching keep {} and narrower success codes; new null action APIs remain separate.
  • Only the actual pinned v3 Proxy declaration is mapped here. Native/v2/Resource/inherited targets and direct bootable/readonly setters remain independent. Source hashes, static review, Go compile and offline HTTP/race tests do not establish authenticated OpenStack or Python SDK runtime parity or full SDK completion.
python:block_storage/v3/unreserve_volume

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.API.UnreserveVolume

  • github.com/JSYoo5B/go-openstacksdk.Connection.UnreserveVolume

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.UnreserveVolume

  • UnreserveVolume sends exactly {"os-unreserve":null}. Use one explicit safe nonempty UTF-8 volume ID and the exact pinned null action through queryless POST volumes/{ID}/action. Unicode literal IDs are preserved, and VolumeDetail never inserts detail into the route. There is no UUID-only restriction, lookup, Resource conversion, status enum, options/defaults, builder, wait, refresh or rollback. Tests: blockstorage/volume_state_actions_test.go:TestVolumeStateActionsPostSourceNullBodiesAndAcceptOpaqueHTTPReplies, blockstorage/volume_state_actions_test.go:TestVolumeStateActionsRejectInvalidIDAndSourceBeforeAnyHTTP.

  • Direct calls capture the Cinder service and validate context/role/provider/endpoint/resource/header before ID admission. Connection checks context/provider/ID before selecting only cached Cinder v3, without CurrentLocation or recorded scope consumption. Getter errors retain the actual outer operation and custom cancellation causes before any request or fabricated proof. Tests: connection_volume_state_actions_test.go:TestConnectionVolumeStateActionsUseOnlyCachedCinderAndIgnoreLocation, connection_volume_state_actions_test.go:TestConnectionVolumeStateActionsPreflightNeverSelectsCinder, connection_volume_state_actions_test.go:TestConnectionVolumeStateActionsGetterErrorsKeepOperationAndCancellation.

  • Selected nonempty microversion wins literally without discovery/cap. Otherwise operation-owned finite negotiation uses the Volume3.71 ceiling and server maximum before optional minimum, with tuple length/order retained; minimum above ceiling omits version and missing maximum ignores unused minimum. Original client/cache stays unchanged, each call owns its selected policy, and independent Backup import retains3.64 on the same server advertisement. Tests: blockstorage/volume_state_actions_test.go:TestVolumeStateActionsSelectedVersionKeepsOwnedHeadersAndLiveNativeAuthentication, blockstorage/volume_state_actions_test.go:TestVolumeStateActionsNegotiateFiniteVolumeCapWithoutChangingBackupCap, connection_volume_state_actions_test.go:TestConnectionVolumeStateActionsOwnDiscoveryPerCallAndKeepStageProof, internal/cloudsnapshot/backup_import_version_test.go:TestBackupImportVersionIndependentStringAndHeaderCases, internal/cloudsnapshot/backup_import_version_test.go:TestBackupImportVersionIndependentMaximumMinimumCases.

  • Finite discovery preserves captured encoded reverse-proxy prefix, admits200/300 supported body forms and first usable v3, and keeps admitted pages separate from action Applied. Only clean concrete native404/405 permits unavailable fallback. Accepted malformed/null/invalid-UTF8 or other discovery failures stop before action, with current ResponseError proof; later native rejection cannot borrow an earlier admitted page as current error proof. Tests: blockstorage/volume_state_actions_test.go:TestVolumeStateActionsDiscoveryFailuresRetainCurrentStageAndNeverBorrowProof.

  • Action replies are opaque finite HTTP100..399 acknowledgements including empty, malformed and invalid-UTF8 bytes. Applied owns actual body/header/status, independently of separate calls or error proof. Completed means accepted Read/Close/source validation succeeded, never a server status postcondition. Original-policy>=400 and expanded native OkCodes retain native rejected evidence without Applied or Completed. Existing native Reserve/Unreserve/BeginDetaching keep their {} body and narrower status policy; all four new service methods and nil API preserve actual labels. Tests: blockstorage/volume_state_actions_test.go:TestVolumeStateActionAdmissionUsesOriginalSub400PolicyAndKeepsNativeRejections, blockstorage/volume_state_actions_test.go:TestVolumeStateActionServiceMethodsPreserveNativeBodiesCodesAndNilAPILabels.

  • Accepted Read/Close, captured-source drift and custom cancellation retain actual Applied and every joined cause, with Completed=false and an independently owned ResponseError. Body closes once and accepted IO errors invoke no caller retry or SDK replay; proof storage never aliases the caller response or another result. Tests: blockstorage/volume_state_actions_test.go:TestVolumeStateActionsAcceptedFaultsKeepActualProofAndAllCauses, blockstorage/volume_state_action_transport_test.go:TestVolumeStateActionsAcceptedFaultsKeepAppliedAndEveryCauseWithoutCompletion.

  • Live native401 reauthentication and bounded503 caller retry retain exact owned null body, captured ordinary headers, selected source and operation version. Body/decoder/retention changes, version conflicts or source drift stop before resend while original/callback/custom cancellation causes remain reachable. Tests: blockstorage/volume_state_action_transport_test.go:TestVolumeStateActionLiveReauthAndBoundedRetryKeepLiteralNullBody, blockstorage/volume_state_action_transport_test.go:TestVolumeStateActionRetryMutationStopsBodyVersionAndSourceBeforeResend.

  • Every physical POST including same-target307 redirects verifies exact method/path/origin, body bytes/framing and modern/legacy version policy. Changed body/framing/header/target stops before second transport attempt. Physical body Read/Close and header faults remain sticky after caller repair, close inspected body once and preserve actual causes. Tests: blockstorage/volume_state_action_transport_test.go:TestVolumeStateActionPhysicalRedirectMutationRemainsStickyAfterRepair.

Python/Go differences:

  • Go takes safe literal UTF-8 ID only. Source accepts mutable Volume/VolumeDetail/Resource/dict/Munch inputs through _get_resource with constructor/to_dict/descriptor/computed location side effects and Python urljoin coercion. Go skips those identities/side effects and name lookup deliberately; this does not classify separate Resource declarations.
  • Source Proxy and Resource methods return None without translating response or updating local fields. Go adds independently owned Microversion, Discovery, Applied and Completed acknowledgement with literal input VolumeID. No semantic server-state confirmation, wait, follow-up GET or rollback is added.
  • Volume uses class ceiling3.71 while Backup import keeps3.64 through the shared Cinder policy. Selected nonempty version is forwarded literally; Keystoneauth Session canonicalization, dynamic nonstring defaults, full Adapter cache/link/envelope/header discovery and deployment HTTP behavior are outside this owned Go mapping.
  • Finite same-origin body-only first usable v3 discovery, typed advertisement shapes/status and clean concrete404/405 fallback are explicit mapping policy. Accepted malformed discovery is terminal with current proof rather than reproducing every caught Keystoneauth DiscoveryFailure/None path or endpoint-data exception order.
  • Utility tuple selection retains maximum-before-optional-minimum, length/order and missing bounds. Shared arbitrary-precision Unicode16 decimal/underscore string parsing and latest handling are bounded Go behavior; exact installed CPython digit limits, nonstring input normalization and pinned dependency runtime are not claimed.
  • Owned finite HTTP100..399 policy preserves opaque action bytes and admitted IO/source/context proof separately from native>=400 rejection. Native discarded rejected POST body Read/Close faults remain a documented limitation; mutable OkCodes cannot widen SDK acknowledgement. No response model conversion is introduced.
  • Fixed source/method/route/body/framing and operation microversion ownership constrain mutable native retry/redirect hooks while live authentication and bounded caller retry remain. Native Reserve/Unreserve/BeginDetaching keep {} and narrower success codes; new null action APIs remain separate.
  • Only the actual pinned v3 Proxy declaration is mapped here. Native/v2/Resource/inherited targets and direct bootable/readonly setters remain independent. Source hashes, static review, Go compile and offline HTTP/race tests do not establish authenticated OpenStack or Python SDK runtime parity or full SDK completion.
python:block_storage/v3/begin_volume_detaching

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.API.BeginVolumeDetaching

  • github.com/JSYoo5B/go-openstacksdk.Connection.BeginVolumeDetaching

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.BeginVolumeDetaching

  • BeginVolumeDetaching sends exactly {"os-begin_detaching":null}. Use one explicit safe nonempty UTF-8 volume ID and the exact pinned null action through queryless POST volumes/{ID}/action. Unicode literal IDs are preserved, and VolumeDetail never inserts detail into the route. There is no UUID-only restriction, lookup, Resource conversion, status enum, options/defaults, builder, wait, refresh or rollback. Tests: blockstorage/volume_state_actions_test.go:TestVolumeStateActionsPostSourceNullBodiesAndAcceptOpaqueHTTPReplies, blockstorage/volume_state_actions_test.go:TestVolumeStateActionsRejectInvalidIDAndSourceBeforeAnyHTTP.

  • Direct calls capture the Cinder service and validate context/role/provider/endpoint/resource/header before ID admission. Connection checks context/provider/ID before selecting only cached Cinder v3, without CurrentLocation or recorded scope consumption. Getter errors retain the actual outer operation and custom cancellation causes before any request or fabricated proof. Tests: connection_volume_state_actions_test.go:TestConnectionVolumeStateActionsUseOnlyCachedCinderAndIgnoreLocation, connection_volume_state_actions_test.go:TestConnectionVolumeStateActionsPreflightNeverSelectsCinder, connection_volume_state_actions_test.go:TestConnectionVolumeStateActionsGetterErrorsKeepOperationAndCancellation.

  • Selected nonempty microversion wins literally without discovery/cap. Otherwise operation-owned finite negotiation uses the Volume3.71 ceiling and server maximum before optional minimum, with tuple length/order retained; minimum above ceiling omits version and missing maximum ignores unused minimum. Original client/cache stays unchanged, each call owns its selected policy, and independent Backup import retains3.64 on the same server advertisement. Tests: blockstorage/volume_state_actions_test.go:TestVolumeStateActionsSelectedVersionKeepsOwnedHeadersAndLiveNativeAuthentication, blockstorage/volume_state_actions_test.go:TestVolumeStateActionsNegotiateFiniteVolumeCapWithoutChangingBackupCap, connection_volume_state_actions_test.go:TestConnectionVolumeStateActionsOwnDiscoveryPerCallAndKeepStageProof, internal/cloudsnapshot/backup_import_version_test.go:TestBackupImportVersionIndependentStringAndHeaderCases, internal/cloudsnapshot/backup_import_version_test.go:TestBackupImportVersionIndependentMaximumMinimumCases.

  • Finite discovery preserves captured encoded reverse-proxy prefix, admits200/300 supported body forms and first usable v3, and keeps admitted pages separate from action Applied. Only clean concrete native404/405 permits unavailable fallback. Accepted malformed/null/invalid-UTF8 or other discovery failures stop before action, with current ResponseError proof; later native rejection cannot borrow an earlier admitted page as current error proof. Tests: blockstorage/volume_state_actions_test.go:TestVolumeStateActionsDiscoveryFailuresRetainCurrentStageAndNeverBorrowProof.

  • Action replies are opaque finite HTTP100..399 acknowledgements including empty, malformed and invalid-UTF8 bytes. Applied owns actual body/header/status, independently of separate calls or error proof. Completed means accepted Read/Close/source validation succeeded, never a server status postcondition. Original-policy>=400 and expanded native OkCodes retain native rejected evidence without Applied or Completed. Existing native Reserve/Unreserve/BeginDetaching keep their {} body and narrower status policy; all four new service methods and nil API preserve actual labels. Tests: blockstorage/volume_state_actions_test.go:TestVolumeStateActionAdmissionUsesOriginalSub400PolicyAndKeepsNativeRejections, blockstorage/volume_state_actions_test.go:TestVolumeStateActionServiceMethodsPreserveNativeBodiesCodesAndNilAPILabels.

  • Accepted Read/Close, captured-source drift and custom cancellation retain actual Applied and every joined cause, with Completed=false and an independently owned ResponseError. Body closes once and accepted IO errors invoke no caller retry or SDK replay; proof storage never aliases the caller response or another result. Tests: blockstorage/volume_state_actions_test.go:TestVolumeStateActionsAcceptedFaultsKeepActualProofAndAllCauses, blockstorage/volume_state_action_transport_test.go:TestVolumeStateActionsAcceptedFaultsKeepAppliedAndEveryCauseWithoutCompletion.

  • Live native401 reauthentication and bounded503 caller retry retain exact owned null body, captured ordinary headers, selected source and operation version. Body/decoder/retention changes, version conflicts or source drift stop before resend while original/callback/custom cancellation causes remain reachable. Tests: blockstorage/volume_state_action_transport_test.go:TestVolumeStateActionLiveReauthAndBoundedRetryKeepLiteralNullBody, blockstorage/volume_state_action_transport_test.go:TestVolumeStateActionRetryMutationStopsBodyVersionAndSourceBeforeResend.

  • Every physical POST including same-target307 redirects verifies exact method/path/origin, body bytes/framing and modern/legacy version policy. Changed body/framing/header/target stops before second transport attempt. Physical body Read/Close and header faults remain sticky after caller repair, close inspected body once and preserve actual causes. Tests: blockstorage/volume_state_action_transport_test.go:TestVolumeStateActionPhysicalRedirectMutationRemainsStickyAfterRepair.

Python/Go differences:

  • Go takes safe literal UTF-8 ID only. Source accepts mutable Volume/VolumeDetail/Resource/dict/Munch inputs through _get_resource with constructor/to_dict/descriptor/computed location side effects and Python urljoin coercion. Go skips those identities/side effects and name lookup deliberately; this does not classify separate Resource declarations.
  • Source Proxy and Resource methods return None without translating response or updating local fields. Go adds independently owned Microversion, Discovery, Applied and Completed acknowledgement with literal input VolumeID. No semantic server-state confirmation, wait, follow-up GET or rollback is added.
  • Volume uses class ceiling3.71 while Backup import keeps3.64 through the shared Cinder policy. Selected nonempty version is forwarded literally; Keystoneauth Session canonicalization, dynamic nonstring defaults, full Adapter cache/link/envelope/header discovery and deployment HTTP behavior are outside this owned Go mapping.
  • Finite same-origin body-only first usable v3 discovery, typed advertisement shapes/status and clean concrete404/405 fallback are explicit mapping policy. Accepted malformed discovery is terminal with current proof rather than reproducing every caught Keystoneauth DiscoveryFailure/None path or endpoint-data exception order.
  • Utility tuple selection retains maximum-before-optional-minimum, length/order and missing bounds. Shared arbitrary-precision Unicode16 decimal/underscore string parsing and latest handling are bounded Go behavior; exact installed CPython digit limits, nonstring input normalization and pinned dependency runtime are not claimed.
  • Owned finite HTTP100..399 policy preserves opaque action bytes and admitted IO/source/context proof separately from native>=400 rejection. Native discarded rejected POST body Read/Close faults remain a documented limitation; mutable OkCodes cannot widen SDK acknowledgement. No response model conversion is introduced.
  • Fixed source/method/route/body/framing and operation microversion ownership constrain mutable native retry/redirect hooks while live authentication and bounded caller retry remain. Native Reserve/Unreserve/BeginDetaching keep {} and narrower success codes; new null action APIs remain separate.
  • Only the actual pinned v3 Proxy declaration is mapped here. Native/v2/Resource/inherited targets and direct bootable/readonly setters remain independent. Source hashes, static review, Go compile and offline HTTP/race tests do not establish authenticated OpenStack or Python SDK runtime parity or full SDK completion.
python:block_storage/v3/abort_volume_detaching

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.API.AbortVolumeDetaching

  • github.com/JSYoo5B/go-openstacksdk.Connection.AbortVolumeDetaching

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.AbortVolumeDetaching

  • AbortVolumeDetaching sends exactly {"os-roll_detaching":null}. Use one explicit safe nonempty UTF-8 volume ID and the exact pinned null action through queryless POST volumes/{ID}/action. Unicode literal IDs are preserved, and VolumeDetail never inserts detail into the route. There is no UUID-only restriction, lookup, Resource conversion, status enum, options/defaults, builder, wait, refresh or rollback. Tests: blockstorage/volume_state_actions_test.go:TestVolumeStateActionsPostSourceNullBodiesAndAcceptOpaqueHTTPReplies, blockstorage/volume_state_actions_test.go:TestVolumeStateActionsRejectInvalidIDAndSourceBeforeAnyHTTP.

  • Direct calls capture the Cinder service and validate context/role/provider/endpoint/resource/header before ID admission. Connection checks context/provider/ID before selecting only cached Cinder v3, without CurrentLocation or recorded scope consumption. Getter errors retain the actual outer operation and custom cancellation causes before any request or fabricated proof. Tests: connection_volume_state_actions_test.go:TestConnectionVolumeStateActionsUseOnlyCachedCinderAndIgnoreLocation, connection_volume_state_actions_test.go:TestConnectionVolumeStateActionsPreflightNeverSelectsCinder, connection_volume_state_actions_test.go:TestConnectionVolumeStateActionsGetterErrorsKeepOperationAndCancellation.

  • Selected nonempty microversion wins literally without discovery/cap. Otherwise operation-owned finite negotiation uses the Volume3.71 ceiling and server maximum before optional minimum, with tuple length/order retained; minimum above ceiling omits version and missing maximum ignores unused minimum. Original client/cache stays unchanged, each call owns its selected policy, and independent Backup import retains3.64 on the same server advertisement. Tests: blockstorage/volume_state_actions_test.go:TestVolumeStateActionsSelectedVersionKeepsOwnedHeadersAndLiveNativeAuthentication, blockstorage/volume_state_actions_test.go:TestVolumeStateActionsNegotiateFiniteVolumeCapWithoutChangingBackupCap, connection_volume_state_actions_test.go:TestConnectionVolumeStateActionsOwnDiscoveryPerCallAndKeepStageProof, internal/cloudsnapshot/backup_import_version_test.go:TestBackupImportVersionIndependentStringAndHeaderCases, internal/cloudsnapshot/backup_import_version_test.go:TestBackupImportVersionIndependentMaximumMinimumCases.

  • Finite discovery preserves captured encoded reverse-proxy prefix, admits200/300 supported body forms and first usable v3, and keeps admitted pages separate from action Applied. Only clean concrete native404/405 permits unavailable fallback. Accepted malformed/null/invalid-UTF8 or other discovery failures stop before action, with current ResponseError proof; later native rejection cannot borrow an earlier admitted page as current error proof. Tests: blockstorage/volume_state_actions_test.go:TestVolumeStateActionsDiscoveryFailuresRetainCurrentStageAndNeverBorrowProof.

  • Action replies are opaque finite HTTP100..399 acknowledgements including empty, malformed and invalid-UTF8 bytes. Applied owns actual body/header/status, independently of separate calls or error proof. Completed means accepted Read/Close/source validation succeeded, never a server status postcondition. Original-policy>=400 and expanded native OkCodes retain native rejected evidence without Applied or Completed. Existing native Reserve/Unreserve/BeginDetaching keep their {} body and narrower status policy; all four new service methods and nil API preserve actual labels. Tests: blockstorage/volume_state_actions_test.go:TestVolumeStateActionAdmissionUsesOriginalSub400PolicyAndKeepsNativeRejections, blockstorage/volume_state_actions_test.go:TestVolumeStateActionServiceMethodsPreserveNativeBodiesCodesAndNilAPILabels.

  • Accepted Read/Close, captured-source drift and custom cancellation retain actual Applied and every joined cause, with Completed=false and an independently owned ResponseError. Body closes once and accepted IO errors invoke no caller retry or SDK replay; proof storage never aliases the caller response or another result. Tests: blockstorage/volume_state_actions_test.go:TestVolumeStateActionsAcceptedFaultsKeepActualProofAndAllCauses, blockstorage/volume_state_action_transport_test.go:TestVolumeStateActionsAcceptedFaultsKeepAppliedAndEveryCauseWithoutCompletion.

  • Live native401 reauthentication and bounded503 caller retry retain exact owned null body, captured ordinary headers, selected source and operation version. Body/decoder/retention changes, version conflicts or source drift stop before resend while original/callback/custom cancellation causes remain reachable. Tests: blockstorage/volume_state_action_transport_test.go:TestVolumeStateActionLiveReauthAndBoundedRetryKeepLiteralNullBody, blockstorage/volume_state_action_transport_test.go:TestVolumeStateActionRetryMutationStopsBodyVersionAndSourceBeforeResend.

  • Every physical POST including same-target307 redirects verifies exact method/path/origin, body bytes/framing and modern/legacy version policy. Changed body/framing/header/target stops before second transport attempt. Physical body Read/Close and header faults remain sticky after caller repair, close inspected body once and preserve actual causes. Tests: blockstorage/volume_state_action_transport_test.go:TestVolumeStateActionPhysicalRedirectMutationRemainsStickyAfterRepair.

Python/Go differences:

  • Go takes safe literal UTF-8 ID only. Source accepts mutable Volume/VolumeDetail/Resource/dict/Munch inputs through _get_resource with constructor/to_dict/descriptor/computed location side effects and Python urljoin coercion. Go skips those identities/side effects and name lookup deliberately; this does not classify separate Resource declarations.
  • Source Proxy and Resource methods return None without translating response or updating local fields. Go adds independently owned Microversion, Discovery, Applied and Completed acknowledgement with literal input VolumeID. No semantic server-state confirmation, wait, follow-up GET or rollback is added.
  • Volume uses class ceiling3.71 while Backup import keeps3.64 through the shared Cinder policy. Selected nonempty version is forwarded literally; Keystoneauth Session canonicalization, dynamic nonstring defaults, full Adapter cache/link/envelope/header discovery and deployment HTTP behavior are outside this owned Go mapping.
  • Finite same-origin body-only first usable v3 discovery, typed advertisement shapes/status and clean concrete404/405 fallback are explicit mapping policy. Accepted malformed discovery is terminal with current proof rather than reproducing every caught Keystoneauth DiscoveryFailure/None path or endpoint-data exception order.
  • Utility tuple selection retains maximum-before-optional-minimum, length/order and missing bounds. Shared arbitrary-precision Unicode16 decimal/underscore string parsing and latest handling are bounded Go behavior; exact installed CPython digit limits, nonstring input normalization and pinned dependency runtime are not claimed.
  • Owned finite HTTP100..399 policy preserves opaque action bytes and admitted IO/source/context proof separately from native>=400 rejection. Native discarded rejected POST body Read/Close faults remain a documented limitation; mutable OkCodes cannot widen SDK acknowledgement. No response model conversion is introduced.
  • Fixed source/method/route/body/framing and operation microversion ownership constrain mutable native retry/redirect hooks while live authentication and bounded caller retry remain. Native Reserve/Unreserve/BeginDetaching keep {} and narrower success codes; new null action APIs remain separate.
  • Only the actual pinned v3 Proxy declaration is mapped here. Native/v2/Resource/inherited targets and direct bootable/readonly setters remain independent. Source hashes, static review, Go compile and offline HTTP/race tests do not establish authenticated OpenStack or Python SDK runtime parity or full SDK completion.
python:block_storage/v3/set_volume_bootable_status

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.SetVolumeBootableStatus

  • github.com/JSYoo5B/go-openstacksdk.Connection.SetVolumeBootableStatus

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.API.SetVolumeBootableStatus

  • SetVolumeBootableStatus requires a bool and sends exactly {"os-set_bootable":{"bootable":value}}, including false, through the direct package, Connection and v3 service APIs without a default. Tests: connection_volume_flags_test.go:TestConnectionVolumeFlagsUseCachedCinderAndIgnoreLocation, blockstorage/volume_flag_transport_test.go:TestVolumeFlagsAcceptedFaultsKeepOpaqueProofAndJoinedCauses, blockstorage/volume_flags_test.go:TestVolumeFlagsDirectActionsKeepRequiredBootableAndReadonlyDefaultWithoutLookup.

  • Use one safe explicit ID and fixed volumes/action route without name resolution. Tests: connection_volume_flags_test.go:TestConnectionVolumeFlagsPreflightAndGetterErrorsKeepCauses, blockstorage/volume_flags_test.go:TestVolumeFlagsDirectPreflightPrecedesReadonlyOriginalsAndGuardsCapturedSource.

  • Selected version wins without cap; empty selection negotiates operation-owned Volume ceiling3.71. Tests: connection_volume_flags_test.go:TestConnectionVolumeFlagsUseCachedCinderAndIgnoreLocation, connection_volume_flags_test.go:TestConnectionVolumeFlagsKeepNegotiationAndAppliedStagesSeparate, blockstorage/volume_flags_test.go:TestVolumeFlagsSelectedLiteralAndDiscoveryUseOwnedVolumeMicroversionPolicy.

  • Admitted response is opaque acknowledgement; no model refresh or server state assertion. Tests: connection_volume_flags_test.go:TestConnectionVolumeFlagsUseCachedCinderAndIgnoreLocation, connection_volume_flags_test.go:TestConnectionVolumeFlagsKeepNegotiationAndAppliedStagesSeparate, blockstorage/volume_flags_test.go:TestVolumeFlagsDirectActionsKeepRequiredBootableAndReadonlyDefaultWithoutLookup, blockstorage/volume_flags_test.go:TestVolumeFlagsNativeRejectionsAndExpandedStatusNeverBecomeAcknowledgements.

  • Accepted Read/Close/source/cancellation failures retain current Applied and every cause, without replay. Tests: blockstorage/volume_flag_transport_test.go:TestVolumeFlagsAcceptedFaultsKeepOpaqueProofAndJoinedCauses.

  • Connection uses cached Cinder v3 and preserves typed preflight/getter causes without location work. Tests: connection_volume_flags_test.go:TestConnectionVolumeFlagsUseCachedCinderAndIgnoreLocation, connection_volume_flags_test.go:TestConnectionVolumeFlagsPreflightAndGetterErrorsKeepCauses, blockstorage/volume_flags_test.go:TestVolumeFlagServiceMethodsKeepNative200AndCloudLookupDefaultsIndependent.

  • Exact body and version ownership reuse common scoped POST policy. Tests: blockstorage/volume_flag_transport_test.go:TestVolumeFlagsAcceptedFaultsKeepOpaqueProofAndJoinedCauses, blockstorage/volume_flags_test.go:TestVolumeFlagsNativeRejectionsAndExpandedStatusNeverBecomeAcknowledgements.

  • New required-bool API remains independent of native200-only API and existing cloud defaultTrue lookup helper. Tests: blockstorage/volume_flags_test.go:TestVolumeFlagServiceMethodsKeepNative200AndCloudLookupDefaultsIndependent.

Python/Go differences:

  • Proxy requires bootable; Resource defaultTrue does not create a Proxy/Go default.
  • Go bool narrows dynamic Python value domain; Source forwards values without descriptor BoolStr coercion.
  • Source accepts ID/Resource/dict/Munch/None through local _get_resource; safe UTF-8 single-segment ID Go input excludes those dynamic constructor paths and unsafe IDs.
  • No connected/disconnected Volume conversion, location computation, descriptor normalization or constructor warnings are claimed.
  • Finite discovery/first usable v3/max-before-min handling is a bounded SDK policy, not complete Keystoneauth endpoint discovery/cache/links/status-priority parity.
  • Missing maximum yields noMV; malformed accepted discovery is terminal evidence; clean direct404/405 fallback only.
  • Current official Keystoneauth normalization reference is not a verified pinned dependency runtime.
  • Source methods return None; Go deliberately returns owned Result and local completion evidence.
  • Go explicit100..399 admission is a bounded HTTP mapping of Source status<400.
  • SDK publishes response/error proof and local Completedfalse instead of Source None/raised error alone.
  • Current new flag case covers joined Read+Close+source+customcancel for bootableFalse with Close1 and native retry0.
  • Connection and typed service wrappers are SDK surfaces; no new Python cloud method or v2 promotion is inferred.
  • Underlying Python Adapter auth/retry/redirect behavior is dependency-owned; SDK imposes stronger sticky fixed scope/body/framing/header ownership.
  • New bootableFalse native503 retry with expanded400 rejection has an actual public assertion; dedicated bootable changed-body/version/307 matrix is not a new flag-specific case. Shared state transport remains explicit common-policy reuse only.
  • Native BootableOpts zero valueFalse serializes; nativeSetBootable accepts200 only; new acknowledgement mapping accepts wider Source sub400 codes.
  • New service test independently exercises native200/error-only, new Source203 acknowledgement, nilAPI labels, and existing cloud lookup/defaultTrue. It does not promote the native or cloud targets.
  • Only this actual pinned v3 Proxy declaration is mapped. Resource/inherited/v2/native targets, authenticated OpenStack/Python SDK runtime and full SDK completion are not classified by these offline Go contracts. Rejected POST body IO discarded by native Gophercloud remains a limitation.
python:block_storage/v3/set_volume_readonly

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.SetVolumeReadonly

  • github.com/JSYoo5B/go-openstacksdk.Connection.SetVolumeReadonly

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.API.SetVolumeReadonly

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeReadonly

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeReadonlyOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.PrepareVolumeReadonlyOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.WithVolumeReadonly

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.WithVolumeReadonlyOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.PrepareVolumeReadonlyOptions

  • SetVolumeReadonly sends exactly {"os-update_readonly_flag":{"readonly":value}}. Omitted options or a nil Readonly field default to true; WithVolumeReadonly(false) and a nonnil false pointer retain explicit false. Tests: blockstorage/volume_boolean_options_test.go:TestVolumeReadonlyOptionsDefaultsFalseReplacementAndFactoryCopies, connection_volume_flags_test.go:TestConnectionVolumeFlagsUseCachedCinderAndIgnoreLocation, blockstorage/volume_flags_test.go:TestVolumeFlagsDirectActionsKeepRequiredBootableAndReadonlyDefaultWithoutLookup.

  • Complete replacement, order and reusable factories own caller and returned bool pointers. Tests: blockstorage/volume_boolean_options_test.go:TestVolumeReadonlyOptionsDefaultsFalseReplacementAndFactoryCopies, blockstorage/volume_flags_test.go:TestVolumeFlagsDirectActionsKeepRequiredBootableAndReadonlyDefaultWithoutLookup.

  • Original callbacks run in captured order and cannot replace callback slice or retained prior config. Tests: blockstorage/volume_boolean_options_test.go:TestVolumeReadonlyOriginalsOwnCallbackSliceAndRetainedPointersThroughHTTP.

  • Service-free Prepare preserves context/callback causes and stops later originals on failure. Tests: blockstorage/volume_boolean_options_test.go:TestVolumeReadonlyPrepareStopsNilContextCancellationNilCallbackAndErrors, blockstorage/volume_flags_test.go:TestVolumeFlagServiceMethodsKeepNative200AndCloudLookupDefaultsIndependent.

  • Direct source capture and safe-ID validation precede originals; observed source violations are sticky. Tests: blockstorage/volume_boolean_options_test.go:TestVolumeReadonlyDirectPreflightAndStickySourceErrorsStopLaterOriginals, blockstorage/volume_flags_test.go:TestVolumeFlagsDirectPreflightPrecedesReadonlyOriginalsAndGuardsCapturedSource.

  • Connection originals run once before cached getter, then only owned config factory reaches core. Tests: connection_volume_flags_test.go:TestConnectionVolumeReadonlyPreparesOriginalsOnceBeforeGetter, connection_volume_flags_test.go:TestConnectionVolumeFlagsUseCachedCinderAndIgnoreLocation, connection_volume_flags_test.go:TestConnectionVolumeFlagsPreflightAndGetterErrorsKeepCauses, blockstorage/volume_flags_test.go:TestVolumeFlagServiceMethodsKeepNative200AndCloudLookupDefaultsIndependent.

  • Shared Volume3.71 negotiation and opaque evidence keep Discovery separate from Applied/Completed. Tests: connection_volume_flags_test.go:TestConnectionVolumeFlagsKeepNegotiationAndAppliedStagesSeparate, blockstorage/volume_flag_transport_test.go:TestVolumeFlagsAcceptedFaultsKeepOpaqueProofAndJoinedCauses, blockstorage/volume_flags_test.go:TestVolumeFlagsDirectActionsKeepRequiredBootableAndReadonlyDefaultWithoutLookup, blockstorage/volume_flags_test.go:TestVolumeFlagsNativeRejectionsAndExpandedStatusNeverBecomeAcknowledgements, blockstorage/volume_flags_test.go:TestVolumeFlagsSelectedLiteralAndDiscoveryUseOwnedVolumeMicroversionPolicy.

  • Owned false request survives bounded native retry and rejects changed bool before resend while preserving native evidence. Tests: blockstorage/volume_flag_transport_test.go:TestVolumeReadonlyRetryPreservesFalseAndRejectsChangedFlag, blockstorage/volume_flag_transport_test.go:TestVolumeFlagsAcceptedFaultsKeepOpaqueProofAndJoinedCauses, blockstorage/volume_flags_test.go:TestVolumeFlagsNativeRejectionsAndExpandedStatusNeverBecomeAcknowledgements, blockstorage/volume_flags_test.go:TestVolumeFlagServiceMethodsKeepNative200AndCloudLookupDefaultsIndependent.

Python/Go differences:

  • Proxy defaultsTrue; Resource requires readonly.
  • Go bool pointer omits/defaults nil; Source explicit dynamic None would forward JSONnull rather than become defaultTrue.
  • Options, full replacement and pointer ownership are SDK additions to a positional Source bool.
  • Source has no option callback layer; owned ordinary headers plus live auth are SDK policy.
  • Service-free preparation and nil callback validation are SDK additions; no HTTP/catalog selection occurs in Prepare.
  • Source Resource/dict/Munch/None constructor/model/location paths are excluded by typed safe-ID input.
  • SDK observes source/context around callback boundaries; it does not claim to detect a mutation restored entirely inside a single callback.
  • SDK Connection sequencing is distinct from direct Source capture sequencing; Prepare runs before selecting service.
  • No CurrentLocation, model normalization, lookup or v2 promotion is introduced.
  • Source None becomes SDK owned Result; no refreshed Volume/read-only/status model is fabricated.
  • Finite discovery and explicit100..399 admission remain bounded mappings; actual public tests bind per-target3.71/belowcap/minabovecap/missingmax and native/expanded400 rejection.
  • Current readonly-specific retry covers one503retry unchangedFalse and changedTrue rejection with original503method/URL/body/header via errors.As.
  • Exhaustive framing/version/307/auth variants are shared policy reuse, not additional new readonly flag cases.
  • Native AttachMode ReadOnly ro is unrelated; no native readonly action was invented.
  • Only this actual pinned v3 Proxy declaration is mapped. Resource/inherited/v2/native targets, authenticated OpenStack/Python SDK runtime and full SDK completion are not classified by these offline Go contracts. Rejected POST body IO discarded by native Gophercloud remains a limitation.
python:block_storage/v3/extend_volume

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.ExtendVolume

  • github.com/JSYoo5B/go-openstacksdk.Connection.ExtendVolume

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.API.ExtendVolume

  • ExtendVolume requires a machine integer and sends os-extend.new_size exactly, including zero and negative values. The typed value is encoded without the native float64 request-builder roundtrip; the 64-bit-only independent case retains9007199254740993. No local positivity or existing-size comparison is imposed. Tests: blockstorage/volume_resize_test.go:TestVolumeResizeDirectBodiesPreserveSizesPolicyPresenceAndCompletionDefaults, blockstorage/volume_resize_test.go:TestVolumeResizeServiceMethodsPreserveNative202BuildersAndNilAPILabels, connection_volume_resize_test.go:TestConnectionVolumeResizeActionsUseCachedCinderAndIgnoreLocation.

  • Direct calls capture context and Cinder role/provider/route/header policy before validating one safe explicit volume ID and making queryless POST volumes/{ID}/action. No name/Type lookup, Resource conversion, location work or wait occurs; unsafe ID, nil context/client, wrong role and reserved auth fail locally with the actual operation and no fabricated response proof. Tests: blockstorage/volume_resize_test.go:TestVolumeResizeDirectPreflightValidatesOnlySelectedSourceAndUTF8BodyText, connection_volume_resize_test.go:TestConnectionVolumeResizePreflightAndGetterErrorsKeepCauses.

  • Connection uses only cached Cinder v3 and ignores invalid recorded cloud location. Context/Connection/provider/ID preflight and getter failures retain operation/resource identity and custom cancellation causes before any HTTP. Tests: connection_volume_resize_test.go:TestConnectionVolumeResizeActionsUseCachedCinderAndIgnoreLocation, connection_volume_resize_test.go:TestConnectionVolumeResizePreflightAndGetterErrorsKeepCauses.

  • Selected3.1,3.80 or latest is forwarded literally without discovery, ceiling or minimum gate. Empty selection derives an owned Volume3.71 ceiling, respects lower maximum3.70 and omits version when minimum3.72 exceeds the ceiling. Discovery proof is separate from Applied and selection remains per-call without changing cached client version. Tests: blockstorage/volume_resize_test.go:TestVolumeResizeSelectedLiteralAndDiscoveryKeepActionPayloadAndOwnedPolicy, connection_volume_resize_test.go:TestConnectionVolumeResizeNegotiationKeepsAcceptedStagesSeparate.

  • Owned HTTP100..399 admission retains opaque action bytes without parsing. Current extend-specific cases use200/203 and302 in the64-bit precision case, and populate independently owned Applied plus literal input VolumeID. Completed is local helper acknowledgement and adds no server size/status confirmation or follow-up request. Tests: blockstorage/volume_resize_test.go:TestVolumeResizeDirectBodiesPreserveSizesPolicyPresenceAndCompletionDefaults, connection_volume_resize_test.go:TestConnectionVolumeResizeActionsUseCachedCinderAndIgnoreLocation.

  • Native400 and one503retry with expanded native400 acceptance retain actual native status/body/header while original SDK admission rejects400: no Applied, ResponseError or Completed is fabricated. Tests: blockstorage/volume_resize_test.go:TestVolumeResizeOriginalHTTPPolicyKeepsRejectedNativeEvidence.

  • Accepted Read and Close faults joined with observed Source drift and custom cancellation retain current Applied plus independently owned ResponseError and every original cause. Body closes once, Completed is false, and accepted faults invoke no native retry or SDK replay. Tests: blockstorage/volume_resize_transport_test.go:TestVolumeResizeAcceptedFaultsKeepActualOpaqueProofAndEveryCause.

  • New v3 service ExtendVolume uses the required typed size and opaque Source acknowledgement while existing ExtendSize retains its current numeric-zero builder rule and202-only error contract. Nil API produces the actual ExtendVolume label without HTTP or response proof. Tests: blockstorage/volume_resize_test.go:TestVolumeResizeServiceMethodsPreserveNative202BuildersAndNilAPILabels.

Python/Go differences:

  • Source size annotations are not runtime conversion/validation: arbitrary-precision integers, bool, null, strings and containers can be forwarded dynamically. Go deliberately narrows to the platform machine int and includes zero/negative; the precision case is guarded for64-bit platforms.
  • Native numeric-required zero exemption and its request-builder float conversion are observed current local/cache snapshot behavior, not a claim about a fresh upstream distribution. Existing ExtendSize is unchanged and unpromoted.
  • New extend cases exercise accepted joined faults, original-policy rejection and native expanded503retry. Dedicated extend401 reauth, changed-body/version and307 matrices remain explicit shared Cinder policy reuse rather than additional extend-specific test cases.
  • Go requires one explicit safe UTF-8 single-segment volume ID. Source accepts Volume/VolumeDetail/Resource/dict/Munch/None through local _get_resource with constructor, descriptor, location and mutable identity effects; Go skips those paths and custom urljoin coercion without classifying their separate declarations.
  • Source returns None and does not refresh Volume fields. Go adds owned VolumeID, Microversion, Discovery, Applied and Completed acknowledgement; Completed never confirms size/type/server status. No lookup, CurrentLocation, model conversion, poll, wait or automatic undo is added.
  • Selected nonempty microversion is literal and has no additional API-minimum gate. Empty selection reuses bounded operation-owned Volume3.71 discovery, maximum before optional minimum, clean concrete native404/405 fallback and current accepted proof. Full Keystoneauth discovery/cache/link/envelope/status ordering and session canonicalization are outside this mapping; official normalization reference is not a verified pinned dependency runtime.
  • Finite HTTP100..399 is the owned mapping of Source status<400. Action bytes remain opaque; native>=400 or expanded OkCodes cannot become an SDK acknowledgement. Native discarded rejected POST body IO remains a limitation.
  • Captured source and exact method/route/body/framing/version ownership constrain mutable native retry and redirect hooks. Mutations restored wholly inside one callback are not detectable. Auth/retry/redirect dependency behavior and authenticated OpenStack/Python runtime parity are not established by these offline contracts.
  • Only this actual pinned v3 Proxy declaration is a verified Go mapping. Native/resource/inherited/v2/cloud targets and shared dependencies remain independently classified; no full SDK completion or automatic support promotion is inferred.
python:block_storage/v3/retype_volume

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.RetypeVolume

  • github.com/JSYoo5B/go-openstacksdk.Connection.RetypeVolume

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.API.RetypeVolume

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeRetypeMigrationPolicy

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeRetypeOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.PrepareVolumeRetypeOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.WithVolumeRetypeMigrationPolicy

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.WithVolumeRetypeOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.PrepareVolumeRetypeOptions

  • RetypeVolume always includes literal new_type. Required UTF-8 text may be empty or contain whitespace, slash, query/percent/fragment characters or controls; it is neither route-validated nor resolved by Type GET. Nil MigrationPolicy defaults to Proxy never, explicit empty omits migration_policy, and arbitrary valid policy is accepted without enum validation. Tests: blockstorage/volume_resize_test.go:TestVolumeResizeDirectBodiesPreserveSizesPolicyPresenceAndCompletionDefaults, blockstorage/volume_resize_test.go:TestVolumeResizeServiceMethodsPreserveNative202BuildersAndNilAPILabels, blockstorage/volume_resize_options_test.go:TestVolumeResizeOptionsDefaultsEmptyReplacementAndFactoriesOwnValues.

  • Complete replacement and later options determine final policy. Factories copy caller pointers when created and every invocation/result owns a fresh pointer; callbacks execute a copied original slice in order with copied intermediate configs, so replacement of a later caller callback or mutation of retained prior pointers cannot alter the request. Captured ordinary headers stay original while provider authentication is live. Tests: blockstorage/volume_resize_options_test.go:TestVolumeResizeOptionsDefaultsEmptyReplacementAndFactoriesOwnValues, blockstorage/volume_resize_options_test.go:TestVolumeResizeOriginalsOwnOrderCallbackSliceAndRetainedPointersThroughHTTP.

  • Service-free Prepare runs originals once without selecting a service or doing HTTP. Nil context/options and callback/context failures stop later originals, retain all callback and custom cancellation causes, and return zero config. Migration policy UTF-8 is checked only after originals, permitting an invalid earlier value to be replaced by a valid final value before any action. Tests: blockstorage/volume_resize_options_test.go:TestVolumeResizePreparePreservesCausesAndValidatesOnlyFinalRetypePolicy.

  • Direct calls capture Cinder Source, validate safe volume ID, then validate newType UTF-8 before originals. Source/context is guarded around originals; an observed route/source fault remains terminal and prevents later repair callbacks or HTTP while keeping joined callback and cancellation causes. Tests: blockstorage/volume_resize_test.go:TestVolumeResizeDirectPreflightValidatesOnlySelectedSourceAndUTF8BodyText, blockstorage/volume_resize_options_test.go:TestVolumeResizeDirectPreflightAndStickySourcesStopOriginalsAndHTTP.

  • Connection preflight precedes one original Prepare; final migration policy and newType are checked before ID admission and only cached Cinder v3 selection. The getter cannot mutate a retained original config into the action; only an owned full-policy factory reaches core. Location is ignored and preflight/getter errors preserve actual operation and cancellation causes. Tests: connection_volume_resize_test.go:TestConnectionVolumeResizeOriginalsRunOnceBeforeGetterWithOwnedPolicy, connection_volume_resize_test.go:TestConnectionVolumeResizeActionsUseCachedCinderAndIgnoreLocation, connection_volume_resize_test.go:TestConnectionVolumeResizePreflightAndGetterErrorsKeepCauses.

  • Selected literal3.1/3.80/latest bypasses discovery and class ceiling without a new minimum gate. Otherwise finite per-call selection uses Volume3.71, lower maximum or no version for minimum above ceiling; cached source is unchanged and accepted discovery pages remain separate from action Applied, including terminal malformed discovery evidence. Tests: blockstorage/volume_resize_test.go:TestVolumeResizeSelectedLiteralAndDiscoveryKeepActionPayloadAndOwnedPolicy, connection_volume_resize_test.go:TestConnectionVolumeResizeNegotiationKeepsAcceptedStagesSeparate.

  • Opaque200/203/302/399 replies own raw Applied and local Completed independently across calls. Native400 and503retry expanded400 stay native rejected evidence with no Applied or success proof; no response JSON or refreshed Volume type/status model is created. Tests: blockstorage/volume_resize_test.go:TestVolumeResizeDirectBodiesPreserveSizesPolicyPresenceAndCompletionDefaults, blockstorage/volume_resize_test.go:TestVolumeResizeOriginalHTTPPolicyKeepsRejectedNativeEvidence, connection_volume_resize_test.go:TestConnectionVolumeResizeActionsUseCachedCinderAndIgnoreLocation.

  • Accepted Read/Close/source/custom cancellation retains current opaque Applied, independent ResponseError, every joined cause, close-once and Completed=false without replay or caller retry. Tests: blockstorage/volume_resize_transport_test.go:TestVolumeResizeAcceptedFaultsKeepActualOpaqueProofAndEveryCause.

  • One native401 reauth and one bounded503retry use live token with original captured ordinary headers and exact owned never policy despite mutation of retained option pointer. A retry changing migration_policy is stopped before third transport and retains original503method/URL/body/header; originals are never rerun. Tests: blockstorage/volume_resize_transport_test.go:TestVolumeRetypeReauthRetryKeepsOwnedPolicyAndRejectsChangedBody.

  • New service RetypeVolume admits empty literal newType, defaultnever and explicit empty omission, preserving actual labels on nil API. Existing ChangeType still requires nonempty NewType, omits empty migration policy and accepts202 only; those native builders and targets are unchanged. Tests: blockstorage/volume_resize_test.go:TestVolumeResizeServiceMethodsPreserveNative202BuildersAndNilAPILabels.

Python/Go differences:

  • Source accepts a Type Resource through Resource._get_id, or forwards arbitrary non-Resource values including null/bool/container domains. Go newType and MigrationPolicy are typed UTF-8 strings, deliberately omit constructor/Resource identity and preserve valid literal body text without Type lookup.
  • Proxy defaultnever differs from Resource.retype defaultNone. Go nil pointer means Proxy defaultnever; explicit empty string models omitted field, rather than reproducing explicit Python None/False/0 dynamic inputs.
  • Factories, options, service-free preparation, copied callback slices/configs, zero-on-error and direct versus Connection ordering are SDK-owned contracts absent from positional Python Source.
  • Current retype-specific native401/503 case covers retained policy mutation, live auth and changed body rejection. Exhaustive version/framing/307 matrices remain explicit shared Cinder transport reuse, not new retype-specific cases.
  • Native ChangeType required nonempty string and202-only policy stay independent of the new Source mapping; enum constants are not runtime validation and no native target is promoted.
  • Go requires one explicit safe UTF-8 single-segment volume ID. Source accepts Volume/VolumeDetail/Resource/dict/Munch/None through local _get_resource with constructor, descriptor, location and mutable identity effects; Go skips those paths and custom urljoin coercion without classifying their separate declarations.
  • Source returns None and does not refresh Volume fields. Go adds owned VolumeID, Microversion, Discovery, Applied and Completed acknowledgement; Completed never confirms size/type/server status. No lookup, CurrentLocation, model conversion, poll, wait or automatic undo is added.
  • Selected nonempty microversion is literal and has no additional API-minimum gate. Empty selection reuses bounded operation-owned Volume3.71 discovery, maximum before optional minimum, clean concrete native404/405 fallback and current accepted proof. Full Keystoneauth discovery/cache/link/envelope/status ordering and session canonicalization are outside this mapping; official normalization reference is not a verified pinned dependency runtime.
  • Finite HTTP100..399 is the owned mapping of Source status<400. Action bytes remain opaque; native>=400 or expanded OkCodes cannot become an SDK acknowledgement. Native discarded rejected POST body IO remains a limitation.
  • Captured source and exact method/route/body/framing/version ownership constrain mutable native retry and redirect hooks. Mutations restored wholly inside one callback are not detectable. Auth/retry/redirect dependency behavior and authenticated OpenStack/Python runtime parity are not established by these offline contracts.
  • Only this actual pinned v3 Proxy declaration is a verified Go mapping. Native/resource/inherited/v2/cloud targets and shared dependencies remain independently classified; no full SDK completion or automatic support promotion is inferred.
python:block_storage/v3/complete_volume_extend

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.CompleteVolumeExtend

  • github.com/JSYoo5B/go-openstacksdk.Connection.CompleteVolumeExtend

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.API.CompleteVolumeExtend

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeExtendCompletionError

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeExtendCompletionOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.PrepareVolumeExtendCompletionOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.WithVolumeExtendCompletionError

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.WithVolumeExtendCompletionOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.PrepareVolumeExtendCompletionOptions

  • CompleteVolumeExtend sends os-extend_volume_completion.error on every action. Omitted options/nil Error default to false; explicit false and true retain the supplied bool, and full empty replacement restores false. Error=true informs Cinder of an extend error; SDK performs no rollback or backend completion check. Tests: blockstorage/volume_resize_test.go:TestVolumeResizeDirectBodiesPreserveSizesPolicyPresenceAndCompletionDefaults, blockstorage/volume_resize_options_test.go:TestVolumeResizeOptionsDefaultsEmptyReplacementAndFactoriesOwnValues, blockstorage/volume_resize_test.go:TestVolumeResizeServiceMethodsPreserveNative202BuildersAndNilAPILabels, connection_volume_resize_test.go:TestConnectionVolumeResizeActionsUseCachedCinderAndIgnoreLocation.

  • Reusable full-policy factories copy caller input and own each returned bool. Later options win, original callback slice is snapshotted and intermediate/retained config pointers cannot alter later callbacks or the HTTP body; captured ordinary headers remain original while token is live. Tests: blockstorage/volume_resize_options_test.go:TestVolumeResizeOptionsDefaultsEmptyReplacementAndFactoriesOwnValues, blockstorage/volume_resize_options_test.go:TestVolumeResizeOriginalsOwnOrderCallbackSliceAndRetainedPointersThroughHTTP.

  • Service-free Prepare validates context and nil callbacks, retains callback/custom cancellation causes, stops later originals on failure and returns zero config. Defaults and returned pointers are owned, and no client selection or HTTP is performed. Tests: blockstorage/volume_resize_options_test.go:TestVolumeResizePreparePreservesCausesAndValidatesOnlyFinalRetypePolicy.

  • Direct source capture and safe-ID admission precede originals. Source/context guards around originals make observed source drift and joined callback/cancellation failure terminal before later repair callbacks or HTTP, with no fabricated response proof. Tests: blockstorage/volume_resize_test.go:TestVolumeResizeDirectPreflightValidatesOnlySelectedSourceAndUTF8BodyText, blockstorage/volume_resize_options_test.go:TestVolumeResizeDirectPreflightAndStickySourcesStopOriginalsAndHTTP.

  • Connection preflights context/Connection/provider, runs originals once before safe-ID/getter selection, and passes only copied complete policy to core. Getter mutation of retained config cannot change true body; cached Cinder v3 ignores location, and preflight/getter failures retain operation and custom cancellation identities. Tests: connection_volume_resize_test.go:TestConnectionVolumeResizeOriginalsRunOnceBeforeGetterWithOwnedPolicy, connection_volume_resize_test.go:TestConnectionVolumeResizeActionsUseCachedCinderAndIgnoreLocation, connection_volume_resize_test.go:TestConnectionVolumeResizePreflightAndGetterErrorsKeepCauses.

  • Selected literal3.1/3.80/latest bypasses discovery/ceiling and no minimum gate is added. Empty selection uses finite per-call Volume3.71/lower maximum/noMV for high minimum; admitted discovery evidence and action Applied remain distinct, and cached service version stays unchanged. Tests: blockstorage/volume_resize_test.go:TestVolumeResizeSelectedLiteralAndDiscoveryKeepActionPayloadAndOwnedPolicy, connection_volume_resize_test.go:TestConnectionVolumeResizeNegotiationKeepsAcceptedStagesSeparate.

  • Accepted200/203/302/399 opaque bytes populate owned Applied and local helper Completed without parsing or refreshing Volume state. Native400 and one503 expanded400 retry retain rejected native body/header and cannot become Applied or Completed. Tests: blockstorage/volume_resize_test.go:TestVolumeResizeDirectBodiesPreserveSizesPolicyPresenceAndCompletionDefaults, blockstorage/volume_resize_test.go:TestVolumeResizeOriginalHTTPPolicyKeepsRejectedNativeEvidence, connection_volume_resize_test.go:TestConnectionVolumeResizeActionsUseCachedCinderAndIgnoreLocation.

  • Accepted Read/Close faults, observed Source drift and custom cancellation retain every cause and current opaque Applied plus independent ResponseError. Close executes once, Completed=false, and no accepted-fault caller retry or replay occurs. Tests: blockstorage/volume_resize_transport_test.go:TestVolumeResizeAcceptedFaultsKeepActualOpaqueProofAndEveryCause.

  • New service CompleteVolumeExtend sends defaultfalse or explicittrue and admits opaque acknowledgement; nil API preserves actual completion operation label without originals, request or proof. This helper does not wait for volume extension or invent a native completion API. Tests: blockstorage/volume_resize_test.go:TestVolumeResizeServiceMethodsPreserveNative202BuildersAndNilAPILabels.

Python/Go differences:

  • Source positional error annotation is not runtime bool conversion. Explicit dynamic None/nonbool values can be forwarded as JSON; Go optional *bool deliberately owns defaultFalse and narrows the domain to bool.
  • Options, reusable full replacement, copied callback/config ownership, service-free preparation and Connection originals-before-getter ordering are SDK additions to the Source positional defaultFalse contract.
  • The completion action is an acknowledgement, not a poll or server-state postcondition; error=true is Cinder input rather than SDK rollback. No native completion builder/API is invented.
  • New completion cases cover accepted joined faults and original-policy rejection including expanded503retry. Dedicated completion401/changed-body/version/307 matrices remain explicit shared scoped Cinder policy reuse rather than new completion-specific cases.
  • Go requires one explicit safe UTF-8 single-segment volume ID. Source accepts Volume/VolumeDetail/Resource/dict/Munch/None through local _get_resource with constructor, descriptor, location and mutable identity effects; Go skips those paths and custom urljoin coercion without classifying their separate declarations.
  • Source returns None and does not refresh Volume fields. Go adds owned VolumeID, Microversion, Discovery, Applied and Completed acknowledgement; Completed never confirms size/type/server status. No lookup, CurrentLocation, model conversion, poll, wait or automatic undo is added.
  • Selected nonempty microversion is literal and has no additional API-minimum gate. Empty selection reuses bounded operation-owned Volume3.71 discovery, maximum before optional minimum, clean concrete native404/405 fallback and current accepted proof. Full Keystoneauth discovery/cache/link/envelope/status ordering and session canonicalization are outside this mapping; official normalization reference is not a verified pinned dependency runtime.
  • Finite HTTP100..399 is the owned mapping of Source status<400. Action bytes remain opaque; native>=400 or expanded OkCodes cannot become an SDK acknowledgement. Native discarded rejected POST body IO remains a limitation.
  • Captured source and exact method/route/body/framing/version ownership constrain mutable native retry and redirect hooks. Mutations restored wholly inside one callback are not detectable. Auth/retry/redirect dependency behavior and authenticated OpenStack/Python runtime parity are not established by these offline contracts.
  • Only this actual pinned v3 Proxy declaration is a verified Go mapping. Native/resource/inherited/v2/cloud targets and shared dependencies remain independently classified; no full SDK completion or automatic support promotion is inferred.
python:block_storage/v3/reset_volume_status

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.ResetVolumeStatus

  • github.com/JSYoo5B/go-openstacksdk.Connection.ResetVolumeStatus

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.API.ResetVolumeStatus

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeStatusResetOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeStatusResetStatus

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeStatusResetAttachStatus

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeStatusResetMigrationStatus

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.PrepareVolumeStatusResetOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.WithVolumeStatusResetOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.WithVolumeStatusResetStatus

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.WithVolumeStatusResetAttachStatus

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.WithVolumeStatusResetMigrationStatus

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.PrepareVolumeStatusResetOptions

  • Reset defaults all three statuses to omitted. Nil and empty typed strings are omitted, all nonempty UTF-8 strings are sent independently without enum/default injection; empty options still POST {os-reset_status:{}}. Tests: blockstorage/volume_migration_test.go:TestVolumeMigrationActionsSerializeTypedDefaultsAndPresenceWithoutLookups.

  • Reusable owned option factories/full replacement and service-free preparation preserve copied pointers, original callback slice and effective policy; no caller builder is needed. Tests: blockstorage/volume_migration_test.go:TestVolumeMigrationOriginalOptionsOwnFactoryPointersRetainedConfigsAndCallbackOrder, connection_volume_migration_test.go:TestConnectionVolumeMigrationOriginalsRunOnceBeforeGetterAndRetainedValuesStayDetached.

  • Direct/source admission and Connection prepare-before-cached-Cinder ordering retain operation/context/getter faults before HTTP, without lookup or CurrentLocation. Tests: blockstorage/volume_migration_test.go:TestVolumeMigrationActionsCaptureSourcesBeforeOriginalsAndStopBeforeRestoration, blockstorage/volume_migration_test.go:TestVolumeMigrationActionsPreflightAndCallbackFailuresPreservePriorityAndCauses, connection_volume_migration_test.go:TestConnectionVolumeMigrationUsesCachedCinderAndSelectedVersionStillRequiresDiscovery, connection_volume_migration_test.go:TestConnectionVolumeMigrationOriginalsRunOnceBeforeGetterAndRetainedValuesStayDetached, connection_volume_migration_test.go:TestConnectionVolumeMigrationPreflightAndGetterFailuresRetainCauses.

  • Selected literal/cap3.71 uses ordinary shared Cinder negotiation with no API minimum gate; opaque action proof and Completed acknowledgement remain distinct. Tests: blockstorage/volume_migration_test.go:TestVolumeMigrationActionsSerializeTypedDefaultsAndPresenceWithoutLookups, connection_volume_migration_test.go:TestConnectionVolumeMigrationUsesCachedCinderAndSelectedVersionStillRequiresDiscovery, blockstorage/volume_state_actions_test.go:TestVolumeStateActionsNegotiateFiniteVolumeCapWithoutChangingBackupCap.

  • ResetVolumeStatus reaches the same applyRequired/Post accepted-fault policy whose existing Cinder regression retains actual Applied/all joined causes without completion or replay. New reset cases directly verify original native400/expanded503retry rejection keeps native evidence and cannot become Applied or Completed. Tests: blockstorage/volume_migration_test.go:TestVolumeMigrationActionsKeepOriginalNativePolicyWhenRetryExpandsHTTPAdmission, blockstorage/volume_state_action_transport_test.go:TestVolumeStateActionsAcceptedFaultsKeepAppliedAndEveryCauseWithoutCompletion.

  • New package/Connection/service ResetVolumeStatus methods share the exact typed action and preserve nil API operation labels without originals or HTTP. Existing native ResetStatus remains a separately inspected source/static API; its always-included status/202/error-only behavior is not asserted by this new service test. Tests: blockstorage/volume_migration_test.go:TestVolumeMigrationServiceMethodsKeepSDKContractsAndNilAPIPriority.

Python/Go differences:

  • Source truthy status accepts arbitrary dynamic values; Go deliberately narrows to nullable UTF-8 strings and nonempty omission. Existing native required string body is not reused as Source-equivalent.
  • Native Volume ResetStatus always-included status/202/error-only separation is established by current native/generated Source declarations and unchanged signature, not a newly executed native reset preservation scenario.
  • Go takes one safe UTF-8 current volume ID and typed strings/bools rather than supplied mutable Volume/VolumeDetail/Resource/dict/Munch inputs and Source constructor/descriptor/location/urljoin side effects. Separate Resource/native/v2 declarations remain independent.
  • Source returns None without response translation or refresh. Go adds owned VolumeID, Microversion, Discovery, Applied and Completed acknowledgement. No lookup, CurrentLocation, asynchronous wait/poll, cleanup or undo is added.
  • Finite call-owned discovery and typed advertisement/evidence policy are explicit Go mappings. Complete Keystoneauth cache/link/envelope/canonicalization/discovery exception ordering and authenticated backend behavior are not claimed. Empty Go selection cannot represent Python explicit default empty separately from None.
  • Opaque finite100..399 action policy maps Source<400. Accepted body IO/source/context proof remains separate from native rejection; native discarded rejected POST body IO remains a limitation. Exact method/route/body/framing/version guards constrain native retry/redirect while live auth remains.
  • New11 groups cover typed body/defaults, options/capture/preflight, conditional required discovery, original admission and facade/service behavior. Accepted action IO, ordinary cap details and complete reauth/307/framing matrices use declared shared Cinder engine reuse where applicable; no new operation-specific exhaustive transport matrix is claimed. Standalone Prepare wrappers are compiled and exercised through Connection preparation, not a separate new reusable-Prepare return mutation matrix.
  • Only the actual pinned v3 Proxy target is reviewed here. Root offline local HTTP race tests, vet and exact documentation compilation passed. Static Source hashes and offline Go checks do not prove authenticated OpenStack/Python runtime parity or full SDK completion.
python:block_storage/v3/migrate_volume

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.MigrateVolume

  • github.com/JSYoo5B/go-openstacksdk.Connection.MigrateVolume

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.API.MigrateVolume

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeMigrationOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeMigrationHost

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeMigrationCluster

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeMigrationForceHostCopy

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeMigrationLockVolume

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.PrepareVolumeMigrationOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.WithVolumeMigrationOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.WithVolumeMigrationHost

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.WithVolumeMigrationCluster

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.WithVolumeMigrationForceHostCopy

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.WithVolumeMigrationLockVolume

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.PrepareVolumeMigrationOptions

  • Host/Cluster nil omission differs from explicit empty inclusion. False/default ForceHostCopy/LockVolume fields are omitted; true fields are included. No host/cluster resolver, requirement or mutual-exclusion check is added. Tests: blockstorage/volume_migration_test.go:TestVolumeMigrationActionsSerializeTypedDefaultsAndPresenceWithoutLookups, blockstorage/volume_migration_test.go:TestVolumeMigrationServiceMethodsKeepSDKContractsAndNilAPIPriority.

  • Cluster nonnil, including empty, requires advertised server min/max to support3.16 before action, even when a selected version exists; compatible selected same-major>=3.16 is additionally required. Failure prevents POST. The pinned Keystoneauth5.16.0 version_match has exact same-major/tuple semantics: global latest fails required3.16, while3.latest can pass the gate and keeps its literal POST policy. Tests: blockstorage/volume_migration_test.go:TestMigrateVolumeRequiresAdvertisedSupportBeforeSelectedOrComputedVersion, connection_volume_migration_test.go:TestConnectionVolumeMigrationUsesCachedCinderAndSelectedVersionStillRequiresDiscovery.

  • Required server range tests3.16 rather than selected literal; high compatible selected version stays literal above advertised maximum. Unselected calls select cap3.71 from the same captured advertisement; no original client version mutation or dependency cache emulation. Tests: blockstorage/volume_migration_test.go:TestMigrateVolumeRequiresAdvertisedSupportBeforeSelectedOrComputedVersion, connection_volume_migration_test.go:TestConnectionVolumeMigrationUsesCachedCinderAndSelectedVersionStillRequiresDiscovery.

  • Owned option preparation and original callback once/direct capture/Connection cached Cinder preserve caller-owned values and fixed payload across retry. Tests: blockstorage/volume_migration_test.go:TestVolumeMigrationOriginalOptionsOwnFactoryPointersRetainedConfigsAndCallbackOrder, blockstorage/volume_migration_test.go:TestVolumeMigrationActionsCaptureSourcesBeforeOriginalsAndStopBeforeRestoration, connection_volume_migration_test.go:TestConnectionVolumeMigrationOriginalsRunOnceBeforeGetterAndRetainedValuesStayDetached, blockstorage/volume_migration_test.go:TestVolumeMigrationActionsKeepOriginalNativePolicyWhenRetryExpandsHTTPAdmission.

  • Discovery and action phases own separate current proof; malformed accepted discovery, missing/unsupported gate bounds and source/context faults prevent action and preserve actual admitted evidence. Tests: blockstorage/volume_migration_test.go:TestMigrateVolumeRequiresAdvertisedSupportBeforeSelectedOrComputedVersion, blockstorage/volume_migration_test.go:TestMigrateVolumeFiniteDiscoveryKeepsCurrentProofAndNeverBorrowsRejectedPages.

  • New MigrateVolume cases verify opaque action acknowledgement and original native rejection through the shared action engine, with no asynchronous wait, host GET, volume refresh or rollback. Existing shared Cinder accepted Read/Close/source/custom-context regression verifies the common Post failure path; it is not a new cluster-action IO matrix. Tests: blockstorage/volume_migration_test.go:TestVolumeMigrationActionsSerializeTypedDefaultsAndPresenceWithoutLookups, blockstorage/volume_migration_test.go:TestVolumeMigrationActionsKeepOriginalNativePolicyWhenRetryExpandsHTTPAdmission, blockstorage/volume_migration_test.go:TestVolumeMigrationServiceMethodsKeepSDKContractsAndNilAPIPriority, blockstorage/volume_state_action_transport_test.go:TestVolumeStateActionsAcceptedFaultsKeepAppliedAndEveryCauseWithoutCompletion.

Python/Go differences:

  • Source host/cluster arbitrary non-None values and flags arbitrary truthy values are narrowed to typed nullable strings/bools; explicit cluster empty retains required gate.
  • Source require calls endpoint getter and both server bounds before default normalization; Go shares one finite guarded probe with ordinary action version selection and explicitly omits full Keystoneauth cache/canonicalization/taxonomy. Python selected default empty versus None is not independently expressible in Go.
  • Keystoneauth5.16.0 commit e759cf88c072d5bc7e21fc3fa884708ace9630af statically binds normalize_version_number/version_between/version_match. Source requires>=5.16.0; this does not execute installed dependency/runtime or promote Adapter cache/Session behavior. Bounds normalize up front, required3.16 range is tuple comparison and selected gate requires equal major plus candidate>=required. Literal selected POST header forwarding remains a declared Go-versus-Session canonicalization boundary.
  • Go takes one safe UTF-8 current volume ID and typed strings/bools rather than supplied mutable Volume/VolumeDetail/Resource/dict/Munch inputs and Source constructor/descriptor/location/urljoin side effects. Separate Resource/native/v2 declarations remain independent.
  • Source returns None without response translation or refresh. Go adds owned VolumeID, Microversion, Discovery, Applied and Completed acknowledgement. No lookup, CurrentLocation, asynchronous wait/poll, cleanup or undo is added.
  • Finite call-owned discovery and typed advertisement/evidence policy are explicit Go mappings. Complete Keystoneauth cache/link/envelope/canonicalization/discovery exception ordering and authenticated backend behavior are not claimed. Empty Go selection cannot represent Python explicit default empty separately from None.
  • Opaque finite100..399 action policy maps Source<400. Accepted body IO/source/context proof remains separate from native rejection; native discarded rejected POST body IO remains a limitation. Exact method/route/body/framing/version guards constrain native retry/redirect while live auth remains.
  • New11 groups cover typed body/defaults, options/capture/preflight, conditional required discovery, original admission and facade/service behavior. Accepted action IO, ordinary cap details and complete reauth/307/framing matrices use declared shared Cinder engine reuse where applicable; no new operation-specific exhaustive transport matrix is claimed. Standalone Prepare wrappers are compiled and exercised through Connection preparation, not a separate new reusable-Prepare return mutation matrix.
  • Only the actual pinned v3 Proxy target is reviewed here. Root offline local HTTP race tests, vet and exact documentation compilation passed. Static Source hashes and offline Go checks do not prove authenticated OpenStack/Python runtime parity or full SDK completion.
python:block_storage/v3/complete_volume_migration

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.CompleteVolumeMigration

  • github.com/JSYoo5B/go-openstacksdk.Connection.CompleteVolumeMigration

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.API.CompleteVolumeMigration

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeMigrationCompletionOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeMigrationCompletionError

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.PrepareVolumeMigrationCompletionOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.WithVolumeMigrationCompletionOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.WithVolumeMigrationCompletionError

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.PrepareVolumeMigrationCompletionOptions

  • Required newVolume is a literal UTF-8 body string, including empty/route-like text; it is not resolved or validated as the current route ID. new_volume and error are always sent. Tests: blockstorage/volume_migration_test.go:TestVolumeMigrationActionsSerializeTypedDefaultsAndPresenceWithoutLookups, blockstorage/volume_migration_test.go:TestVolumeMigrationServiceMethodsKeepSDKContractsAndNilAPIPriority, connection_volume_migration_test.go:TestConnectionVolumeMigrationUsesCachedCinderAndSelectedVersionStillRequiresDiscovery.

  • Omitted/nil Error defaultsfalse, explicitfalse/true is always transmitted; reusable full policy factories own pointers and preserve callback once semantics. Tests: blockstorage/volume_migration_test.go:TestVolumeMigrationActionsSerializeTypedDefaultsAndPresenceWithoutLookups, blockstorage/volume_migration_test.go:TestVolumeMigrationOriginalOptionsOwnFactoryPointersRetainedConfigsAndCallbackOrder, connection_volume_migration_test.go:TestConnectionVolumeMigrationOriginalsRunOnceBeforeGetterAndRetainedValuesStayDetached.

  • Direct/current ID and Connection prepare-before-Cinder admission keep operation/context/getter errors with no new-volume GET or CurrentLocation. Tests: blockstorage/volume_migration_test.go:TestVolumeMigrationActionsCaptureSourcesBeforeOriginalsAndStopBeforeRestoration, blockstorage/volume_migration_test.go:TestVolumeMigrationActionsPreflightAndCallbackFailuresPreservePriorityAndCauses, connection_volume_migration_test.go:TestConnectionVolumeMigrationOriginalsRunOnceBeforeGetterAndRetainedValuesStayDetached, connection_volume_migration_test.go:TestConnectionVolumeMigrationPreflightAndGetterFailuresRetainCauses.

  • No API minimum gate is added; selected literal/ordinary cap3.71 selection, separate Discovery and opaque Applied are operation-owned. Tests: blockstorage/volume_migration_test.go:TestVolumeMigrationActionsSerializeTypedDefaultsAndPresenceWithoutLookups, connection_volume_migration_test.go:TestConnectionVolumeMigrationUsesCachedCinderAndSelectedVersionStillRequiresDiscovery, blockstorage/volume_state_actions_test.go:TestVolumeStateActionsNegotiateFiniteVolumeCapWithoutChangingBackupCap.

  • Completed proves accepted body read/close/source helper completion only; Error=true informs Cinder, not SDK cleanup, migration completion, wait or undo. Tests: blockstorage/volume_migration_test.go:TestVolumeMigrationActionsSerializeTypedDefaultsAndPresenceWithoutLookups, blockstorage/volume_migration_test.go:TestVolumeMigrationServiceMethodsKeepSDKContractsAndNilAPIPriority, connection_volume_migration_test.go:TestConnectionVolumeMigrationUsesCachedCinderAndSelectedVersionStillRequiresDiscovery.

  • Package/Connection/service completion and nil service labels match the actual helper. New cases verify rejected action/native policy and preflight causes; the shared Post accepted IO/source/custom-context regression retains current proof/all causes without replay and is explicit reused engine evidence. Tests: blockstorage/volume_migration_test.go:TestVolumeMigrationActionsPreflightAndCallbackFailuresPreservePriorityAndCauses, blockstorage/volume_migration_test.go:TestVolumeMigrationActionsKeepOriginalNativePolicyWhenRetryExpandsHTTPAdmission, blockstorage/volume_migration_test.go:TestVolumeMigrationServiceMethodsKeepSDKContractsAndNilAPIPriority, blockstorage/volume_state_action_transport_test.go:TestVolumeStateActionsAcceptedFaultsKeepAppliedAndEveryCauseWithoutCompletion.

Python/Go differences:

  • Source positional new_volume/error annotations do not perform coercion and allow dynamic null/nonbool values; Go deliberately uses required UTF-8 string and owned optionalbool.
  • No native completion API is invented and no new-volume Resource constructor/_get_id shortcut or resolver is introduced.
  • Go takes one safe UTF-8 current volume ID and typed strings/bools rather than supplied mutable Volume/VolumeDetail/Resource/dict/Munch inputs and Source constructor/descriptor/location/urljoin side effects. Separate Resource/native/v2 declarations remain independent.
  • Source returns None without response translation or refresh. Go adds owned VolumeID, Microversion, Discovery, Applied and Completed acknowledgement. No lookup, CurrentLocation, asynchronous wait/poll, cleanup or undo is added.
  • Finite call-owned discovery and typed advertisement/evidence policy are explicit Go mappings. Complete Keystoneauth cache/link/envelope/canonicalization/discovery exception ordering and authenticated backend behavior are not claimed. Empty Go selection cannot represent Python explicit default empty separately from None.
  • Opaque finite100..399 action policy maps Source<400. Accepted body IO/source/context proof remains separate from native rejection; native discarded rejected POST body IO remains a limitation. Exact method/route/body/framing/version guards constrain native retry/redirect while live auth remains.
  • New11 groups cover typed body/defaults, options/capture/preflight, conditional required discovery, original admission and facade/service behavior. Accepted action IO, ordinary cap details and complete reauth/307/framing matrices use declared shared Cinder engine reuse where applicable; no new operation-specific exhaustive transport matrix is claimed. Standalone Prepare wrappers are compiled and exercised through Connection preparation, not a separate new reusable-Prepare return mutation matrix.
  • Only the actual pinned v3 Proxy target is reviewed here. Root offline local HTTP race tests, vet and exact documentation compilation passed. Static Source hashes and offline Go checks do not prove authenticated OpenStack/Python runtime parity or full SDK completion.
python:block_storage/v3/revert_volume_to_snapshot

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.RevertVolumeToSnapshot

  • github.com/JSYoo5B/go-openstacksdk.Connection.RevertVolumeToSnapshot

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.API.RevertVolumeToSnapshot

  • Revert uses a required literal UTF-8 snapshotID body string, including empty/control/path-like strings, with exact {revert:{snapshot_id:value}} and safe current volume action route. No snapshot/current-volume GET or name resolver. Tests: blockstorage/volume_revert_unmanage_test.go:TestVolumeRevertAndUnmanageKeepLiteralBodyDomainsAndOpaqueAcknowledgements.

  • Required3.40 server support is checked before action even when selected version exists: both advertisement bounds must contain3.40 and selected candidate must same-major>=3.40; compatible selected above server maximum remains raw literal. New revert range cases verify3.39/equal3.40/high selected and missing/range bounds; global latest/3.latest same-major comparisons are existing requireSupport engine regression plus actual fixed3.40 Source/code evidence. Tests: blockstorage/volume_revert_unmanage_test.go:TestRevertVolumeToSnapshotRequiresAdvertised340AndReusesProbeForOrdinarySelection, blockstorage/volume_migration_test.go:TestMigrateVolumeRequiresAdvertisedSupportBeforeSelectedOrComputedVersion.

  • Unselected required calls reuse the same finite admitted advertisement to select ordinary cap3.71/maximum/optionalminimum. Missing/unsupported/malformed/IO/source/context gate evidence ends before POST with admitted discovery preserved. Tests: blockstorage/volume_revert_unmanage_test.go:TestRevertVolumeToSnapshotRequiresAdvertised340AndReusesProbeForOrdinarySelection, blockstorage/volume_revert_unmanage_test.go:TestVolumeRevertAndUnmanageFailuresKeepOnlyTheActualDiscoveryOrActionProof.

  • Package, service and Connection have required parameters and no options/builder. Context/provider/typed input preflight occurs before HTTP; Connection uses cached Cinder without CurrentLocation or Resource conversion. Tests: blockstorage/volume_revert_unmanage_test.go:TestVolumeRevertAndUnmanagePreflightAndServiceMethodsPreserveNativeSeparation, connection_volume_revert_unmanage_test.go:TestConnectionVolumeRevertUnmanageUsesCachedCinderAndLiteralSnapshotBody, connection_volume_revert_unmanage_test.go:TestConnectionVolumeRevertUnmanagePreflightAndGetterFaultsKeepCauses.

  • Action accepted response is opaque and independently owned; Completed acknowledges successful admission/read/close/source guard, while accepted faults retain partial Applied and joined causes without rollback/replay. Tests: blockstorage/volume_revert_unmanage_test.go:TestVolumeRevertAndUnmanageKeepLiteralBodyDomainsAndOpaqueAcknowledgements, blockstorage/volume_revert_unmanage_test.go:TestVolumeRevertAndUnmanageFailuresKeepOnlyTheActualDiscoveryOrActionProof.

  • Original native HTTP rejection/retry policy and fixed physical request/source/live-auth boundaries cannot fabricate current Applied from discovery proof. No asynchronous wait, status/latest-snapshot validation or backend cleanup. Tests: blockstorage/volume_revert_unmanage_test.go:TestVolumeRevertAndUnmanageFailuresKeepOnlyTheActualDiscoveryOrActionProof, blockstorage/volume_revert_unmanage_test.go:TestVolumeRevertAndUnmanageLiveAuthAndBoundedRetryPreserveBodyAndOriginalHTTPPolicy.

Python/Go differences:

  • Source local snapshot Resource construction can expose arbitrary snapshot.id values; Go deliberately restricts this body operand to literal UTF-8 string without restricting it as a route. Detached/available/latest-snapshot documentation preconditions remain server concerns; no implementation GET/check is introduced.
  • The actual required Source default comparison uses pinned Keystoneauth5.16.0 version_match: global latest is incompatible with major3, 3.latest can pass; actual Session canonicalization is a separately documented dependency boundary.
  • Go safe UTF-8 current route ID and typed literal snapshot string replace mutable Resource/dict/Munch/untyped ID and constructor/descriptor/location/cache side effects. No lookup, model refresh or CurrentLocation is added.
  • Source returns None and discards opaque action response; Go owns VolumeID/Microversion/Discovery/Applied/Completed. Completed means helper acknowledgement, not backend completion/removal/deletion.
  • Finite call-owned discovery shares advertisement rather than reproducing Keystoneauth Adapter cache/link/envelope/exception order/Session canonicalization; selected literal forwarding remains a Go mapping. Empty selected Go string cannot separately represent Python explicit default empty versus None.
  • Source status<400 maps finite Go100..399. Original native rejection remains native with no Applied; discarded rejected POST body IO is not claimed fully reconstructed. Fixed method/URL/body/framing/version and accepted phase proof are Go-owned policies.
  • Only this actual pinned v3 Proxy declaration is classified. Separate native/v2/Resource/manage/read/metadata dependencies are not automatically promoted; Source static evidence and passed local Go QA do not prove authenticated Python/cloud runtime or full SDK completion.
  • Current installed seven new groups directly verify literal/null bodies, required3.40 range/probe reuse, preflight/cache/location omission, native Unmanage separation, opaque/accepted Read+Close+source+customcontext proof and liveauth/bounded retry/body mutation. Ordinary unselected cap3.71 and global latest/3.latest version comparison use separately declared existing common-engine regression; no new operation-specific exhaustive redirect/framing matrix is claimed.
python:block_storage/v3/unmanage_volume

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.UnmanageVolume

  • github.com/JSYoo5B/go-openstacksdk.Connection.UnmanageVolume

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.API.UnmanageVolume

  • UnmanageVolume sends exact {os-unmanage:null} to the safe current volume action route with no lookup, DELETE, options, force flag or model construction. Tests: blockstorage/volume_revert_unmanage_test.go:TestVolumeRevertAndUnmanageKeepLiteralBodyDomainsAndOpaqueAcknowledgements, blockstorage/volume_revert_unmanage_test.go:TestVolumeRevertAndUnmanagePreflightAndServiceMethodsPreserveNativeSeparation, connection_volume_revert_unmanage_test.go:TestConnectionVolumeRevertUnmanageUsesCachedCinderAndLiteralSnapshotBody.

  • No minimum gate is added. Selected nonempty version remains literal; otherwise finite ordinary discovery selects cap3.71/maximum/optionalminimum without source microversion mutation. Selected unmanage policy is tested directly; ordinary unselected cap details are existing shared Negotiate regression with actual same engine reuse. Tests: blockstorage/volume_revert_unmanage_test.go:TestVolumeRevertAndUnmanageKeepLiteralBodyDomainsAndOpaqueAcknowledgements, connection_volume_revert_unmanage_test.go:TestConnectionVolumeRevertUnmanageUsesCachedCinderAndLiteralSnapshotBody, blockstorage/volume_state_actions_test.go:TestVolumeStateActionsNegotiateFiniteVolumeCapWithoutChangingBackupCap.

  • Package, service and Connection share required current volume ID and no caller builder/options; context/provider/input preflight and cached Cinder selection retain operation labels/causes without CurrentLocation. Tests: blockstorage/volume_revert_unmanage_test.go:TestVolumeRevertAndUnmanagePreflightAndServiceMethodsPreserveNativeSeparation, connection_volume_revert_unmanage_test.go:TestConnectionVolumeRevertUnmanageUsesCachedCinderAndLiteralSnapshotBody, connection_volume_revert_unmanage_test.go:TestConnectionVolumeRevertUnmanagePreflightAndGetterFaultsKeepCauses.

  • Opaque100..399 action response and independent Discovery/Applied proof expose helper Completed acknowledgement, not confirmed management removal or backend data deletion. Tests: blockstorage/volume_revert_unmanage_test.go:TestVolumeRevertAndUnmanageKeepLiteralBodyDomainsAndOpaqueAcknowledgements, blockstorage/volume_revert_unmanage_test.go:TestVolumeRevertAndUnmanagePreflightAndServiceMethodsPreserveNativeSeparation, connection_volume_revert_unmanage_test.go:TestConnectionVolumeRevertUnmanageUsesCachedCinderAndLiteralSnapshotBody.

  • Accepted Read/Close/source/context failures preserve current Applied/all causes with Completedfalse and no SDK automatic replay/cleanup; original rejected HTTP remains native without borrowing discovery proof. Tests: blockstorage/volume_revert_unmanage_test.go:TestVolumeRevertAndUnmanageFailuresKeepOnlyTheActualDiscoveryOrActionProof, blockstorage/volume_revert_unmanage_test.go:TestVolumeRevertAndUnmanageLiveAuthAndBoundedRetryPreserveBodyAndOriginalHTTPPolicy.

  • Existing native API.Unmanage is a separate unchanged {os-unmanage:{}}/202/error-only API; the new Source mapping exposes UnmanageVolume and does not broaden native/v2/Resource declarations. Tests: blockstorage/volume_revert_unmanage_test.go:TestVolumeRevertAndUnmanagePreflightAndServiceMethodsPreserveNativeSeparation.

Python/Go differences:

  • Native Gophercloud v2.15.0 Unmanage differs intentionally: empty object body, only202, ErrResult. The Source null body/new owned result is implemented independently rather than changing native semantics.
  • Go safe UTF-8 current route ID replaces mutable Resource/dict/Munch/untyped ID and constructor/descriptor/location/cache side effects. No lookup, model refresh or CurrentLocation is added.
  • Source returns None and discards opaque action response; Go owns VolumeID/Microversion/Discovery/Applied/Completed. Completed means helper acknowledgement, not backend completion/removal/deletion.
  • Finite call-owned discovery shares advertisement rather than reproducing Keystoneauth Adapter cache/link/envelope/exception order/Session canonicalization; selected literal forwarding remains a Go mapping. Empty selected Go string cannot separately represent Python explicit default empty versus None.
  • Source status<400 maps finite Go100..399. Original native rejection remains native with no Applied; discarded rejected POST body IO is not claimed fully reconstructed. Fixed method/URL/body/framing/version and accepted phase proof are Go-owned policies.
  • Only this actual pinned v3 Proxy declaration is classified. Separate native/v2/Resource/manage/read/metadata dependencies are not automatically promoted; Source static evidence and passed local Go QA do not prove authenticated Python/cloud runtime or full SDK completion.
  • Current installed seven new groups directly verify literal/null bodies, required3.40 range/probe reuse, preflight/cache/location omission, native Unmanage separation, opaque/accepted Read+Close+source+customcontext proof and liveauth/bounded retry/body mutation. Ordinary unselected cap3.71 and global latest/3.latest version comparison use separately declared existing common-engine regression; no new operation-specific exhaustive redirect/framing matrix is claimed.
python:block_storage/v3/attach_volume

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithCinderVolumeAttachOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithCinderVolumeAttachInstance

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithCinderVolumeAttachHostName

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.PrepareCinderVolumeAttachOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.AttachCinderVolume

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.WithCinderVolumeAttachOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.WithCinderVolumeAttachInstance

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.WithCinderVolumeAttachHostName

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.PrepareCinderVolumeAttachOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.API.AttachCinderVolume

  • github.com/JSYoo5B/go-openstacksdk.Connection.AttachCinderVolume

  • Attach includes required literal mountpoint and selects Instance by nonnil presence, including empty; Instance wins HostName and only one selected field is sent. HostName fallback includes explicit empty. No mode, instance/host lookup, Nova request or state/poll is added. Tests: blockstorage/cinder_volume_attachment_test.go:TestCinderVolumeAttachmentLiteralBranchesAcceptOpaqueAcknowledgementsWithoutLookup, blockstorage/cinder_volume_attachment_test.go:TestCinderVolumeAttachmentServiceMethodsPreserveNativeAttachDetachContracts, connection_cinder_volume_attachment_test.go:TestConnectionCinderVolumeAttachmentsUseCachedCinderAndIgnoreLocation.

  • Both selectors nil fail locally; only final selected selector UTF-8 is consumed, so inactive invalid HostName is ignored. Required mountpoint accepts empty/control/path-like UTF-8 text and fails invalid UTF-8 before direct originals/HTTP. Tests: blockstorage/cinder_volume_attachment_test.go:TestCinderVolumeAttachmentLiteralBranchesAcceptOpaqueAcknowledgementsWithoutLookup, blockstorage/cinder_volume_attachment_test.go:TestCinderVolumeAttachmentPreflightAndOwnedOriginalOptionsPrecedeHTTP, blockstorage/cinder_volume_attachment_options_test.go:TestCinderVolumeAttachmentPrepareValidatesFinalActiveValuesAndJoinsCauses, blockstorage/cinder_volume_attachment_options_test.go:TestCinderVolumeAttachmentDirectPreflightAndStickySourceStopOriginals, connection_cinder_volume_attachment_test.go:TestConnectionCinderVolumeAttachmentPreflightOptionsAndGetterFailuresKeepCauses.

  • Owned factories/full replacement and reusable HTTP-free Prepare copy nullable pointers, isolate returned policy from original inputs/results and reject missing/final-invalid selection with zero policy. No caller builder/interface is required. Tests: blockstorage/cinder_volume_attachment_options_test.go:TestCinderVolumeAttachmentOptionsFactoriesDefaultsAndReplacementOwnership, blockstorage/cinder_volume_attachment_options_test.go:TestCinderVolumeAttachmentPrepareValidatesFinalActiveValuesAndJoinsCauses.

  • Direct Source/current-ID/required-literal admission precedes original callbacks; originals snapshot their slice, execute once in order and copy retained policy before/after each. Source faults are sticky and stop later restoration callbacks with all context/callback causes. Tests: blockstorage/cinder_volume_attachment_test.go:TestCinderVolumeAttachmentPreflightAndOwnedOriginalOptionsPrecedeHTTP, blockstorage/cinder_volume_attachment_options_test.go:TestCinderVolumeAttachmentOriginalsOwnSlicePointersAndConnectorThroughHTTP, blockstorage/cinder_volume_attachment_options_test.go:TestCinderVolumeAttachmentDirectPreflightAndStickySourceStopOriginals.

  • Connection preflight prepares originals once before required literal/current ID/cached Cinder getter; only Cinder is selected, configured CurrentLocation is not consumed, and retained values/getter/context/source faults preserve local operation/cause evidence. Tests: connection_cinder_volume_attachment_test.go:TestConnectionCinderVolumeAttachmentsUseCachedCinderAndIgnoreLocation, connection_cinder_volume_attachment_test.go:TestConnectionCinderVolumeAttachmentOriginalsRunOnceBeforeGetterAndRetainedValuesStayDetached, connection_cinder_volume_attachment_test.go:TestConnectionCinderVolumeAttachmentPreflightOptionsAndGetterFailuresKeepCauses.

  • No action-specific minimum is added. Nonempty selected3.1/3.90/latest remains literal without discovery; unselected ordinary cap3.71/lower maximum/high minimum no-version policy owns separate admitted Discovery and action proof without source version mutation. Tests: blockstorage/cinder_volume_attachment_test.go:TestCinderVolumeAttachmentUsesOrdinarySelectedOrCappedMicroversionWithoutMinimumGate, connection_cinder_volume_attachment_test.go:TestConnectionCinderVolumeAttachmentsUseCachedCinderAndIgnoreLocation.

  • Opaque accepted action bytes/Header/status are independently owned. Completed acknowledges admission/read/Close/source success; accepted Read/Close/source/custom-context failures retain Applied/independent ResponseError and all causes with Completedfalse and no SDK replay. Tests: blockstorage/cinder_volume_attachment_test.go:TestCinderVolumeAttachmentLiteralBranchesAcceptOpaqueAcknowledgementsWithoutLookup, blockstorage/cinder_volume_attachment_transport_test.go:TestCinderVolumeAttachmentAcceptedFailuresKeepIndependentActualProofAndJoinedCauses.

  • Live auth/reauth/bounded retry preserve original action body/selected version/admission and block changed body/header/source/physical307 body/framing/target before resend. Native Attach mode/both-selectors/202/error-only and nil service policy remain separate from SDK service AttachCinderVolume. Tests: blockstorage/cinder_volume_attachment_test.go:TestCinderVolumeAttachmentServiceMethodsPreserveNativeAttachDetachContracts, blockstorage/cinder_volume_attachment_transport_test.go:TestCinderVolumeAttachmentNativeAuthRetriesAndPhysicalGuardsPreserveOriginalActionPolicy.

Python/Go differences:

  • Source nullable selectors can hold dynamic nonstring values; Go narrows to nullable UTF-8 strings and validates only selected instance/host. Explicit empty remains present. Direct Source attach has no mode; native Mode/omitempty/two nonempty selectors is preserved independently.
  • Go safe current volume route ID and required UTF-8 body strings and nullable selectors replace supplied Resource/dict/Munch/None/untyped IDs, arbitrary dynamic annotations and constructor/descriptor/location/cache side effects; no name finder, refresh/model, CurrentLocation, wait/poll or additional server-state checks are introduced.
  • Source action helpers return None after opaque response.status_code<400. Go finite100..399 policy adds owned VolumeID/Microversion/Discovery/Applied/Completed. Completed is helper acknowledgement, not server attachment/device state or backend readiness.
  • Finite operation-owned ordinary discovery/max3.71 is an explicit Go mapping rather than complete Keystoneauth endpoint-data cache/link/envelope/exception ordering/Session header canonicalization. Nonempty selected literal is preserved; empty Go selection cannot separately represent Python explicit empty default versus None.
  • Fixed method/route/serialized body/framing/selected version and admitted response ownership constrain retry/redirect while live native auth and allowed extra retry headers remain. Original native rejected HTTP is distinct and cannot become Applied; discarded rejected POST body IO is not claimed fully reconstructed.
  • Only the actual pinned v3 Proxy attach_volume target is classified. Native/v2/Resource and existing cloud AttachVolume/DetachVolume workflows remain independently reviewed; the unchanged cloud boundary here is statically bound, not a new cloud workflow runtime test. No Python Source/dependency/authenticated OpenStack execution or full SDK completion is claimed.
python:block_storage/v3/detach_volume

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithCinderVolumeDetachOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithCinderVolumeDetachForce

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithCinderVolumeDetachConnector

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.PrepareCinderVolumeDetachOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.DetachCinderVolume

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.WithCinderVolumeDetachOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.WithCinderVolumeDetachForce

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.WithCinderVolumeDetachConnector

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.PrepareCinderVolumeDetachOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.API.DetachCinderVolume

  • github.com/JSYoo5B/go-openstacksdk.Connection.DetachCinderVolume

  • Detach Force nil/default/false sends os-detach with required attachment_id literal, including empty/control/path-like UTF-8. Inactive connector values/keys are not validated or sent, even if malformed. Force true selects os-force_detach without a separate lookup/wait/rollback workflow. Tests: blockstorage/cinder_volume_attachment_test.go:TestCinderVolumeAttachmentLiteralBranchesAcceptOpaqueAcknowledgementsWithoutLookup, blockstorage/cinder_volume_attachment_test.go:TestCinderVolumeAttachmentPreflightAndOwnedOriginalOptionsPrecedeHTTP, blockstorage/cinder_volume_attachment_options_test.go:TestCinderVolumeAttachmentPrepareValidatesFinalActiveValuesAndJoinsCauses, connection_cinder_volume_attachment_test.go:TestConnectionCinderVolumeAttachmentsUseCachedCinderAndIgnoreLocation.

  • Force true omits nil/empty connector and includes all members of a nonempty object, including false/null/empty string and exact raw large/nested JSON values. Only active UTF-8 keys/complete UTF-8 JSON members are admitted; invalid/nil/trailing raw values fail locally and final repaired/inactive policy can succeed. Tests: blockstorage/cinder_volume_attachment_test.go:TestCinderVolumeAttachmentLiteralBranchesAcceptOpaqueAcknowledgementsWithoutLookup, blockstorage/cinder_volume_attachment_test.go:TestCinderVolumeAttachmentPreflightAndOwnedOriginalOptionsPrecedeHTTP, blockstorage/cinder_volume_attachment_options_test.go:TestCinderVolumeAttachmentPrepareValidatesFinalActiveValuesAndJoinsCauses.

  • Owned false default pointer is fresh. Full replacement clears prior connector/force and restores defaultfalse; reusable WithOptions/Connector/Prepare own pointers/maps/every raw byte member, and failures return zero policy with joined context/callback causes. Tests: blockstorage/cinder_volume_attachment_options_test.go:TestCinderVolumeAttachmentOptionsFactoriesDefaultsAndReplacementOwnership, blockstorage/cinder_volume_attachment_options_test.go:TestCinderVolumeAttachmentPrepareValidatesFinalActiveValuesAndJoinsCauses.

  • Original option slice/callback order/retained pointer-map-rawvalue ownership remain detached through HTTP. Direct Source/current ID/required literal preflight precedes callbacks; sticky source/cancel/callback errors stop later originals before physical proof. Tests: blockstorage/cinder_volume_attachment_test.go:TestCinderVolumeAttachmentPreflightAndOwnedOriginalOptionsPrecedeHTTP, blockstorage/cinder_volume_attachment_options_test.go:TestCinderVolumeAttachmentOriginalsOwnSlicePointersAndConnectorThroughHTTP, blockstorage/cinder_volume_attachment_options_test.go:TestCinderVolumeAttachmentDirectPreflightAndStickySourceStopOriginals.

  • Connection prepares originals once before body/route/cached Cinder admission; default/force calls need no Nova or CurrentLocation. Retained maps/getter mutation cannot alter the owned prepared request, while preflight/option/getter/context/source failures retain exact operation/cause without HTTP. Tests: connection_cinder_volume_attachment_test.go:TestConnectionCinderVolumeAttachmentsUseCachedCinderAndIgnoreLocation, connection_cinder_volume_attachment_test.go:TestConnectionCinderVolumeAttachmentOriginalsRunOnceBeforeGetterAndRetainedValuesStayDetached, connection_cinder_volume_attachment_test.go:TestConnectionCinderVolumeAttachmentPreflightOptionsAndGetterFailuresKeepCauses.

  • Normal and force detach use ordinary selected literal or finite cap3.71/max/optionalminimum negotiation with no minimum gate. Original client selection is not mutated and admitted Discovery/action proof are independent. Tests: blockstorage/cinder_volume_attachment_test.go:TestCinderVolumeAttachmentUsesOrdinarySelectedOrCappedMicroversionWithoutMinimumGate, connection_cinder_volume_attachment_test.go:TestConnectionCinderVolumeAttachmentsUseCachedCinderAndIgnoreLocation.

  • Opaque acknowledgement and Completed remain distinct from backend disconnect/state completion. Accepted Read/Close/source/custom cancellation retain actual independent Applied/error proof and all causes without replay; rejected HTTP cannot borrow or fabricate admitted proof. Tests: blockstorage/cinder_volume_attachment_test.go:TestCinderVolumeAttachmentLiteralBranchesAcceptOpaqueAcknowledgementsWithoutLookup, blockstorage/cinder_volume_attachment_transport_test.go:TestCinderVolumeAttachmentAcceptedFailuresKeepIndependentActualProofAndJoinedCauses, blockstorage/cinder_volume_attachment_transport_test.go:TestCinderVolumeAttachmentNativeAuthRetriesAndPhysicalGuardsPreserveOriginalActionPolicy.

  • SDK service DetachCinderVolume normal/force/empty-ID/connector/result behavior remains distinct from native Detach empty omission/normal-only202/error-only. Live reauth/bounded retry/physical307 guards preserve original body/framing/URL/version/status policy and nil API preflight. Tests: blockstorage/cinder_volume_attachment_test.go:TestCinderVolumeAttachmentServiceMethodsPreserveNativeAttachDetachContracts, blockstorage/cinder_volume_attachment_transport_test.go:TestCinderVolumeAttachmentNativeAuthRetriesAndPhysicalGuardsPreserveOriginalActionPolicy.

Python/Go differences:

  • Source arbitrary force truthiness and truthy connector objects are deliberately narrowed to nullable bool and owned JSON object map. Inactive connector is not consumed. Raw numeric precision/spelling/map serialization are Go JSON representation boundaries rather than arbitrary Python objects/insertion-order serialization.
  • Source force action does not call backend disconnect or a separate rollback helper; Go force flag only chooses the action. Native Detach normal-only/omitempty202/error-only remains unchanged.
  • Go safe current volume route ID and required UTF-8 body strings, nullable force bool and owned JSON connector replace supplied Resource/dict/Munch/None/untyped IDs, arbitrary dynamic annotations and constructor/descriptor/location/cache side effects; no name finder, refresh/model, CurrentLocation, wait/poll or additional server-state checks are introduced.
  • Source action helpers return None after opaque response.status_code<400. Go finite100..399 policy adds owned VolumeID/Microversion/Discovery/Applied/Completed. Completed is helper acknowledgement, not server attachment/device state or backend readiness.
  • Finite operation-owned ordinary discovery/max3.71 is an explicit Go mapping rather than complete Keystoneauth endpoint-data cache/link/envelope/exception ordering/Session header canonicalization. Nonempty selected literal is preserved; empty Go selection cannot separately represent Python explicit empty default versus None.
  • Fixed method/route/serialized body/framing/selected version and admitted response ownership constrain retry/redirect while live native auth and allowed extra retry headers remain. Original native rejected HTTP is distinct and cannot become Applied; discarded rejected POST body IO is not claimed fully reconstructed.
  • Only the actual pinned v3 Proxy detach_volume target is classified. Native/v2/Resource and existing cloud AttachVolume/DetachVolume workflows remain independently reviewed; the unchanged cloud boundary here is statically bound, not a new cloud workflow runtime test. No Python Source/dependency/authenticated OpenStack execution or full SDK completion is claimed.
python:block_storage/v3/set_volume_image_metadata

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeImageMetadataOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeImageMetadata

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeImageMetadataValue

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeImageMetadataRaw

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.PrepareVolumeImageMetadataOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.SetVolumeImageMetadata

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.WithVolumeImageMetadataOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.WithVolumeImageMetadata

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.WithVolumeImageMetadataValue

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.WithVolumeImageMetadataRaw

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.PrepareVolumeImageMetadataOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.API.SetVolumeImageMetadata

  • github.com/JSYoo5B/go-openstacksdk.Connection.SetVolumeImageMetadata

  • Set sends exactly one os-set_image_metadata action with metadata object, including omitted/nil/empty maps as {}. Literal empty/control/path-like strings and raw null/false/exact large/nested JSON members are preserved in the body; no lookup/model refresh/wait is added. Admitted opaque 200/203/204/302/399 responses complete acknowledgement without JSON parsing. Tests: blockstorage/volume_image_metadata_test.go:TestSetVolumeImageMetadataPreservesEmptyMapsRawValuesAndOwnedFactories, blockstorage/volume_image_metadata_test.go:TestVolumeImageMetadataServiceFacadePreservesNativeSetAndPublicPreflight, connection_volume_image_metadata_test.go:TestConnectionVolumeImageMetadataUsesCachedCinderAndPreservesAllEmptyAndDuplicateIntents.

  • String/raw/full factories replace policy; Value alone merges one string member. HTTP-free reusable Prepare owns maps/member bytes and fresh empty defaults, validates only final UTF-8 keys/strings/complete JSON values, permits later repair of invalid members, and returns zero policy on failures. Tests: blockstorage/volume_image_metadata_options_test.go:TestVolumeImageMetadataOptionFactoriesOwnInputsReturnedValuesAndReplacementOrder, blockstorage/volume_image_metadata_options_test.go:TestVolumeImageMetadataPrepareValidatesOnlyFinalMapsAndPresentKeys, blockstorage/volume_image_metadata_options_test.go:TestVolumeImageMetadataPrepareNilCallbacksAndCancellationKeepZeroPolicyAndEveryCause.

  • Originals snapshot their callback slice, run once in order, copy intermediate maps/raw bytes and join callback/custom-context causes. Direct selected Source/current-ID admission precedes originals; sticky ResourceBase mutation stops a later restoration callback before HTTP. Tests: blockstorage/volume_image_metadata_options_test.go:TestVolumeImageMetadataOriginalsOwnCallbackSliceIntermediateMapsAndKeySlices, blockstorage/volume_image_metadata_options_test.go:TestVolumeImageMetadataPrepareNilCallbacksAndCancellationKeepZeroPolicyAndEveryCause, blockstorage/volume_image_metadata_test.go:TestSetVolumeImageMetadataPreservesEmptyMapsRawValuesAndOwnedFactories, blockstorage/volume_image_metadata_test.go:TestVolumeImageMetadataServiceFacadePreservesNativeSetAndPublicPreflight.

  • Connection preflights context/provider, prepares originals once before current-ID/cached Cinder selection, ignores configured CurrentLocation, and detaches retained callback maps through the getter. Local/callback/getter/cached wrong-service failures preserve operation/cause and create no HTTP proof. Tests: connection_volume_image_metadata_test.go:TestConnectionVolumeImageMetadataUsesCachedCinderAndPreservesAllEmptyAndDuplicateIntents, connection_volume_image_metadata_test.go:TestConnectionVolumeImageMetadataOriginalsRunOnceBeforeGetterAndRetainedOptionsStayDetached, connection_volume_image_metadata_test.go:TestConnectionVolumeImageMetadataPreflightOptionsAndGetterFailuresKeepEveryCause.

  • Nonempty selected 3.60/3.90 is literal and skips discovery; common ordinary action selection has no minimum gate and cap3.71. Malformed admitted unselected discovery blocks set with only its actual Discovery/ResponseError, while valid common batch negotiation is independently exercised by delete. Tests: blockstorage/volume_image_metadata_test.go:TestSetVolumeImageMetadataPreservesEmptyMapsRawValuesAndOwnedFactories, blockstorage/volume_image_metadata_test.go:TestVolumeImageMetadataNegotiatesOnceAndStopsAtCurrentNativeFailureWithoutBorrowedProof, connection_volume_image_metadata_test.go:TestConnectionVolumeImageMetadataUsesCachedCinderAndPreservesAllEmptyAndDuplicateIntents.

  • Accepted Read/Close/source/custom-context failures retain independently owned current Applied/error proof with Completedfalse and no SDK replay. Live auth/reauth/bounded retry keep original body/version/admission; retry/physical307 body/framing/URL/version changes are blocked and native rejection cannot fabricate Applied. Service native SetImageMetadata nil=>null/200-only/error-only remains independent. Tests: blockstorage/volume_image_metadata_transport_test.go:TestVolumeImageMetadataAcceptedFailuresRetainOnlyCurrentPhaseProofAndJoinedCauses, blockstorage/volume_image_metadata_transport_test.go:TestVolumeImageMetadataNativeRetriesAndPhysicalMutationGuardsKeepBatchPolicy, blockstorage/volume_image_metadata_test.go:TestVolumeImageMetadataServiceFacadePreservesNativeSetAndPublicPreflight.

Python/Go differences:

  • Python **metadata supplies a kwargs dictionary, including empty {}. Go string/raw/full factories replace request policy and Value merges; this is request assembly, not a claim that Cinder atomically replaces its stored image metadata.
  • Go raw metadata permits owned ordinary JSON null/bool/numbers/containers without float preconversion, but rejects invalid UTF-8/incomplete JSON/nil raw members and excludes arbitrary Python objects/datetime/UUID/custom serializer behavior. Map member order and numeric/string/escape serialization are Go JSON representation boundaries, not Python mutable kwargs identity.
  • Native API.SetImageMetadata remains independently map[string]string, nil metadata:null, HTTP200/error-only; ordinary MetadataIn childroutes are unchanged.
  • Go safe explicit current volume ID and owned option/result values replace Source supplied Resource/dict/Munch/None/dynamic inherited ID and constructor/descriptor/location/session side effects. No name finder, CurrentLocation, refresh, state wait or model conversion is introduced.
  • The Source helper returns None after response status<400. Go finite100..399 admission exposes owned actual stage responses and Completed acknowledgement; this does not prove the final server/backend metadata state.
  • Go finite operation-owned ordinary discovery/cap3.71 and literal nonempty selected version differ from complete Keystoneauth endpoint-data cache/canonicalization/exception ordering. Empty Go selection cannot represent every distinct Python default None/empty value. Original client selection is not rewritten.
  • Fixed method/URL/serialized-body/framing/version and captured Source constrain native retry/redirect while live provider authentication is allowed. Native original rejected HTTP remains native; discarded rejected HTTP body IO is not claimed fully reconstructed.
  • Only the actual pinned v3 Proxy target is classified as go_mapping. Native/v2/Resource/MetadataMixin/ordinary MetadataIn and shared discovery dependencies are not promoted. Source/static comparison and Root offline Go HTTP/example checks do not imply Python/dependency/authenticated OpenStack execution or full SDK completion.
python:block_storage/v3/delete_volume_image_metadata

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeImageMetadataDeleteOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeImageMetadataDeleteKeys

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeImageMetadataDeleteAll

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.PrepareVolumeImageMetadataDeleteOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.DeleteVolumeImageMetadata

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.WithVolumeImageMetadataDeleteOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.WithVolumeImageMetadataDeleteKeys

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.WithVolumeImageMetadataDeleteAll

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.PrepareVolumeImageMetadataDeleteOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.API.DeleteVolumeImageMetadata

  • github.com/JSYoo5B/go-openstacksdk.Connection.DeleteVolumeImageMetadata

  • Keys pointer nil/default means all; a nonnil pointer including nil/empty slice or zero-argument WithKeys means explicit none with zero HTTP/discovery after local admission. Explicit UTF-8 keys, including empty/control/path-like text, preserve order and duplicates as body literals with no GET; every final key is validated before earlier actions. Tests: blockstorage/volume_image_metadata_test.go:TestDeleteVolumeImageMetadataExplicitKeysKeepOrderDuplicatesAndEagerValidation, blockstorage/volume_image_metadata_options_test.go:TestVolumeImageMetadataOptionFactoriesOwnInputsReturnedValuesAndReplacementOrder, blockstorage/volume_image_metadata_options_test.go:TestVolumeImageMetadataPrepareValidatesOnlyFinalMapsAndPresentKeys, connection_volume_image_metadata_test.go:TestConnectionVolumeImageMetadataUsesCachedCinderAndPreservesAllEmptyAndDuplicateIntents.

  • Default all intentionally corrects the pinned ordinary-metadata iteration bug: fixed-ID bodyless member GET admits sub400 but requires canonical volume object and reads only volume_image_metadata. Missing/null/empty image map emits no POST; nonobject/bad envelope/malformed JSON keeps actual Observed/error proof. Image keys are snapshotted/sorted, ignoring ordinary metadata, returned ID and unrelated typed fields. Tests: blockstorage/volume_image_metadata_test.go:TestDeleteVolumeImageMetadataAllReadsOnlyCanonicalImageFieldAndKeepsObservation, connection_volume_image_metadata_test.go:TestConnectionVolumeImageMetadataUsesCachedCinderAndPreservesAllEmptyAndDuplicateIntents.

  • Owned factories/full replacement/All/Keys and reusable HTTP-free Prepare preserve pointer presence, slice order/duplicates and returned-policy independence. Original callback slice and intermediate key backing arrays stay detached; final repaired keys succeed, and nil/callback/cancellation failures return zero policy with every cause. Tests: blockstorage/volume_image_metadata_options_test.go:TestVolumeImageMetadataOptionFactoriesOwnInputsReturnedValuesAndReplacementOrder, blockstorage/volume_image_metadata_options_test.go:TestVolumeImageMetadataOriginalsOwnCallbackSliceIntermediateMapsAndKeySlices, blockstorage/volume_image_metadata_options_test.go:TestVolumeImageMetadataPrepareValidatesOnlyFinalMapsAndPresentKeys, blockstorage/volume_image_metadata_options_test.go:TestVolumeImageMetadataPrepareNilCallbacksAndCancellationKeepZeroPolicyAndEveryCause, connection_volume_image_metadata_test.go:TestConnectionVolumeImageMetadataOriginalsRunOnceBeforeGetterAndRetainedOptionsStayDetached.

  • Direct Source/current-ID admission precedes original callbacks even for explicit none. Connection preflight prepares originals once before current-ID/cached Cinder selection, consumes no CurrentLocation, and validates unsafe IDs/invalid final keys/getter/cached source failures without member/action HTTP or borrowed proof. Tests: blockstorage/volume_image_metadata_test.go:TestDeleteVolumeImageMetadataExplicitKeysKeepOrderDuplicatesAndEagerValidation, blockstorage/volume_image_metadata_test.go:TestVolumeImageMetadataServiceFacadePreservesNativeSetAndPublicPreflight, connection_volume_image_metadata_test.go:TestConnectionVolumeImageMetadataUsesCachedCinderAndPreservesAllEmptyAndDuplicateIntents, connection_volume_image_metadata_test.go:TestConnectionVolumeImageMetadataOriginalsRunOnceBeforeGetterAndRetainedOptionsStayDetached, connection_volume_image_metadata_test.go:TestConnectionVolumeImageMetadataPreflightOptionsAndGetterFailuresKeepEveryCause.

  • A nonempty selected version skips discovery; otherwise one ordinary cap3.71 negotiation supplies the entire batch GET/POST version and separate actual Discovery. First native action failure stops later keys, retains earlier Deleted/optional Observed, records Failed key with nil Response while the returned error retains current native status/body/header, and cannot borrow admitted ResponseError proof. Tests: blockstorage/volume_image_metadata_test.go:TestVolumeImageMetadataNegotiatesOnceAndStopsAtCurrentNativeFailureWithoutBorrowedProof, connection_volume_image_metadata_test.go:TestConnectionVolumeImageMetadataUsesCachedCinderAndPreservesAllEmptyAndDuplicateIntents, blockstorage/volume_image_metadata_transport_test.go:TestVolumeImageMetadataNativeRetriesAndPhysicalMutationGuardsKeepBatchPolicy.

  • Per-key opaque acknowledgement bodies/headers and member/error proofs own independent bytes. Accepted IO/source/custom cancellation retains only the current Observed or Failed.Response plus earlier completed keys, without replay/rollback; Completed only means helper acknowledgement. Live auth and bounded retry preserve batch policy, physical bodyless GET/POST/URL/version/framing mutations are blocked, and rejected injected GET Body Close runs once with close cause retained. Tests: blockstorage/volume_image_metadata_test.go:TestDeleteVolumeImageMetadataExplicitKeysKeepOrderDuplicatesAndEagerValidation, blockstorage/volume_image_metadata_test.go:TestDeleteVolumeImageMetadataAllReadsOnlyCanonicalImageFieldAndKeepsObservation, blockstorage/volume_image_metadata_transport_test.go:TestVolumeImageMetadataAcceptedFailuresRetainOnlyCurrentPhaseProofAndJoinedCauses, blockstorage/volume_image_metadata_transport_test.go:TestVolumeImageMetadataNativeRetriesAndPhysicalMutationGuardsKeepBatchPolicy.

Python/Go differences:

  • Pinned keys=None calls Volume.delete_image_metadata, which loops inherited ordinary self.metadata rather than volume_image_metadata. ID-only missing ordinary metadata defaults to None and implies iteration TypeError by static inspection; no Python execution is asserted. Go intentionally repairs this branch with fresh fixed-ID image-field GET and sorted snapshot keys.
  • The repaired all path is not an atomic clear: keys added after observation are not included, concurrent changes can cause a later failure, earlier deletions remain, and there is no implicit merge/write/retry/rollback promise.
  • Python non-None keys can be an arbitrary lazy iterable, string character iteration or generator failing after earlier POSTs. Go narrows to an eager owned UTF-8 string slice; nonnil pointer to nil/empty slice explicitly means none. Final key validation occurs before any mutation and duplicate order is preserved.
  • Source selects microversion separately for every key action using mutable session state. Go negotiates/captures one version for the whole batch, including the added default-all GET; this deliberate stable policy does not reproduce per-key session mutation.
  • Observed/Discovery/Deleted/Failed and current native/error proof are distinct owned phases. A failure before attempting the next key can leave Failed nil, while an attempted native rejected action has Failed with nil Response. Earlier acknowledgement is not borrowed as current evidence.
  • Go safe explicit current volume ID and owned option/result values replace Source supplied Resource/dict/Munch/None/dynamic inherited ID and constructor/descriptor/location/session side effects. No name finder, CurrentLocation, refresh, state wait or model conversion is introduced.
  • The Source helper returns None after response status<400. Go finite100..399 admission exposes owned actual stage responses and Completed acknowledgement; this does not prove the final server/backend metadata state.
  • Go finite operation-owned ordinary discovery/cap3.71 and literal nonempty selected version differ from complete Keystoneauth endpoint-data cache/canonicalization/exception ordering. Empty Go selection cannot represent every distinct Python default None/empty value. Original client selection is not rewritten.
  • Fixed method/URL/serialized-body/framing/version and captured Source constrain native retry/redirect while live provider authentication is allowed. Native original rejected HTTP remains native; discarded rejected HTTP body IO is not claimed fully reconstructed.
  • Only the actual pinned v3 Proxy target is classified as go_mapping. Native/v2/Resource/MetadataMixin/ordinary MetadataIn and shared discovery dependencies are not promoted. Source/static comparison and Root offline Go HTTP/example checks do not imply Python/dependency/authenticated OpenStack execution or full SDK completion.
python:block_storage/v3/upload_volume_to_image

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeImageUploadOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeImageUploadForce

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeImageUploadDiskFormat

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeImageUploadContainerFormat

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeImageUploadVisibility

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.WithVolumeImageUploadProtected

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.PrepareVolumeImageUploadOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage.UploadVolumeToImage

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.WithVolumeImageUploadOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.WithVolumeImageUploadForce

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.WithVolumeImageUploadDiskFormat

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.WithVolumeImageUploadContainerFormat

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.WithVolumeImageUploadVisibility

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.WithVolumeImageUploadProtected

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.PrepareVolumeImageUploadOptions

  • github.com/JSYoo5B/go-openstacksdk/blockstorage/v3/volumes.API.UploadVolumeToImage

  • github.com/JSYoo5B/go-openstacksdk.Connection.UploadVolumeToImage

  • The required image name is literal UTF-8 text, including empty/control/path-like strings. Force defaults to an owned false pointer and is always sent; nil formats/visibility/protected are omitted, while explicit empty formats/visibility and false protected are included without format/visibility enums or invented defaults. Tests: blockstorage/volume_image_upload_test.go:TestUploadVolumeToImageSerializesLiteralNamesDefaultsAndOptionalPresence, blockstorage/volume_image_upload_test.go:TestUploadVolumeToImageDirectPreflightAndOwnedOriginalsKeepFixedRequestPolicy, blockstorage/volume_image_upload_options_test.go:TestVolumeImageUploadOptionFactoriesOwnPointersDefaultsAndFullReplacement, blockstorage/volume_image_upload_options_test.go:TestVolumeImageUploadPrepareValidatesOnlyFinalUTF8AndPreservesLiteralStrings.

  • Only nonnil Visibility or Protected requests advertised 3.1 support, including empty/false. Both server bounds must contain fixed3.1 and any selected version must have the same major and satisfy3.1; a selected version above the advertised maximum can still pass. No-presence selected3.0 skips discovery; unselected required selection shares one probe and uses the ordinary3.71 cap/lower server maximum without rewriting the client. Tests: blockstorage/volume_image_upload_test.go:TestUploadVolumeToImageConditional31GateUsesAdvertisedBoundsAndOrdinaryActionSelection, blockstorage/volume_image_upload_test.go:TestUploadVolumeToImageSerializesLiteralNamesDefaultsAndOptionalPresence, connection_volume_image_upload_test.go:TestConnectionVolumeImageUploadUsesCachedCinderAndGatesOnlyOptionalPresence, blockstorage/volume_image_upload_test.go:TestUploadVolumeToImageServiceKeepsNativeUploadImageOmission202AndTypedResult.

  • Owned factories/full replacement and HTTP-free Prepare preserve all pointer presence and reusable policy independence. The original option slice is copied before callbacks; every intermediate/final pointer is detached, final UTF-8 can be repaired by later replacement, and nil/callback/custom-cancellation failures return zero policy with every cause. Direct Source/ID/image admission precedes originals; Connection prepares originals once before image/ID/cached Cinder selection and consumes no CurrentLocation. Tests: blockstorage/volume_image_upload_options_test.go:TestVolumeImageUploadOptionFactoriesOwnPointersDefaultsAndFullReplacement, blockstorage/volume_image_upload_options_test.go:TestVolumeImageUploadOriginalsOwnCallbackSliceAndIntermediatePointers, blockstorage/volume_image_upload_options_test.go:TestVolumeImageUploadPrepareValidatesOnlyFinalUTF8AndPreservesLiteralStrings, blockstorage/volume_image_upload_options_test.go:TestVolumeImageUploadPrepareNilCallbacksAndCancellationKeepZeroPolicyAndEveryCause, blockstorage/volume_image_upload_test.go:TestUploadVolumeToImageDirectPreflightAndOwnedOriginalsKeepFixedRequestPolicy, connection_volume_image_upload_test.go:TestConnectionVolumeImageUploadOriginalsRunOnceBeforeGetterAndRetainedPointersStayDetached, connection_volume_image_upload_test.go:TestConnectionVolumeImageUploadPreflightOptionsLiteralAndGetterFailuresKeepEveryCause, connection_volume_image_upload_test.go:TestConnectionVolumeImageUploadUsesCachedCinderAndGatesOnlyOptionalPresence.

  • Accepted action handling requires one UTF-8 JSON object and the exact os-volume_upload_image key. Its selected value can be any JSON shape including null, nonobject and object without image_id; interior whitespace/numeric/escape literals are preserved and the last outer duplicate wins. Missing/bad key/root/malformed/trailing/UTF8/empty204 failures retain current Applied and independent error proof, keep Upload nil/Completed false and issue no parser replay. Tests: blockstorage/volume_image_upload_test.go:TestUploadVolumeToImageAcceptsArbitrarySelectedJSONAndKeepsFailedDecodeProof, blockstorage/volume_image_upload_test.go:TestUploadVolumeToImageServiceKeepsNativeUploadImageOmission202AndTypedResult, connection_volume_image_upload_test.go:TestConnectionVolumeImageUploadUsesCachedCinderAndGatesOnlyOptionalPresence.

  • Discovery, Applied, selected Upload and response-error snapshots own independent bytes/headers. Accepted Read/Close/source/custom-cancellation failures keep the current actual phase and every cause, retain earlier completed discovery independently, close once and leave Upload nil/Completed false. Completed reports successful helper response handling without a Glance lookup, image wait, refresh or rollback. Tests: blockstorage/volume_image_upload_transport_test.go:TestUploadVolumeToImageAcceptedDiscoveryOrActionFailureKeepsCurrentProofAndNoValue, blockstorage/volume_image_upload_test.go:TestUploadVolumeToImageAcceptsArbitrarySelectedJSONAndKeepsFailedDecodeProof, connection_volume_image_upload_test.go:TestConnectionVolumeImageUploadUsesCachedCinderAndGatesOnlyOptionalPresence.

  • Live native401 reauthentication and bounded503 retry preserve the original serialized upload body, captured ordinary headers, chosen version and100..399 admission. Retry body/version/source mutations and physical redirected body/header/target/framing mutations block resend; original rejected HTTP retains native status/body/header with Applied nil and no borrowed discovery proof. The service facade keeps native UploadImage omitempty/202-only/typed VolumeImage behavior independently unchanged. Tests: blockstorage/volume_image_upload_transport_test.go:TestUploadVolumeToImageLiveNativeRetriesAndPhysicalGuardsKeepBodyAndOriginalAdmission, blockstorage/volume_image_upload_test.go:TestUploadVolumeToImageServiceKeepsNativeUploadImageOmission202AndTypedResult.

Python/Go differences:

  • Go safe explicit current volume ID and UTF-8 literal image name replace Source supplied Resource/dict/Munch/None/dynamic inherited ID and constructor/descriptor/location/cache/session side effects. This helper adds no name finder, CurrentLocation, Volume model refresh, Glance lookup, image-byte upload, wait or rollback.
  • Source annotations do not constrain runtime arguments: its own extended Proxy mock test forwards protected="5", and Python None/dynamic force can be forwarded literally. Go uses nullable typed strings/bools; Force nil means defaultfalse, optional nil means omission, and explicit empty/false remains present. Arbitrary Python runtime objects/custom serializers are outside this typed mapping.
  • Source performs the3.1 requirement through endpoint-data utilities, then ordinary action selection through the Resource. Go captures one Source and uses finite operation-owned discovery/shared3.71 selection; this does not reproduce full Keystoneauth endpoint cache/getter count/canonicalization/exception order. Nonempty selected text is preserved; Go empty selection cannot represent every distinction between Python None and explicit empty default.
  • The fixed3.1 gate compares3.1 with both advertised bounds and selected same-major minimum, not selected against the server maximum. A selected3.90 can pass advertised3.0..3.50 and is sent literally; global latest fails the same-major gate whereas3.latest passes. Dependency Session normalization/header behavior remains a separate declared boundary.
  • The Source cast(dict, ...) is only an annotation cast and returns the exact selected JSON value; image_id and object shape are not required. Go returns owned literal RawMessage, preserving interior numeric/escape/whitespace spelling rather than Python mutable parsed objects/float rounding. Outer duplicate envelope keys follow ordinary last-key JSON decoding; successful null is nonnil literalnull, unlike error nil Upload.
  • Go validates accepted UTF-8 JSON and an exact object envelope before exposing Upload, and exposes separate Discovery/Applied/Upload/Completed evidence. Accepted decode/IO/source/context faults keep actual completed HTTP proof without replay. These error/evidence choices do not promise identical Python exception taxonomy or final image/backend availability.
  • Source raise_from_response admits status<400; Go uses finite100..399 and constrains native retry/redirect through fixed physical method/URL/body/framing/version and captured Source while permitting live provider auth. Original rejected HTTP remains native; discarded native rejected-body IO is not claimed fully reconstructed.
  • Only the actual pinned v3 Proxy upload_volume_to_image target is classified as go_mapping. Native UploadImage omitempty/202-only/typed VolumeImage, Glance image.Service.UploadImage, v2/Resource/shared discovery dependencies are not promoted. Static Source/dependency comparison and Root offline Go HTTP/example checks do not imply Python/dependency/authenticated OpenStack runtime or full SDK completion.
python:block_storage/v3/create_image

Status: go_mapping.

Go API:

  • github.com/JSYoo5B/go-openstacksdk.Connection.CreateVolumeImageRecord

  • github.com/JSYoo5B/go-openstacksdk/image.Service.ExistingImageRecord

  • CreateVolumeImageRecord fills a falsey disk format from the captured cloud image_format (default qcow2, omitted when configured null), a falsey container format with bare and force from allow_duplicates, then sends one upload-to-image volume action through the existing Cinder upload engine. Tests: connection_volume_image_create_test.go:TestConnectionCreateVolumeImageRecordDefaultsUploadAndExistingImage.

  • The upload result's image_id becomes Image.existing(id=...) through image.Service.ExistingImageRecord: a synchronized id-only record with the 65 declared fields and Connection location and no Glance request. Tests: connection_volume_image_create_test.go:TestConnectionCreateVolumeImageRecordDefaultsUploadAndExistingImage.

  • A non-object result, missing, null, non-string or blank image_id returns the upload evidence with an invalid-option error under the Cloud operation; a non-string configured format and invalid volume IDs fail before HTTP. Tests: connection_volume_image_create_test.go:TestConnectionCreateVolumeImageRecordFailuresKeepUploadEvidence.

Python/Go differences:

  • Python accepts a Volume Resource or ID and returns an Image Resource; Go takes a literal VolumeID and returns VolumeImageCreateResult separating the Cinder upload evidence from the ImageRecord.
  • The pinned Proxy accepts wait and timeout but never reads them, so Go omits them. Python sends any configured image_format value; Go requires a string or null configuration and a nonblank string image_id.

Usage examples

Examples use the surrounding guide's service object and context unless they declare a complete program. Python examples describe the pinned comparison API.

volume = conn.block_storage.find_volume("data", ignore_missing=False)
for volume in conn.block_storage.volumes(status="available"):
    print(volume.id, volume.size)
service, err := conn.BlockStorage(ctx)
if err != nil { return err }
volume, err := service.Volumes.Find(ctx, resource.Name("data"))
if err != nil { return err }
fmt.Println(volume.ID, volume.Size)

for volume, err := range service.Volumes.List(ctx,
    resource.WithStatus("available"), resource.WithPageSize(100)) {
    if err != nil { return err }
    fmt.Println(volume.ID, volume.Size)
}
ready, err := service.Volumes.Wait(ctx, resource.ID(volume.ID), "available",
    resource.WithTimeout(5*time.Minute))
if err != nil { return err }
fmt.Println(ready.Status)

if err := service.Volumes.Delete(ctx, resource.ID(volume.ID)); err != nil {
    return err
}

References

Documentation

Overview

Package blockstorage exposes Cinder v3 volumes through shared resource policies.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func GetVolumeAttachDevice

func GetVolumeAttachDevice[V VolumeAttachDeviceInput](volume V, serverID string) (*string, error)

GetVolumeAttachDevice returns a copied device from the first attachment whose current ServerID exactly equals serverID. It performs no lookup or HTTP. A matched empty device is a nonnil pointer; a matched null device and no match both return nil. Missing consumed fields and nil attachments are local errors. Owned nullable fields are authoritative; Body only distinguishes key omission. For manually constructed records with Body == nil, nil pointers mean null. Native models cannot distinguish omitted/null/empty strings: their current strings are used literally, including an empty ServerID or Device.

func GetVolumeAttachDeviceFields

func GetVolumeAttachDeviceFields(volume map[string]json.RawMessage, serverID string) (json.RawMessage, error)

GetVolumeAttachDeviceFields reads canonical attachments from supplied raw fields, without decoding the whole volume model. Only visited server_id and the first matched device are consumed. A returned nonnull JSON value is copied unchanged, including nonstrings: Python's typing.cast performs no conversion. Empty arrays, objects and strings are empty iterables; null attachments fail. All attachments JSON must be valid UTF-8 and syntactically valid, even when a later row's schema would never be visited. Unrelated volume fields are ignored.

func WaitForAvailable

func WaitForAvailable[T any](ctx context.Context, collection *resource.Collection[T], ref resource.Ref, options ...resource.WaitOption) (*T, error)

WaitForAvailable waits for available with Cinder's generic status defaults.

func WaitForDelete

func WaitForDelete[T any](ctx context.Context, collection *resource.Collection[T], ref resource.Ref, options ...resource.WaitOption) error

WaitForDelete observes deletion for up to 120 seconds by default. It does not send a delete request. Caller options apply last.

func WaitForState

func WaitForState[T any](ctx context.Context, collection *resource.Collection[T], ref resource.Ref, status string, options ...resource.WaitOption) (*T, error)

WaitForState polls an SDK collection with Cinder's exact error failure default, a two-second interval and no SDK timeout. Caller options apply last.

Types

type AttachVolumeCreatedResponse

type AttachVolumeCreatedResponse struct {
	Attachment *VolumeAttachmentInfo
	Body       json.RawMessage
	Header     http.Header
	StatusCode int
}

AttachVolumeCreatedResponse preserves an accepted Nova POST. Attachment is populated only after decoding and validating its canonical identities.

type AttachVolumeObservation

type AttachVolumeObservation struct {
	resource.Metadata
	ID          *string               `json:"id"`
	Name        *string               `json:"name"`
	Status      *string               `json:"status"`
	Attachments []*AttachVolumeRecord `json:"attachments"`
}

AttachVolumeObservation preserves a fresh Cinder volume response. Nullable canonical fields and Metadata.Body retain omission, null and extension JSON.

func (*AttachVolumeObservation) UnmarshalJSON

func (value *AttachVolumeObservation) UnmarshalJSON(data []byte) error

type AttachVolumeObservationResponse

type AttachVolumeObservationResponse struct {
	Volume     *AttachVolumeObservation
	Body       json.RawMessage
	Header     http.Header
	StatusCode int
}

AttachVolumeObservationResponse preserves one accepted Cinder GET, including raw evidence when body reading, decoding or a later guard fails.

type AttachVolumeOption

type AttachVolumeOption func(*AttachVolumeOpts) error

AttachVolumeOption configures a concrete policy once before resource lookup.

func WithAttachVolumeDevice

func WithAttachVolumeDevice(value string) AttachVolumeOption

WithAttachVolumeDevice selects a literal device name; empty omits the field.

func WithAttachVolumeOptions

func WithAttachVolumeOptions(value AttachVolumeOpts) AttachVolumeOption

WithAttachVolumeOptions snapshots and replaces the complete policy.

func WithAttachVolumeWait

func WithAttachVolumeWait(value bool) AttachVolumeOption

WithAttachVolumeWait controls the default post-creation wait.

func WithAttachVolumeWaitPolicy

func WithAttachVolumeWaitPolicy(value AttachVolumeWaitOpts) AttachVolumeOption

WithAttachVolumeWaitPolicy snapshots and replaces the wait policy.

type AttachVolumeOpts

type AttachVolumeOpts struct {
	Device     string
	Wait       *bool
	WaitPolicy AttachVolumeWaitOpts
}

AttachVolumeOpts owns the workflow policy. Wait nil selects the default true; Device empty lets Nova choose the device. Later options replace earlier values.

type AttachVolumeRecord

type AttachVolumeRecord struct {
	ID           *string                    `json:"id"`
	AttachmentID *string                    `json:"attachment_id"`
	VolumeID     *string                    `json:"volume_id"`
	ServerID     *string                    `json:"server_id"`
	Device       *string                    `json:"device"`
	HostName     *string                    `json:"host_name"`
	AttachedAt   *string                    `json:"attached_at"`
	Body         map[string]json.RawMessage `json:"-"`
}

AttachVolumeRecord describes one Cinder attachment association. Body keeps fields that a particular Cinder deployment adds without a caller adapter.

func (*AttachVolumeRecord) UnmarshalJSON

func (value *AttachVolumeRecord) UnmarshalJSON(data []byte) error

type AttachVolumeRequest

type AttachVolumeRequest struct {
	Server resource.Ref
	Volume resource.Ref
}

AttachVolumeRequest explicitly selects a server and volume by ID or name. Names resolve once before the workflow constructs its fixed request URLs.

type AttachVolumeResult

type AttachVolumeResult struct {
	ServerID, VolumeID string
	Checked            *AttachVolumeObservationResponse
	Created            *AttachVolumeCreatedResponse
	// Accepted proof only. Rejected status/body/headers remain in native error.
	LastAccepted *AttachVolumeObservationResponse
	Ready        *AttachVolumeObservation
}

AttachVolumeResult retains completed phases on failure. Created.StatusCode establishes an acknowledgement; Ready proves only Cinder's in-use status. LastAccepted is the latest accepted waiting GET, not a rejected HTTP response. Each response, decoded model and Ready owns its body and header independently.

func AttachVolume

func AttachVolume(ctx context.Context, computeClient, blockStorageClient *gophercloud.ServiceClient, input AttachVolumeRequest, options ...AttachVolumeOption) (*AttachVolumeResult, error)

AttachVolume checks a fresh available Cinder volume, creates its Nova attachment, and by default waits for a fresh Cinder in-use observation. It retains accepted phase responses on failure and never rolls back creation. The original providers supply live authentication while request settings and the concrete policy are captured before options or name lookup run.

type AttachVolumeWaitOpts

type AttachVolumeWaitOpts struct {
	Timeout, PollInterval *time.Duration
	FailureStates         []string
	ProgressCallback      func(int) error
}

AttachVolumeWaitOpts defaults to unlimited waiting, a two-second interval and exact, case-insensitive error failure detection. Timeout applies after creation. A non-nil empty FailureStates disables failure detection. ProgressCallback receives zero after nonterminal polls and may return an error to stop waiting.

type BackupMutationWaitOpts

type BackupMutationWaitOpts = cloudsnapshot.MutationWaitOptions

type BackupWaitTimeoutError

type BackupWaitTimeoutError = cloudbackup.WaitTimeoutError

BackupWaitTimeoutError unwraps context.DeadlineExceeded for SDK loop expiry.

type CinderVolumeAttachOption

type CinderVolumeAttachOption = cinderaction.DirectAttachOption

func WithCinderVolumeAttachHostName

func WithCinderVolumeAttachHostName(value string) CinderVolumeAttachOption

func WithCinderVolumeAttachInstance

func WithCinderVolumeAttachInstance(value string) CinderVolumeAttachOption

func WithCinderVolumeAttachOptions

func WithCinderVolumeAttachOptions(value CinderVolumeAttachOpts) CinderVolumeAttachOption

type CinderVolumeAttachOpts

type CinderVolumeAttachOpts = cinderaction.DirectAttachOptions

func PrepareCinderVolumeAttachOptions

func PrepareCinderVolumeAttachOptions(ctx context.Context, options ...CinderVolumeAttachOption) (CinderVolumeAttachOpts, error)

type CinderVolumeDetachOption

type CinderVolumeDetachOption = cinderaction.DirectDetachOption

func WithCinderVolumeDetachConnector

func WithCinderVolumeDetachConnector(value map[string]json.RawMessage) CinderVolumeDetachOption

func WithCinderVolumeDetachForce

func WithCinderVolumeDetachForce(value bool) CinderVolumeDetachOption

func WithCinderVolumeDetachOptions

func WithCinderVolumeDetachOptions(value CinderVolumeDetachOpts) CinderVolumeDetachOption

type CinderVolumeDetachOpts

type CinderVolumeDetachOpts = cinderaction.DirectDetachOptions

func PrepareCinderVolumeDetachOptions

func PrepareCinderVolumeDetachOptions(ctx context.Context, options ...CinderVolumeDetachOption) (CinderVolumeDetachOpts, error)

type CreateVolumeActionResponse

type CreateVolumeActionResponse struct {
	Body       json.RawMessage
	Header     http.Header
	StatusCode int
}

CreateVolumeActionResponse retains opaque accepted bootable action evidence.

type CreateVolumeAttributes

type CreateVolumeAttributes struct {
	Name, Description, AvailabilityZone, ConsistencyGroupID *string
	SnapshotID, SourceVolumeID, SourceReplica, ImageID      *string
	BackupID, VolumeType, GroupID, VolumeTypeID             *string
	Multiattach                                             *bool
	Metadata                                                map[string]string
	SchedulerHints, Fields                                  map[string]json.RawMessage
}

CreateVolumeAttributes provides common creation fields and known Cinder JSON attributes without a request builder. Nil omits a typed field; nonnil maps retain empty objects. Fields accepts pinned Volume attributes or wire names, with wire names taking precedence over aliases. Concrete fields override it.

type CreateVolumeBackupOption

type CreateVolumeBackupOption = cloudsnapshot.BackupCreateOption

func WithCreateVolumeBackupDescription

func WithCreateVolumeBackupDescription(value string) CreateVolumeBackupOption

func WithCreateVolumeBackupForce

func WithCreateVolumeBackupForce(value bool) CreateVolumeBackupOption

func WithCreateVolumeBackupIncremental

func WithCreateVolumeBackupIncremental(value bool) CreateVolumeBackupOption

func WithCreateVolumeBackupLocation

func WithCreateVolumeBackupLocation(value resource.CloudLocation) CreateVolumeBackupOption

func WithCreateVolumeBackupName

func WithCreateVolumeBackupName(value string) CreateVolumeBackupOption

func WithCreateVolumeBackupOptions

func WithCreateVolumeBackupOptions(value CreateVolumeBackupOpts) CreateVolumeBackupOption

func WithCreateVolumeBackupSnapshotID

func WithCreateVolumeBackupSnapshotID(value string) CreateVolumeBackupOption

func WithCreateVolumeBackupWait

func WithCreateVolumeBackupWait(value bool) CreateVolumeBackupOption

func WithCreateVolumeBackupWaitPolicy

func WithCreateVolumeBackupWaitPolicy(value BackupMutationWaitOpts) CreateVolumeBackupOption

type CreateVolumeBackupOpts

type CreateVolumeBackupOpts = cloudsnapshot.BackupCreateOptions

func PrepareCreateVolumeBackupOptions

func PrepareCreateVolumeBackupOptions(ctx context.Context, options ...CreateVolumeBackupOption) (CreateVolumeBackupOpts, error)

type CreateVolumeBackupRequest

type CreateVolumeBackupRequest struct{ VolumeID string }

type CreateVolumeBackupResult

type CreateVolumeBackupResult = cloudbackup.CreateResult

CreateVolumeBackupResult separates request-seeded logical stages and HTTP proof.

func CreateVolumeBackup

CreateVolumeBackup submits the fixed six-field cloud body with literal IDs. It defaults to force=false, incremental=false and wait=true. A nil timeout is unlimited; a cached available resource completes without a fetch.

type CreateVolumeOption

type CreateVolumeOption func(*CreateVolumeOpts) error

func WithCreateVolumeAttributes

func WithCreateVolumeAttributes(value CreateVolumeAttributes) CreateVolumeOption

func WithCreateVolumeBootable

func WithCreateVolumeBootable(value bool) CreateVolumeOption

func WithCreateVolumeDescription

func WithCreateVolumeDescription(value string) CreateVolumeOption

func WithCreateVolumeFields

func WithCreateVolumeFields(value map[string]json.RawMessage) CreateVolumeOption

func WithCreateVolumeMetadata

func WithCreateVolumeMetadata(value map[string]string) CreateVolumeOption

func WithCreateVolumeName

func WithCreateVolumeName(value string) CreateVolumeOption

func WithCreateVolumeOptions

func WithCreateVolumeOptions(value CreateVolumeOpts) CreateVolumeOption

func WithCreateVolumeSchedulerHints

func WithCreateVolumeSchedulerHints(value map[string]json.RawMessage) CreateVolumeOption

func WithCreateVolumeSnapshot

func WithCreateVolumeSnapshot(value string) CreateVolumeOption

func WithCreateVolumeType

func WithCreateVolumeType(value string) CreateVolumeOption

func WithCreateVolumeWait

func WithCreateVolumeWait(value bool) CreateVolumeOption

func WithCreateVolumeWaitPolicy

func WithCreateVolumeWaitPolicy(value CreateVolumeWaitOpts) CreateVolumeOption

type CreateVolumeOpts

type CreateVolumeOpts struct {
	Wait, Bootable *bool
	WaitPolicy     CreateVolumeWaitOpts
	Attributes     CreateVolumeAttributes
}

CreateVolumeOpts owns creation and completion policy. Wait nil selects true. Any nonnil Bootable forces waiting; only true adds a post-wait bootable action.

func PrepareCreateVolumeOptions

func PrepareCreateVolumeOptions(ctx context.Context, options ...CreateVolumeOption) (CreateVolumeOpts, error)

PrepareCreateVolumeOptions validates and owns all effective defaults locally. Original callbacks run once; the returned policy can be reapplied with the complete-policy factory without rerunning them or selecting any service.

type CreateVolumeRequest

type CreateVolumeRequest struct {
	Size  int
	Image *resource.Ref
}

CreateVolumeRequest supplies the required size and an optional explicit image selector. An image name resolves once; an image ID requires no Glance client or lookup. Size is sent unchanged for the Cinder server to validate.

type CreateVolumeResponse

type CreateVolumeResponse struct {
	Volume     *VolumeInfo
	Body       json.RawMessage
	Header     http.Header
	StatusCode int
}

CreateVolumeResponse retains an accepted creation or waiting response. Volume is populated after decoding; the creation model also passes canonical identity validation before assignment. A waiting model may expose a rejected identity.

type CreateVolumeResult

type CreateVolumeResult struct {
	VolumeID              string
	Created, LastAccepted *CreateVolumeResponse
	Ready                 *VolumeInfo
	BootableSet           *CreateVolumeActionResponse
}

CreateVolumeResult retains completed phases alongside subsequent errors. Ready is a fresh available observation; BootableSet acknowledges an action without rewriting Ready or certifying a later observed bootable value.

func CreateVolume

func CreateVolume(ctx context.Context, blockStorageClient, imageClient *gophercloud.ServiceClient, input CreateVolumeRequest, options ...CreateVolumeOption) (*CreateVolumeResult, error)

CreateVolume creates a Cinder volume and by default waits for a fresh available observation. A nonnil Bootable option forces waiting; only true sends a bootable action after readiness. Accepted responses remain available on later failures, and the workflow performs no compensating mutation. Every provided service source is captured before external options run.

type CreateVolumeSnapshotAttributes

type CreateVolumeSnapshotAttributes = cloudsnapshot.CreateAttributes

type CreateVolumeSnapshotOption

type CreateVolumeSnapshotOption = cloudsnapshot.CreateOption

func WithCreateVolumeSnapshotDescription

func WithCreateVolumeSnapshotDescription(value string) CreateVolumeSnapshotOption

func WithCreateVolumeSnapshotDisplayDescription

func WithCreateVolumeSnapshotDisplayDescription(value string) CreateVolumeSnapshotOption

func WithCreateVolumeSnapshotDisplayName

func WithCreateVolumeSnapshotDisplayName(value string) CreateVolumeSnapshotOption

func WithCreateVolumeSnapshotFields

func WithCreateVolumeSnapshotFields(value map[string]json.RawMessage) CreateVolumeSnapshotOption

func WithCreateVolumeSnapshotForce

func WithCreateVolumeSnapshotForce(value bool) CreateVolumeSnapshotOption

func WithCreateVolumeSnapshotLocation

func WithCreateVolumeSnapshotLocation(value resource.CloudLocation) CreateVolumeSnapshotOption

func WithCreateVolumeSnapshotName

func WithCreateVolumeSnapshotName(value string) CreateVolumeSnapshotOption

func WithCreateVolumeSnapshotWait

func WithCreateVolumeSnapshotWait(value bool) CreateVolumeSnapshotOption

type CreateVolumeSnapshotOpts

type CreateVolumeSnapshotOpts = cloudsnapshot.CreateOptions

func PrepareCreateVolumeSnapshotOptions

func PrepareCreateVolumeSnapshotOptions(ctx context.Context, options ...CreateVolumeSnapshotOption) (CreateVolumeSnapshotOpts, error)

type CreateVolumeSnapshotRequest

type CreateVolumeSnapshotRequest struct{ VolumeID string }

type CreateVolumeSnapshotResult

type CreateVolumeSnapshotResult = cloudsnapshot.CreateResult

CreateVolumeSnapshotResult separates logical merged stages and HTTP proof.

func CreateVolumeSnapshot

CreateVolumeSnapshot owns cloud-helper defaults and response merging. It defaults to force=false and wait=true; already-available creation skips GET.

type CreateVolumeWaitOpts

type CreateVolumeWaitOpts = AttachVolumeWaitOpts

CreateVolumeWaitOpts applies an optional timeout after creation acknowledgement.

type DeleteVolumeBackupOption

type DeleteVolumeBackupOption = cloudsnapshot.BackupDeleteOption

func WithDeleteVolumeBackupForce

func WithDeleteVolumeBackupForce(value bool) DeleteVolumeBackupOption

func WithDeleteVolumeBackupLocation

func WithDeleteVolumeBackupLocation(value resource.CloudLocation) DeleteVolumeBackupOption

func WithDeleteVolumeBackupOptions

func WithDeleteVolumeBackupOptions(value DeleteVolumeBackupOpts) DeleteVolumeBackupOption

func WithDeleteVolumeBackupWait

func WithDeleteVolumeBackupWait(value bool) DeleteVolumeBackupOption

func WithDeleteVolumeBackupWaitPolicy

func WithDeleteVolumeBackupWaitPolicy(value BackupMutationWaitOpts) DeleteVolumeBackupOption

type DeleteVolumeBackupOpts

type DeleteVolumeBackupOpts = cloudsnapshot.BackupDeleteOptions

func PrepareDeleteVolumeBackupOptions

func PrepareDeleteVolumeBackupOptions(ctx context.Context, options ...DeleteVolumeBackupOption) (DeleteVolumeBackupOpts, error)

type DeleteVolumeBackupRequest

type DeleteVolumeBackupRequest struct{ NameOrID string }

type DeleteVolumeBackupResult

type DeleteVolumeBackupResult = cloudbackup.DeleteResult

DeleteVolumeBackupResult retains lookup, acknowledgement and optional wait proof.

func DeleteVolumeBackup

DeleteVolumeBackup resolves exactly one Backup and defaults to wait=false. Force sends the source action's null payload at microversion3.64. Empty input and successful absence return false; rejected mutations remain errors.

type DeleteVolumeObservationResponse

type DeleteVolumeObservationResponse struct {
	Volume     *VolumeInfo
	Body       json.RawMessage
	Header     http.Header
	StatusCode int
}

DeleteVolumeObservationResponse retains an initial lookup or polling reply. A clean initial model passes canonical identity validation before assignment; a decoded waiting model may expose a rejected identity. HTTP404 has no model.

type DeleteVolumeOption

type DeleteVolumeOption func(*DeleteVolumeOpts) error

DeleteVolumeOption configures a concrete policy once before initial lookup.

func WithDeleteVolumeForce

func WithDeleteVolumeForce(value bool) DeleteVolumeOption

WithDeleteVolumeForce selects the force protocol for the selected Cinder microversion. It does not introduce cascade deletion or a fallback attempt.

func WithDeleteVolumeOptions

func WithDeleteVolumeOptions(value DeleteVolumeOpts) DeleteVolumeOption

WithDeleteVolumeOptions snapshots and replaces the complete policy.

func WithDeleteVolumeWait

func WithDeleteVolumeWait(value bool) DeleteVolumeOption

WithDeleteVolumeWait controls completion polling; initial lookup still runs.

func WithDeleteVolumeWaitPolicy

func WithDeleteVolumeWaitPolicy(value DeleteVolumeWaitOpts) DeleteVolumeOption

WithDeleteVolumeWaitPolicy snapshots and replaces the wait policy.

type DeleteVolumeOpts

type DeleteVolumeOpts struct {
	Wait       *bool
	Force      bool
	WaitPolicy DeleteVolumeWaitOpts
}

DeleteVolumeOpts owns the deletion policy. Wait nil selects true; Force false selects ordinary deletion. Later options replace earlier values.

func PrepareDeleteVolumeOptions

func PrepareDeleteVolumeOptions(ctx context.Context, options ...DeleteVolumeOption) (DeleteVolumeOpts, error)

PrepareDeleteVolumeOptions validates options locally, invokes original callbacks once, and returns an independently owned policy with defaults. Connection uses this before selecting its cached Cinder client.

type DeleteVolumeRequest

type DeleteVolumeRequest struct {
	Volume resource.Ref
}

DeleteVolumeRequest explicitly selects the Cinder volume by ID or name. Names resolve once before a fresh initial member GET confirms existence.

type DeleteVolumeResponse

type DeleteVolumeResponse struct {
	Body       json.RawMessage
	Header     http.Header
	StatusCode int
}

DeleteVolumeResponse retains opaque actual HTTP evidence. A 404 is only treated as logical absence after reading, Close and source/context guards succeed; an error may accompany this proof without completing deletion.

type DeleteVolumeResult

type DeleteVolumeResult struct {
	VolumeID              string
	Found, Deleted        bool
	Located, LastAccepted *DeleteVolumeObservationResponse
	Deletion, Absent      *DeleteVolumeResponse
	Ready                 *VolumeInfo
}

DeleteVolumeResult preserves initial lookup and mutation/wait evidence. Found marks a clean initial200 lookup. Deleted maps the cloud helper's final boolean: initially absent is false; a successful NoWait mutation is true but does not prove fresh absence. Ready is only an actual deleted-status model. Absent independently retains the latest initial/poll GET404, including on a later handling error; a mutation404 remains only in Deletion.

func DeleteVolume

func DeleteVolume(ctx context.Context, blockStorageClient *gophercloud.ServiceClient, input DeleteVolumeRequest, options ...DeleteVolumeOption) (*DeleteVolumeResult, error)

DeleteVolume confirms a volume exists, sends its selected normal or force deletion, and by default waits for a fresh disappearance or deleted status. Initial absence returns Found=false and Deleted=false with no mutation. A clean mutation 404 after lookup is tolerated before any requested completion wait. Cinder is required even without waiting. Accepted phase evidence is retained on later failure, without rollback or an SDK orchestration retry.

type DeleteVolumeSnapshotOption

type DeleteVolumeSnapshotOption = cloudsnapshot.DeleteOption

func WithDeleteVolumeSnapshotLocation

func WithDeleteVolumeSnapshotLocation(value resource.CloudLocation) DeleteVolumeSnapshotOption

func WithDeleteVolumeSnapshotWait

func WithDeleteVolumeSnapshotWait(value bool) DeleteVolumeSnapshotOption

type DeleteVolumeSnapshotOpts

type DeleteVolumeSnapshotOpts = cloudsnapshot.DeleteOptions

func PrepareDeleteVolumeSnapshotOptions

func PrepareDeleteVolumeSnapshotOptions(ctx context.Context, options ...DeleteVolumeSnapshotOption) (DeleteVolumeSnapshotOpts, error)

type DeleteVolumeSnapshotRequest

type DeleteVolumeSnapshotRequest struct{ NameOrID string }

type DeleteVolumeSnapshotResult

type DeleteVolumeSnapshotResult = cloudsnapshot.DeleteResult

DeleteVolumeSnapshotResult retains lookup, acknowledgement and wait phases.

func DeleteVolumeSnapshot

DeleteVolumeSnapshot resolves one exact snapshot and defaults to wait=false. An empty input is a service-free false result; DELETE404 is a terminal error.

type DeleteVolumeWaitOpts

type DeleteVolumeWaitOpts struct {
	Timeout, PollInterval *time.Duration
	ProgressCallback      func(int) error
}

DeleteVolumeWaitOpts defaults to unlimited waiting and two-second polling. Timeout limits the post-mutation wait; the caller context bounds all phases. ProgressCallback receives zero after nonterminal observations. Deletion has no failure-state policy: error and error_deleting may still become absent.

type DetachVolumeDeleteResponse

type DetachVolumeDeleteResponse struct {
	Body       json.RawMessage
	Header     http.Header
	StatusCode int
}

DetachVolumeDeleteResponse preserves an accepted Nova DELETE, including read, Close or post-send guard failures. Body is opaque bytes and need not be JSON.

type DetachVolumeOption

type DetachVolumeOption func(*DetachVolumeOpts) error

DetachVolumeOption configures a concrete policy once before resource lookup.

func WithDetachVolumeOptions

func WithDetachVolumeOptions(value DetachVolumeOpts) DetachVolumeOption

WithDetachVolumeOptions snapshots and replaces the complete policy.

func WithDetachVolumeWait

func WithDetachVolumeWait(value bool) DetachVolumeOption

WithDetachVolumeWait controls the default post-removal wait.

func WithDetachVolumeWaitPolicy

func WithDetachVolumeWaitPolicy(value DetachVolumeWaitOpts) DetachVolumeOption

WithDetachVolumeWaitPolicy snapshots and replaces the wait policy.

type DetachVolumeOpts

type DetachVolumeOpts struct {
	Wait       *bool
	WaitPolicy DetachVolumeWaitOpts
}

DetachVolumeOpts owns the removal policy. Wait nil selects the default true. Later options replace earlier values, including the complete wait subtree.

func PrepareDetachVolumeOptions

func PrepareDetachVolumeOptions(ctx context.Context, options ...DetachVolumeOption) (DetachVolumeOpts, error)

PrepareDetachVolumeOptions runs each option once and returns an independent, validated policy with all defaults filled in. Connection uses this before selecting services so an explicit-ID removal without waiting needs only Nova. The returned policy can be passed to WithDetachVolumeOptions without rerunning the original callbacks. Cancellation stops preparation between callbacks.

type DetachVolumeRequest

type DetachVolumeRequest struct {
	Server resource.Ref
	Volume resource.Ref
}

DetachVolumeRequest explicitly selects a server and volume by ID or name. Volume is the Cinder volume identity, not an attachment identity.

type DetachVolumeResult

type DetachVolumeResult struct {
	ServerID, VolumeID string
	Deleted            *DetachVolumeDeleteResponse
	LastAccepted       *AttachVolumeObservationResponse
	Ready              *AttachVolumeObservation
}

DetachVolumeResult retains acknowledged phases when waiting fails. Deleted proves Nova accepted removal; Ready proves Cinder reported available. It does not establish the absence of every attachment. LastAccepted keeps only the latest accepted waiting GET; rejected HTTP evidence remains in its error. Each raw response and decoded observation owns its body and header.

func DetachVolume

func DetachVolume(ctx context.Context, computeClient, blockStorageClient *gophercloud.ServiceClient, input DetachVolumeRequest, options ...DetachVolumeOption) (*DetachVolumeResult, error)

DetachVolume sends a Nova attachment DELETE and by default waits for a fresh Cinder available observation. A missing attachment is an error. It preserves accepted responses on later failures and performs no compensating mutation. A Cinder client may be nil when waiting is disabled and Volume is an ID; every provided client is captured and validated before options run.

type DetachVolumeWaitOpts

type DetachVolumeWaitOpts = AttachVolumeWaitOpts

DetachVolumeWaitOpts shares the attachment wait policy. Timeout applies only after Nova has acknowledged removal; nil or zero means unlimited waiting.

type ExportVolumeBackupRecordRequest

type ExportVolumeBackupRecordRequest struct{ BackupID string }

type ExportVolumeBackupRecordResult

type ExportVolumeBackupRecordResult = cloudbackup.ExportRecordResult

ExportVolumeBackupRecordResult retains an arbitrary owned JSON Value and independently owned physical Exported evidence, including on parse failure.

func ExportVolumeBackupRecord

ExportVolumeBackupRecord validates one complete UTF-8 JSON value of any shape. It preserves JSON literals and never retries an accepted response parse error.

type ExportVolumeBackupRequest

type ExportVolumeBackupRequest struct{ BackupID string }

type ExportVolumeBackupResult

type ExportVolumeBackupResult = cloudbackup.ExportResult

ExportVolumeBackupResult retains an admitted response on partial IO failure. A nonnil Exported response may accompany an error; success requires nil error.

func ExportVolumeBackup

ExportVolumeBackup sends a bodyless export GET for one literal backup ID. It preserves the selected microversion and performs no lookup or wait.

type GetVolumeBackupRequest

type GetVolumeBackupRequest struct{ NameOrID string }

type GetVolumeBackupResult

type GetVolumeBackupResult = cloudbackup.Result

GetVolumeBackupResult retains selected logical values and physical proof.

func GetVolumeBackup

GetVolumeBackup uses exact member-first identity lookup for omitted/null filters. Every explicit nonnull filter uses complete search and JSON first selection; normal absence returns a nil logical Value and Backup.

type GetVolumeByIDRequest

type GetVolumeByIDRequest struct{ ID string }

type GetVolumeIDRequest

type GetVolumeIDRequest struct{ NameOrID string }

type GetVolumeIDResult

type GetVolumeIDResult struct {
	ID       json.RawMessage
	Value    json.RawMessage
	Volume   *resource.RawResource
	Observed *GetVolumesPage
	Pages    []*GetVolumesPage
}

GetVolumeIDResult owns the response ID independently of the normalized Value, original Volume and admitted response evidence. ID is nil on absence or error; a found null or missing ID is the literal JSON null. Volume distinguishes that found resource from absence. Observed and Pages preserve actual lookup reads.

func GetVolumeID

func GetVolumeID(ctx context.Context, cinder *gophercloud.ServiceClient, input GetVolumeIDRequest, options ...VolumeReadOption) (*GetVolumeIDResult, error)

GetVolumeID performs ordinary exact name/ID lookup before returning the actual untyped response ID. A supplied ID never bypasses the lookup. Successful absence has a nil ID; a found resource with no ID has JSON null.

type GetVolumeLimitsOption

type GetVolumeLimitsOption = cloudlimits.Option

func WithGetVolumeLimitsLocation

func WithGetVolumeLimitsLocation(value resource.CloudLocation) GetVolumeLimitsOption

func WithGetVolumeLimitsOptions

func WithGetVolumeLimitsOptions(value GetVolumeLimitsOpts) GetVolumeLimitsOption

type GetVolumeLimitsOpts

type GetVolumeLimitsOpts = cloudlimits.Options

func PrepareGetVolumeLimitsOptions

func PrepareGetVolumeLimitsOptions(ctx context.Context, options ...GetVolumeLimitsOption) (GetVolumeLimitsOpts, error)

type GetVolumeLimitsPage

type GetVolumeLimitsPage = cloudlimits.Page

GetVolumeLimitsPage independently owns an admitted physical response.

type GetVolumeLimitsProjectResult

type GetVolumeLimitsProjectResult = cloudlimits.ProjectResult

GetVolumeLimitsProjectResult keeps project resolution and its original proof. SeededID identifies source-compatible member lookup ID fallback, not a field that the server supplied. Project always retains the actual raw row fields.

type GetVolumeLimitsRequest

type GetVolumeLimitsRequest = cloudlimits.Input

GetVolumeLimitsRequest optionally selects another project by exact name/ID. Empty NameOrID reads the authenticated project's unfiltered limits.

type GetVolumeLimitsResult

type GetVolumeLimitsResult = cloudlimits.Result

GetVolumeLimitsResult keeps project resolution, limits observation and the complete nullable logical view separately. RequestedProjectID is a query filter, not confirmed ownership of the limits returned by Cinder.

func GetVolumeLimits

func GetVolumeLimits(ctx context.Context, cinder, identity *gophercloud.ServiceClient, input GetVolumeLimitsRequest, options ...GetVolumeLimitsOption) (*GetVolumeLimitsResult, error)

GetVolumeLimits reads selected Cinder v3 limits. A nonempty project identity is resolved first through Identity v3 even if it resembles an ID. Empty input skips Identity and uses Cinder's unfiltered authenticated-project behavior. Selected microversions are preserved without a project-filter preflight.

type GetVolumeRequest

type GetVolumeRequest struct{ NameOrID string }

type GetVolumeResult

type GetVolumeResult struct {
	Value    json.RawMessage
	Volume   *resource.RawResource
	Observed *GetVolumesPage
	Pages    []*GetVolumesPage
}

GetVolumeResult distinguishes absent/null Value from selected false, zero or empty string. Volume is an actual source row only for ordinary selection. Observed preserves an admitted member GET; Pages preserve list responses.

func GetVolume

GetVolume uses shared GET-first exact identity lookup when filters are omitted or null. Every explicit nonnull filter uses full SearchVolumes and Python's outer truthiness, len, index-0 selection on its arbitrary JSON result.

func GetVolumeByID

func GetVolumeByID(ctx context.Context, cinder *gophercloud.ServiceClient, input GetVolumeByIDRequest, options ...VolumeReadOption) (*GetVolumeResult, error)

GetVolumeByID performs one logical member GET, without name search or list fallback. Rejected statuses including 400/403/404 remain errors. The ID must be one unescaped UTF-8 URL path segment without whitespace or controls.

type GetVolumeSnapshotByIDRequest

type GetVolumeSnapshotByIDRequest struct{ ID string }

type GetVolumeSnapshotRequest

type GetVolumeSnapshotRequest struct{ NameOrID string }

type GetVolumeSnapshotResult

type GetVolumeSnapshotResult = cloudsnapshot.Result

GetVolumeSnapshotResult keeps logical selection and current physical proof separately, without creating server fields for a source-seeded missing ID.

func GetVolumeSnapshot

GetVolumeSnapshot uses exact member-first identity lookup for omitted/null filters. Every explicit nonnull filter uses complete search and JSON first selection; normal absence returns a nil logical Value and Snapshot.

func GetVolumeSnapshotByID

GetVolumeSnapshotByID performs one logical bodyless member GET, retaining rejected statuses as errors without fallback. ID is one unescaped UTF-8 URL path segment. A missing response ID is seeded only in the normalized Value.

type GetVolumeTypeAccessRequest

type GetVolumeTypeAccessRequest struct{ NameOrID string }

type GetVolumeTypeAccessResult

type GetVolumeTypeAccessResult struct {
	Resolved *GetVolumeTypeResult
	TypeID   string
	Value    json.RawMessage
	Accesses []*resource.RawResource
	Observed *VolumeTypesPage
}

GetVolumeTypeAccessResult keeps lookup and access response evidence separate. Value preserves any JSON value; a missing volume_type_access field gives []. Accesses is an optional owned projection when every array item is an object. It adds no descriptors, location, project validation or pagination.

func GetVolumeTypeAccess

GetVolumeTypeAccess resolves the type, then reads its access response once. The source field is untyped JSON; advertised links never trigger pagination.

type GetVolumeTypeRequest

type GetVolumeTypeRequest struct{ NameOrID string }

type GetVolumeTypeResult

type GetVolumeTypeResult struct {
	Value    json.RawMessage
	Type     *resource.RawResource
	Observed *VolumeTypesPage
	Pages    []*VolumeTypesPage
}

GetVolumeTypeResult distinguishes absence from selected false, zero and empty string. Type belongs to an actual ordinary source row; proof survives errors.

func GetVolumeType

GetVolumeType uses exact GET-first lookup with is_public=none when filters are omitted/null. Every nonnull filter uses full SearchVolumeTypes selection.

type GetVolumesOption

type GetVolumesOption func(*GetVolumesOpts) error

func WithGetVolumesOptions

func WithGetVolumesOptions(value GetVolumesOpts) GetVolumesOption

func WithGetVolumesServerFields

func WithGetVolumesServerFields(fields map[string]json.RawMessage) GetVolumesOption

type GetVolumesOpts

type GetVolumesOpts struct{ ServerFields *map[string]json.RawMessage }

GetVolumesOpts can preserve nullable or arbitrary JSON server identity. A nil pointer uses request.ServerID; a pointer to a nil map is a missing id. Only consumed id is validated, after all volume pages have been read.

func PrepareGetVolumesOptions

func PrepareGetVolumesOptions(ctx context.Context, options ...GetVolumesOption) (GetVolumesOpts, error)

PrepareGetVolumesOptions applies original callbacks once without service I/O.

type GetVolumesPage

type GetVolumesPage struct {
	Body       json.RawMessage
	Header     http.Header
	StatusCode int
}

GetVolumesPage preserves one admitted physical list response independently.

type GetVolumesRequest

type GetVolumesRequest struct{ ServerID string }

GetVolumesRequest supplies a literal server ID for local comparison.

type GetVolumesResult

type GetVolumesResult struct {
	Volumes []*resource.RawResource
	Pages   []*GetVolumesPage
}

GetVolumesResult only populates Volumes after complete list and selection success. Matching occurrences share their source row pointer deliberately; use RawResource.Clone for an independent copy. Pages remain available on error.

func GetVolumes

func GetVolumes(ctx context.Context, cinder *gophercloud.ServiceClient, input GetVolumesRequest, options ...GetVolumesOption) (*GetVolumesResult, error)

GetVolumes reads the complete detailed Cinder volume list, then selects every attachment occurrence matching the supplied server identity. Device values do not affect selection. Duplicate occurrences intentionally share one owned volume pointer. Volumes is assigned only after complete success; actual page evidence remains available on an error. The helper performs no Nova lookup, per-volume GET, refresh, wait or orchestration retry.

type ImportVolumeBackupRequest

type ImportVolumeBackupRequest struct {
	BackupService string
	BackupURL     string
}

type ImportVolumeBackupResult

type ImportVolumeBackupResult = cloudbackup.ImportResult

func ImportVolumeBackup

ImportVolumeBackup imports an opaque record and returns an owned Backup view.

type ListVolumeBackupsResult

type ListVolumeBackupsResult = cloudbackup.ListResult

ListVolumeBackupsResult publishes a complete logical list and its raw rows.

func ListVolumeBackups

func ListVolumeBackups(ctx context.Context, cinder *gophercloud.ServiceClient, options ...VolumeBackupListOption) (*ListVolumeBackupsResult, error)

ListVolumeBackups returns the complete owned cloud view. Detailed and pagination default to true; typed controls override raw dictionary controls.

type ListVolumeSnapshotsResult

type ListVolumeSnapshotsResult = cloudsnapshot.ListResult

ListVolumeSnapshotsResult commits an owned complete list after success.

func ListVolumeSnapshots

func ListVolumeSnapshots(ctx context.Context, cinder *gophercloud.ServiceClient, options ...VolumeSnapshotListOption) (*ListVolumeSnapshotsResult, error)

ListVolumeSnapshots returns the complete owned cloud view. Detailed and pagination default to true; typed controls override raw dictionary controls.

type ListVolumeTypesResult

type ListVolumeTypesResult struct {
	Value json.RawMessage
	Types []*resource.RawResource
	Pages []*VolumeTypesPage
}

ListVolumeTypesResult commits a full normalized array and wire rows only after complete success. Actual admitted Pages remain available on errors.

func ListVolumeTypes

func ListVolumeTypes(ctx context.Context, cinder *gophercloud.ServiceClient, options ...VolumeTypeReadOption) (*ListVolumeTypesResult, error)

ListVolumeTypes materializes the complete type list with no visibility query or extra-spec enrichment. Each row is normalized before pagination continues.

type ListVolumesResult

type ListVolumesResult struct {
	Value   json.RawMessage
	Volumes []*resource.RawResource
	Pages   []*GetVolumesPage
}

ListVolumesResult commits a full owned normalized array and original wire rows only after success. Pages preserve actual admitted responses on errors.

func ListVolumes

func ListVolumes(ctx context.Context, cinder *gophercloud.ServiceClient, options ...VolumeReadOption) (*ListVolumesResult, error)

ListVolumes reads the complete Cinder v3 detailed list and eagerly normalizes every row. No identifier/filter, cache toggle or all-project query is added.

type ResetVolumeBackupStatusRequest

type ResetVolumeBackupStatusRequest struct{ BackupID, Status string }

type RestoreVolumeBackupOption

type RestoreVolumeBackupOption = cloudsnapshot.BackupRestoreOption

func WithRestoreVolumeBackupLocation

func WithRestoreVolumeBackupLocation(value resource.CloudLocation) RestoreVolumeBackupOption

func WithRestoreVolumeBackupName

func WithRestoreVolumeBackupName(value string) RestoreVolumeBackupOption

func WithRestoreVolumeBackupSeed

func WithRestoreVolumeBackupSeed(value json.RawMessage) RestoreVolumeBackupOption

func WithRestoreVolumeBackupVolumeID

func WithRestoreVolumeBackupVolumeID(value string) RestoreVolumeBackupOption

type RestoreVolumeBackupOpts

type RestoreVolumeBackupOpts = cloudsnapshot.BackupRestoreOptions

func PrepareRestoreVolumeBackupOptions

func PrepareRestoreVolumeBackupOptions(ctx context.Context, options ...RestoreVolumeBackupOption) (RestoreVolumeBackupOpts, error)

type RestoreVolumeBackupRequest

type RestoreVolumeBackupRequest struct{ BackupID string }

type SearchVolumeBackupsRequest

type SearchVolumeBackupsRequest struct{ NameOrID string }

type SearchVolumeBackupsResult

type SearchVolumeBackupsResult = cloudbackup.SearchResult

SearchVolumeBackupsResult separates expression output from raw rows.

func SearchVolumeBackups

SearchVolumeBackups completes a queryless detailed list before applying exact/glob identity, recursive mapping or a JSON expression. Projection has no invented association with a raw server resource.

type SearchVolumeSnapshotsRequest

type SearchVolumeSnapshotsRequest struct{ NameOrID string }

type SearchVolumeSnapshotsResult

type SearchVolumeSnapshotsResult = cloudsnapshot.SearchResult

SearchVolumeSnapshotsResult also supports arbitrary JSON expressions.

func SearchVolumeSnapshots

SearchVolumeSnapshots completes a queryless detailed list before applying exact/glob identity, recursive mapping or a JSON expression. Projection has no invented association with a raw server resource.

type SearchVolumeTypesRequest

type SearchVolumeTypesRequest struct{ NameOrID string }

type SearchVolumeTypesResult

type SearchVolumeTypesResult struct {
	Value json.RawMessage
	Types []*resource.RawResource
	Pages []*VolumeTypesPage
}

SearchVolumeTypesResult may contain any JSON expression result. Types retains original rows only for ordinary selection, without invented associations.

func SearchVolumeTypes

SearchVolumeTypes fully lists and normalizes types before exact/glob identity selection and lazy mapping or JMESPath filters. It adds no server filter query.

type SearchVolumesRequest

type SearchVolumesRequest struct{ NameOrID string }

type SearchVolumesResult

type SearchVolumesResult struct {
	Value   json.RawMessage
	Volumes []*resource.RawResource
	Pages   []*GetVolumesPage
}

SearchVolumesResult owns the complete normalized result. Value can be any JSON shape. Volumes carries original wire rows only for ordinary selection; an expression never fabricates a source-row association. Pages survive errors.

func SearchVolumes

SearchVolumes materializes and normalizes Cinder's complete detail list, then applies exact/glob identity and lazy dictionary or JMESPath filters. All row conversions precede continuation and local filter evaluation.

type Service

type Service struct {
	API     *blockstorageapi.Service
	Volumes *resource.Collection[Volume]
	// contains filtered or unexported fields
}

func New

func New(client *gophercloud.ServiceClient) *Service

func (*Service) RawClient

func (s *Service) RawClient() *gophercloud.ServiceClient

type SetVolumeBootableOption

type SetVolumeBootableOption func(*SetVolumeBootableOpts) error

func WithSetVolumeBootable

func WithSetVolumeBootable(value bool) SetVolumeBootableOption

func WithSetVolumeBootableLocation

func WithSetVolumeBootableLocation(value resource.CloudLocation) SetVolumeBootableOption

func WithSetVolumeBootableOptions

func WithSetVolumeBootableOptions(value SetVolumeBootableOpts) SetVolumeBootableOption

type SetVolumeBootableOpts

type SetVolumeBootableOpts struct {
	Bootable *bool
	Location *resource.CloudLocation
}

SetVolumeBootableOpts owns the flag and complete location. Nil Bootable selects true; explicit false remains false in the action body.

func PrepareSetVolumeBootableOptions

func PrepareSetVolumeBootableOptions(ctx context.Context, options ...SetVolumeBootableOption) (SetVolumeBootableOpts, error)

PrepareSetVolumeBootableOptions runs originals once without service selection.

type SetVolumeBootableRequest

type SetVolumeBootableRequest struct{ NameOrID string }

type SetVolumeBootableResult

type SetVolumeBootableResult struct {
	Resolved *GetVolumeResult
	VolumeID string
	Applied  *VolumeMutationPage
}

SetVolumeBootableResult retains exact lookup and opaque action evidence; the workflow performs no refresh, wait, or completion verification.

func SetVolumeBootable

SetVolumeBootable resolves once through ordinary lookup and sends one opaque action with default true or explicit false. There is no wait or refresh.

type SnapshotMutationWaitOpts

type SnapshotMutationWaitOpts = cloudsnapshot.MutationWaitOptions

type SnapshotWaitTimeoutError

type SnapshotWaitTimeoutError = cloudsnapshot.WaitTimeoutError

SnapshotWaitTimeoutError unwraps context.DeadlineExceeded for SDK wait expiry.

type UpdateVolumeAttributes

type UpdateVolumeAttributes struct {
	Name, Description *string
	Metadata          map[string]string
	Fields            map[string]json.RawMessage
}

UpdateVolumeAttributes supplies common fields and every pinned Volume Body attribute/wire alias without a builder. Concrete fields override Fields. Metadata nil omits it; a nonnil empty map clears it. Fields represents null. Unknown attributes are ignored; identity and runtime route controls are rejected.

type UpdateVolumeOption

type UpdateVolumeOption func(*UpdateVolumeOpts) error

func WithUpdateVolumeAttributes

func WithUpdateVolumeAttributes(value UpdateVolumeAttributes) UpdateVolumeOption

func WithUpdateVolumeDescription

func WithUpdateVolumeDescription(value string) UpdateVolumeOption

func WithUpdateVolumeFields

func WithUpdateVolumeFields(value map[string]json.RawMessage) UpdateVolumeOption

func WithUpdateVolumeLocation

func WithUpdateVolumeLocation(value resource.CloudLocation) UpdateVolumeOption

func WithUpdateVolumeMetadata

func WithUpdateVolumeMetadata(value map[string]string) UpdateVolumeOption

func WithUpdateVolumeName

func WithUpdateVolumeName(value string) UpdateVolumeOption

func WithUpdateVolumeOptions

func WithUpdateVolumeOptions(value UpdateVolumeOpts) UpdateVolumeOption

type UpdateVolumeOpts

type UpdateVolumeOpts struct {
	Attributes UpdateVolumeAttributes
	Location   *resource.CloudLocation
}

func PrepareUpdateVolumeOptions

func PrepareUpdateVolumeOptions(ctx context.Context, options ...UpdateVolumeOption) (UpdateVolumeOpts, error)

PrepareUpdateVolumeOptions validates and owns kwargs before lookup/selection.

type UpdateVolumeRequest

type UpdateVolumeRequest struct{ NameOrID string }

type UpdateVolumeResult

type UpdateVolumeResult struct {
	Resolved *GetVolumeResult
	VolumeID string
	Applied  *VolumeMutationPage
	Volume   *resource.RawResource
	Value    json.RawMessage
}

UpdateVolumeResult retains lookup and mutation evidence independently. Volume/Value commit only after a complete owned merge and descriptor view. Applied is nil on a successful local no-op because no PUT was sent.

func UpdateVolume

UpdateVolume resolves once, prepares the complete known raw attribute delta, skips an unchanged commit, and merges a partial server response into owned prior/request state. It performs no refresh, wait, or rollback.

type Volume

type Volume = volumes.Volume

type VolumeActionPage

type VolumeActionPage = rest.Response

VolumeActionPage retains an actual admitted HTTP response.

type VolumeActionRequest

type VolumeActionRequest struct{ VolumeID string }

VolumeActionRequest uses one explicit ID; it never performs name lookup.

type VolumeActionResult

type VolumeActionResult = cinderaction.Result

VolumeActionResult keeps discovery separate from the opaque action acknowledgement. Completed means Read/Close/source validation succeeded, without a state poll.

func AttachCinderVolume

func AttachCinderVolume(ctx context.Context, client *gophercloud.ServiceClient, input VolumeActionRequest, mountpoint string, options ...CinderVolumeAttachOption) (*VolumeActionResult, error)

AttachCinderVolume sends the direct Cinder action, without Nova or state wait.

func CompleteVolumeExtend

func CompleteVolumeExtend(ctx context.Context, client *gophercloud.ServiceClient, input VolumeActionRequest, options ...VolumeExtendCompletionOption) (*VolumeActionResult, error)

CompleteVolumeExtend defaults error to false and returns acknowledgement only.

func DetachCinderVolume

func DetachCinderVolume(ctx context.Context, client *gophercloud.ServiceClient, input VolumeActionRequest, attachmentID string, options ...CinderVolumeDetachOption) (*VolumeActionResult, error)

DetachCinderVolume defaults force to false and reports acknowledgement only.

func ExtendVolume

func ExtendVolume(ctx context.Context, client *gophercloud.ServiceClient, input VolumeActionRequest, newSize int) (*VolumeActionResult, error)

ExtendVolume sends the supplied machine integer, including zero or negative.

func RetypeVolume

func RetypeVolume(ctx context.Context, client *gophercloud.ServiceClient, input VolumeActionRequest, newType string, options ...VolumeRetypeOption) (*VolumeActionResult, error)

RetypeVolume takes the literal new type without a type lookup or enum check.

func RevertVolumeToSnapshot

func RevertVolumeToSnapshot(ctx context.Context, client *gophercloud.ServiceClient, input VolumeActionRequest, snapshotID string) (*VolumeActionResult, error)

RevertVolumeToSnapshot sends a literal snapshot ID after checking support for microversion 3.40. It does not look up the snapshot or poll volume state.

func SetVolumeBootableStatus

func SetVolumeBootableStatus(ctx context.Context, client *gophercloud.ServiceClient, input VolumeActionRequest, bootable bool) (*VolumeActionResult, error)

SetVolumeBootableStatus uses an explicit ID and required bool; no name lookup.

func SetVolumeImageMetadata

func SetVolumeImageMetadata(ctx context.Context, client *gophercloud.ServiceClient, input VolumeActionRequest, options ...VolumeImageMetadataOption) (*VolumeActionResult, error)

SetVolumeImageMetadata sends one action, including an empty metadata object. It does not fetch, merge locally, refresh a model or wait for backend state.

func SetVolumeReadonly

func SetVolumeReadonly(ctx context.Context, client *gophercloud.ServiceClient, input VolumeActionRequest, options ...VolumeReadonlyOption) (*VolumeActionResult, error)

SetVolumeReadonly defaults to true; WithVolumeReadonly(false) sends false.

func UnmanageVolume

UnmanageVolume acknowledges the SDK null action. Backend data removal and Cinder state completion are not performed or verified by this helper.

type VolumeAttachDeviceInput

type VolumeAttachDeviceInput interface {
	*AttachVolumeObservation | *VolumeInfo | *volumesv2.Volume | *volumesv3.Volume
}

VolumeAttachDeviceInput accepts existing Cinder representations without a caller adapter. It is a closed constraint for GetVolumeAttachDevice.

type VolumeAttachmentInfo

type VolumeAttachmentInfo struct {
	resource.Metadata
	ID                  *string `json:"id"`
	Device              *string `json:"device"`
	VolumeID            *string `json:"volumeId"`
	ServerID            *string `json:"serverId"`
	Tag                 *string `json:"tag"`
	AttachmentID        *string `json:"attachment_id"`
	BDMID               *string `json:"bdm_uuid"`
	DeleteOnTermination *bool   `json:"delete_on_termination"`
}

VolumeAttachmentInfo describes Nova's accepted attachment response. Wire names volumeId/serverId belong to Nova; attachment_id and bdm_uuid are optional.

func (*VolumeAttachmentInfo) UnmarshalJSON

func (value *VolumeAttachmentInfo) UnmarshalJSON(data []byte) error

type VolumeBackupExportResponse

type VolumeBackupExportResponse = cloudbackup.ExportResponse

VolumeBackupExportResponse owns opaque accepted body/header/status evidence. The body is not decoded as a BackupRecord, JSON, UTF-8, or base64 data.

type VolumeBackupListOption

type VolumeBackupListOption = cloudsnapshot.ListOption

func WithVolumeBackupListAllowUnknownParams

func WithVolumeBackupListAllowUnknownParams(value bool) VolumeBackupListOption

func WithVolumeBackupListConflictingAttrs

func WithVolumeBackupListConflictingAttrs(value json.RawMessage) VolumeBackupListOption

func WithVolumeBackupListDetailed

func WithVolumeBackupListDetailed(value bool) VolumeBackupListOption

func WithVolumeBackupListExpression

func WithVolumeBackupListExpression(value string) VolumeBackupListOption

func WithVolumeBackupListFilters

func WithVolumeBackupListFilters(value json.RawMessage) VolumeBackupListOption

func WithVolumeBackupListHeaders

func WithVolumeBackupListHeaders(value map[string]string) VolumeBackupListOption

func WithVolumeBackupListLocation

func WithVolumeBackupListLocation(value resource.CloudLocation) VolumeBackupListOption

func WithVolumeBackupListMaxItems

func WithVolumeBackupListMaxItems(value int) VolumeBackupListOption

func WithVolumeBackupListMicroversion

func WithVolumeBackupListMicroversion(value string) VolumeBackupListOption

func WithVolumeBackupListOptions

func WithVolumeBackupListOptions(value VolumeBackupListOpts) VolumeBackupListOption

func WithVolumeBackupListPagination

func WithVolumeBackupListPagination(value bool) VolumeBackupListOption

type VolumeBackupListOpts

type VolumeBackupListOpts = cloudsnapshot.ListOptions

VolumeBackupListOpts owns backup list policy; omission retains source defaults.

func PrepareVolumeBackupListOptions

func PrepareVolumeBackupListOptions(ctx context.Context, options ...VolumeBackupListOption) (VolumeBackupListOpts, error)

PrepareVolumeBackupListOptions captures original callbacks once without service I/O.

type VolumeBackupMutationPage

type VolumeBackupMutationPage = cloudbackup.MutationPage

VolumeBackupMutationPage owns actual mutation or polling body/header/status.

type VolumeBackupSearchOption

type VolumeBackupSearchOption = cloudsnapshot.SearchOption

func WithVolumeBackupSearchExpression

func WithVolumeBackupSearchExpression(value string) VolumeBackupSearchOption

func WithVolumeBackupSearchFilters

func WithVolumeBackupSearchFilters(value json.RawMessage) VolumeBackupSearchOption

func WithVolumeBackupSearchLocation

func WithVolumeBackupSearchLocation(value resource.CloudLocation) VolumeBackupSearchOption

func WithVolumeBackupSearchOptions

func WithVolumeBackupSearchOptions(value VolumeBackupSearchOpts) VolumeBackupSearchOption

type VolumeBackupSearchOpts

type VolumeBackupSearchOpts = cloudsnapshot.SearchOptions

VolumeBackupSearchOpts owns backup search policy; omission retains source defaults.

func PrepareVolumeBackupSearchOptions

func PrepareVolumeBackupSearchOptions(ctx context.Context, options ...VolumeBackupSearchOption) (VolumeBackupSearchOpts, error)

PrepareVolumeBackupSearchOptions captures original callbacks once without service I/O.

type VolumeBackupSelectionError

type VolumeBackupSelectionError = cloudbackup.SelectionError

type VolumeBackupsPage

type VolumeBackupsPage = cloudbackup.Page

VolumeBackupsPage owns an actual admitted backup response.

type VolumeExistsRequest

type VolumeExistsRequest struct{ NameOrID string }

type VolumeExistsResult

type VolumeExistsResult struct {
	Exists   *bool
	Value    json.RawMessage
	Volume   *resource.RawResource
	Observed *GetVolumesPage
	Pages    []*GetVolumesPage
}

VolumeExistsResult distinguishes a completed true/false lookup from failure. Exists is nil on an error. Value/Volume describe an actual found resource; Observed and Pages preserve the member/list responses used by the lookup.

func VolumeExists

func VolumeExists(ctx context.Context, cinder *gophercloud.ServiceClient, input VolumeExistsRequest, options ...VolumeReadOption) (*VolumeExistsResult, error)

VolumeExists uses ordinary exact identity lookup. False means successful absence; ambiguity, transport, schema and cancellation errors keep Exists nil. A nonnil resource is present even when its original body is an empty object.

type VolumeExtendCompletionOption

type VolumeExtendCompletionOption = cinderaction.ExtendCompletionOption

func WithVolumeExtendCompletionError

func WithVolumeExtendCompletionError(value bool) VolumeExtendCompletionOption

type VolumeExtendCompletionOpts

type VolumeExtendCompletionOpts = cinderaction.ExtendCompletionOptions

func PrepareVolumeExtendCompletionOptions

func PrepareVolumeExtendCompletionOptions(ctx context.Context, options ...VolumeExtendCompletionOption) (VolumeExtendCompletionOpts, error)

type VolumeImageMetadataDeleteOption

type VolumeImageMetadataDeleteOption = cinderaction.ImageMetadataDeleteOption

func WithVolumeImageMetadataDeleteAll

func WithVolumeImageMetadataDeleteAll() VolumeImageMetadataDeleteOption

WithVolumeImageMetadataDeleteAll restores the default all-keys intent.

func WithVolumeImageMetadataDeleteKeys

func WithVolumeImageMetadataDeleteKeys(keys ...string) VolumeImageMetadataDeleteOption

WithVolumeImageMetadataDeleteKeys preserves order and duplicates. No keys selects an explicit no-op, including when expanded from a nil slice.

type VolumeImageMetadataDeleteResult

type VolumeImageMetadataDeleteResult = cinderaction.ImageMetadataDeleteResult

func DeleteVolumeImageMetadata

DeleteVolumeImageMetadata defaults to reading the current image metadata and deleting its sorted keys. Explicit keys preserve order and duplicates. The operation is a snapshot, stops on first failure and does not roll back.

type VolumeImageMetadataDeletion

type VolumeImageMetadataDeletion = cinderaction.ImageMetadataDeletion

type VolumeImageMetadataOption

type VolumeImageMetadataOption = cinderaction.ImageMetadataOption

func WithVolumeImageMetadata

func WithVolumeImageMetadata(value map[string]string) VolumeImageMetadataOption

WithVolumeImageMetadata replaces the metadata object with string values.

func WithVolumeImageMetadataOptions

func WithVolumeImageMetadataOptions(value VolumeImageMetadataOpts) VolumeImageMetadataOption

WithVolumeImageMetadataOptions replaces the entire owned policy.

func WithVolumeImageMetadataRaw

func WithVolumeImageMetadataRaw(value map[string]json.RawMessage) VolumeImageMetadataOption

WithVolumeImageMetadataRaw replaces the object with owned JSON values.

func WithVolumeImageMetadataValue

func WithVolumeImageMetadataValue(key, value string) VolumeImageMetadataOption

WithVolumeImageMetadataValue adds or replaces one string value.

type VolumeImageMetadataOpts

type VolumeImageMetadataOpts = cinderaction.ImageMetadataOptions

func PrepareVolumeImageMetadataOptions

func PrepareVolumeImageMetadataOptions(ctx context.Context, options ...VolumeImageMetadataOption) (VolumeImageMetadataOpts, error)

type VolumeImageMetadataResponse

type VolumeImageMetadataResponse = rest.Response

type VolumeImageUploadOption

type VolumeImageUploadOption = cinderaction.ImageUploadOption

func WithVolumeImageUploadContainerFormat

func WithVolumeImageUploadContainerFormat(value string) VolumeImageUploadOption

func WithVolumeImageUploadDiskFormat

func WithVolumeImageUploadDiskFormat(value string) VolumeImageUploadOption

func WithVolumeImageUploadForce

func WithVolumeImageUploadForce(value bool) VolumeImageUploadOption

func WithVolumeImageUploadOptions

func WithVolumeImageUploadOptions(value VolumeImageUploadOpts) VolumeImageUploadOption

func WithVolumeImageUploadProtected

func WithVolumeImageUploadProtected(value bool) VolumeImageUploadOption

func WithVolumeImageUploadVisibility

func WithVolumeImageUploadVisibility(value string) VolumeImageUploadOption

type VolumeImageUploadOpts

type VolumeImageUploadOpts = cinderaction.ImageUploadOptions

func PrepareVolumeImageUploadOptions

func PrepareVolumeImageUploadOptions(ctx context.Context, options ...VolumeImageUploadOption) (VolumeImageUploadOpts, error)

type VolumeImageUploadResponse

type VolumeImageUploadResponse = rest.Response

type VolumeImageUploadResult

type VolumeImageUploadResult = cinderaction.ImageUploadResult

func UploadVolumeToImage

func UploadVolumeToImage(ctx context.Context, client *gophercloud.ServiceClient, input VolumeActionRequest, imageName string, options ...VolumeImageUploadOption) (*VolumeImageUploadResult, error)

UploadVolumeToImage asks Cinder to export a volume to Glance. Force defaults false; formats are omitted by default. Visibility or Protected presence, including empty/false, requires advertised microversion 3.1 support. The returned Upload JSON can have any shape and does not prove image availability.

type VolumeInfo

type VolumeInfo struct {
	resource.Metadata
	ID                 *string                    `json:"id"`
	Name               *string                    `json:"name"`
	Status             *string                    `json:"status"`
	Description        *string                    `json:"description"`
	AvailabilityZone   *string                    `json:"availability_zone"`
	VolumeType         *string                    `json:"volume_type"`
	VolumeTypeID       *string                    `json:"volume_type_id"`
	SnapshotID         *string                    `json:"snapshot_id"`
	SourceVolumeID     *string                    `json:"source_volid"`
	BackupID           *string                    `json:"backup_id"`
	ImageID            *string                    `json:"imageRef"`
	GroupID            *string                    `json:"group_id"`
	ConsistencyGroupID *string                    `json:"consistencygroup_id"`
	Size               *int                       `json:"size"`
	IsBootable         *bool                      `json:"bootable"`
	IsEncrypted        *bool                      `json:"encrypted"`
	Multiattach        *bool                      `json:"multiattach"`
	SharedTargets      *bool                      `json:"shared_targets"`
	ConsumesQuota      *bool                      `json:"consumes_quota"`
	MetadataFields     map[string]json.RawMessage `json:"metadata"`
	Attachments        []*AttachVolumeRecord      `json:"attachments"`
}

VolumeInfo preserves an SDK-owned Cinder volume representation. Nullable canonical fields are distinct from raw response fields in Metadata.Body; metadata values and unknown extensions retain their original JSON precision.

func (*VolumeInfo) UnmarshalJSON

func (value *VolumeInfo) UnmarshalJSON(data []byte) error

UnmarshalJSON reads only exact canonical keys and commits a fully decoded temporary value. Wrong known types never leave a partially changed model.

type VolumeMigrationCompletionOption

type VolumeMigrationCompletionOption = cinderaction.MigrationCompletionOption

func WithVolumeMigrationCompletionError

func WithVolumeMigrationCompletionError(value bool) VolumeMigrationCompletionOption

type VolumeMigrationOption

type VolumeMigrationOption = cinderaction.MigrationOption

func WithVolumeMigrationCluster

func WithVolumeMigrationCluster(value string) VolumeMigrationOption

func WithVolumeMigrationForceHostCopy

func WithVolumeMigrationForceHostCopy(value bool) VolumeMigrationOption

func WithVolumeMigrationHost

func WithVolumeMigrationHost(value string) VolumeMigrationOption

func WithVolumeMigrationLockVolume

func WithVolumeMigrationLockVolume(value bool) VolumeMigrationOption

func WithVolumeMigrationOptions

func WithVolumeMigrationOptions(value VolumeMigrationOpts) VolumeMigrationOption

type VolumeMigrationOpts

type VolumeMigrationOpts = cinderaction.MigrationOptions

func PrepareVolumeMigrationOptions

func PrepareVolumeMigrationOptions(ctx context.Context, options ...VolumeMigrationOption) (VolumeMigrationOpts, error)

type VolumeMutationPage

type VolumeMutationPage struct {
	Body       json.RawMessage
	Header     http.Header
	StatusCode int
}

VolumeMutationPage owns one actual admitted mutation response. It is an acknowledgement, without a changed/completed flag or inferred cloud effect.

type VolumeReadOption

type VolumeReadOption func(*VolumeReadOpts) error

func WithVolumeReadLocation

func WithVolumeReadLocation(value resource.CloudLocation) VolumeReadOption

func WithVolumeReadOptions

func WithVolumeReadOptions(value VolumeReadOpts) VolumeReadOption

type VolumeReadOpts

type VolumeReadOpts struct{ Location *resource.CloudLocation }

VolumeReadOpts supplies an owned complete location override to ordinary volume reads. Omission uses recorded provider scope without extra auth I/O.

func PrepareVolumeReadOptions

func PrepareVolumeReadOptions(ctx context.Context, options ...VolumeReadOption) (VolumeReadOpts, error)

PrepareVolumeReadOptions executes original callbacks once without selecting a service. Each retained value and original callback slice is copied.

type VolumeReadonlyOption

type VolumeReadonlyOption = cinderaction.ReadonlyOption

func WithVolumeReadonly

func WithVolumeReadonly(value bool) VolumeReadonlyOption

func WithVolumeReadonlyOptions

func WithVolumeReadonlyOptions(value VolumeReadonlyOpts) VolumeReadonlyOption

WithVolumeReadonlyOptions replaces the entire policy with an owned copy.

type VolumeReadonlyOpts

type VolumeReadonlyOpts = cinderaction.ReadonlyOptions

VolumeReadonlyOpts distinguishes omitted true from explicit false.

func PrepareVolumeReadonlyOptions

func PrepareVolumeReadonlyOptions(ctx context.Context, options ...VolumeReadonlyOption) (VolumeReadonlyOpts, error)

PrepareVolumeReadonlyOptions executes original options without HTTP or service selection.

type VolumeRetypeOption

type VolumeRetypeOption = cinderaction.RetypeOption

func WithVolumeRetypeMigrationPolicy

func WithVolumeRetypeMigrationPolicy(value string) VolumeRetypeOption

func WithVolumeRetypeOptions

func WithVolumeRetypeOptions(value VolumeRetypeOpts) VolumeRetypeOption

type VolumeRetypeOpts

type VolumeRetypeOpts = cinderaction.RetypeOptions

func PrepareVolumeRetypeOptions

func PrepareVolumeRetypeOptions(ctx context.Context, options ...VolumeRetypeOption) (VolumeRetypeOpts, error)

type VolumeSearchOption

type VolumeSearchOption func(*VolumeSearchOpts) error

func WithVolumeSearchExpression

func WithVolumeSearchExpression(expression string) VolumeSearchOption

WithVolumeSearchExpression encodes the expression as a JSON string.

func WithVolumeSearchFilters

func WithVolumeSearchFilters(value json.RawMessage) VolumeSearchOption

WithVolumeSearchFilters accepts a raw dictionary or JSON string expression. Explicit null retains unfiltered GetVolume dispatch. Other nonnull falsey values, including {}, select its filtered full-list branch.

func WithVolumeSearchLocation

func WithVolumeSearchLocation(value resource.CloudLocation) VolumeSearchOption

func WithVolumeSearchOptions

func WithVolumeSearchOptions(value VolumeSearchOpts) VolumeSearchOption

type VolumeSearchOpts

type VolumeSearchOpts struct {
	Filters  *json.RawMessage
	Location *resource.CloudLocation
}

VolumeSearchOpts retains omitted filters independently from every explicit JSON value. Filters are consumed only after full list and identifier search. Location replaces the default recorded provider scope with owned cloud facts.

func PrepareVolumeSearchOptions

func PrepareVolumeSearchOptions(ctx context.Context, options ...VolumeSearchOption) (VolumeSearchOpts, error)

PrepareVolumeSearchOptions applies original callbacks once without service I/O, retaining JSON for lazy consumption by the eventual operation.

type VolumeSelectionError

type VolumeSelectionError struct {
	NameOrID string
	Length   int
}

VolumeSelectionError reports len(value)>1 without inventing resource IDs for an arbitrary expression result. It participates in shared ErrAmbiguous checks.

func (*VolumeSelectionError) Error

func (e *VolumeSelectionError) Error() string

func (*VolumeSelectionError) Unwrap

func (e *VolumeSelectionError) Unwrap() error

type VolumeSnapshotListOption

type VolumeSnapshotListOption = cloudsnapshot.ListOption

func WithVolumeSnapshotListAllowUnknownParams

func WithVolumeSnapshotListAllowUnknownParams(value bool) VolumeSnapshotListOption

func WithVolumeSnapshotListConflictingAttrs

func WithVolumeSnapshotListConflictingAttrs(value json.RawMessage) VolumeSnapshotListOption

func WithVolumeSnapshotListDetailed

func WithVolumeSnapshotListDetailed(value bool) VolumeSnapshotListOption

func WithVolumeSnapshotListExpression

func WithVolumeSnapshotListExpression(value string) VolumeSnapshotListOption

func WithVolumeSnapshotListFilters

func WithVolumeSnapshotListFilters(value json.RawMessage) VolumeSnapshotListOption

func WithVolumeSnapshotListHeaders

func WithVolumeSnapshotListHeaders(value map[string]string) VolumeSnapshotListOption

func WithVolumeSnapshotListLocation

func WithVolumeSnapshotListLocation(value resource.CloudLocation) VolumeSnapshotListOption

func WithVolumeSnapshotListMaxItems

func WithVolumeSnapshotListMaxItems(value int) VolumeSnapshotListOption

func WithVolumeSnapshotListMicroversion

func WithVolumeSnapshotListMicroversion(value string) VolumeSnapshotListOption

func WithVolumeSnapshotListOptions

func WithVolumeSnapshotListOptions(value VolumeSnapshotListOpts) VolumeSnapshotListOption

func WithVolumeSnapshotListPagination

func WithVolumeSnapshotListPagination(value bool) VolumeSnapshotListOption

type VolumeSnapshotListOpts

type VolumeSnapshotListOpts = cloudsnapshot.ListOptions

VolumeSnapshotListOpts owns snapshot list policy; omission retains source defaults.

func PrepareVolumeSnapshotListOptions

func PrepareVolumeSnapshotListOptions(ctx context.Context, options ...VolumeSnapshotListOption) (VolumeSnapshotListOpts, error)

PrepareVolumeSnapshotListOptions captures original callbacks once without service I/O.

type VolumeSnapshotMutationPage

type VolumeSnapshotMutationPage = cloudsnapshot.MutationPage

VolumeSnapshotMutationPage owns an actual mutation or polling response.

type VolumeSnapshotReadOption

type VolumeSnapshotReadOption = cloudsnapshot.ReadOption

func WithVolumeSnapshotReadLocation

func WithVolumeSnapshotReadLocation(value resource.CloudLocation) VolumeSnapshotReadOption

func WithVolumeSnapshotReadOptions

func WithVolumeSnapshotReadOptions(value VolumeSnapshotReadOpts) VolumeSnapshotReadOption

type VolumeSnapshotReadOpts

type VolumeSnapshotReadOpts = cloudsnapshot.ReadOptions

VolumeSnapshotReadOpts owns snapshot read policy; omission retains source defaults.

func PrepareVolumeSnapshotReadOptions

func PrepareVolumeSnapshotReadOptions(ctx context.Context, options ...VolumeSnapshotReadOption) (VolumeSnapshotReadOpts, error)

PrepareVolumeSnapshotReadOptions captures original callbacks once without service I/O.

type VolumeSnapshotSearchOption

type VolumeSnapshotSearchOption = cloudsnapshot.SearchOption

func WithVolumeSnapshotSearchExpression

func WithVolumeSnapshotSearchExpression(value string) VolumeSnapshotSearchOption

func WithVolumeSnapshotSearchFilters

func WithVolumeSnapshotSearchFilters(value json.RawMessage) VolumeSnapshotSearchOption

func WithVolumeSnapshotSearchLocation

func WithVolumeSnapshotSearchLocation(value resource.CloudLocation) VolumeSnapshotSearchOption

type VolumeSnapshotSearchOpts

type VolumeSnapshotSearchOpts = cloudsnapshot.SearchOptions

VolumeSnapshotSearchOpts owns snapshot search policy; omission retains source defaults.

func PrepareVolumeSnapshotSearchOptions

func PrepareVolumeSnapshotSearchOptions(ctx context.Context, options ...VolumeSnapshotSearchOption) (VolumeSnapshotSearchOpts, error)

PrepareVolumeSnapshotSearchOptions captures original callbacks once without service I/O.

type VolumeSnapshotSelectionError

type VolumeSnapshotSelectionError = cloudsnapshot.SelectionError

type VolumeSnapshotsPage

type VolumeSnapshotsPage = cloudsnapshot.Page

VolumeSnapshotsPage keeps the actual admitted HTTP response independently.

type VolumeStatusResetOption

type VolumeStatusResetOption = cinderaction.StatusResetOption

func WithVolumeStatusResetAttachStatus

func WithVolumeStatusResetAttachStatus(value string) VolumeStatusResetOption

func WithVolumeStatusResetMigrationStatus

func WithVolumeStatusResetMigrationStatus(value string) VolumeStatusResetOption

func WithVolumeStatusResetOptions

func WithVolumeStatusResetOptions(value VolumeStatusResetOpts) VolumeStatusResetOption

func WithVolumeStatusResetStatus

func WithVolumeStatusResetStatus(value string) VolumeStatusResetOption

type VolumeStatusResetOpts

type VolumeStatusResetOpts = cinderaction.StatusResetOptions

func PrepareVolumeStatusResetOptions

func PrepareVolumeStatusResetOptions(ctx context.Context, options ...VolumeStatusResetOption) (VolumeStatusResetOpts, error)

type VolumeTypeAccessActionResult

type VolumeTypeAccessActionResult struct {
	Resolved          *GetVolumeTypeResult
	TypeID, ProjectID string
	Applied           *VolumeTypesPage
}

VolumeTypeAccessActionResult exposes an actual accepted acknowledgement. Applied may survive an error reading or closing the response. It establishes neither a membership change nor completion of the server's operation.

func AddVolumeTypeAccess

AddVolumeTypeAccess resolves the type and posts its literal project payload. Applied records the response, without claiming a permission change.

func RemoveVolumeTypeAccess

RemoveVolumeTypeAccess resolves the type and posts its literal project payload. It performs no implicit verification, refresh or rollback.

type VolumeTypeAccessRequest

type VolumeTypeAccessRequest struct{ NameOrID, ProjectID string }

VolumeTypeAccessRequest sends ProjectID literally, including an empty or nonexistent project ID. The workflow resolves only the volume type.

type VolumeTypeReadOption

type VolumeTypeReadOption func(*VolumeTypeReadOpts) error

func WithVolumeTypeReadLocation

func WithVolumeTypeReadLocation(value resource.CloudLocation) VolumeTypeReadOption

func WithVolumeTypeReadOptions

func WithVolumeTypeReadOptions(value VolumeTypeReadOpts) VolumeTypeReadOption

type VolumeTypeReadOpts

type VolumeTypeReadOpts struct{ Location *resource.CloudLocation }

VolumeTypeReadOpts supplies an owned complete location override to ordinary volume type reads. Omission uses recorded provider scope without extra auth I/O.

func PrepareVolumeTypeReadOptions

func PrepareVolumeTypeReadOptions(ctx context.Context, options ...VolumeTypeReadOption) (VolumeTypeReadOpts, error)

PrepareVolumeTypeReadOptions executes original callbacks once without selecting a service. Each retained value and original callback slice is copied.

type VolumeTypeSearchOption

type VolumeTypeSearchOption func(*VolumeTypeSearchOpts) error

func WithVolumeTypeSearchExpression

func WithVolumeTypeSearchExpression(expression string) VolumeTypeSearchOption

WithVolumeTypeSearchExpression encodes the expression as a JSON string.

func WithVolumeTypeSearchFilters

func WithVolumeTypeSearchFilters(value json.RawMessage) VolumeTypeSearchOption

WithVolumeTypeSearchFilters accepts a raw dictionary or JSON string expression. Explicit null retains unfiltered GetVolumeType dispatch. Other nonnull falsey values, including {}, select its filtered full-list branch.

func WithVolumeTypeSearchLocation

func WithVolumeTypeSearchLocation(value resource.CloudLocation) VolumeTypeSearchOption

func WithVolumeTypeSearchOptions

func WithVolumeTypeSearchOptions(value VolumeTypeSearchOpts) VolumeTypeSearchOption

type VolumeTypeSearchOpts

type VolumeTypeSearchOpts struct {
	Filters  *json.RawMessage
	Location *resource.CloudLocation
}

VolumeTypeSearchOpts retains omitted filters independently from every explicit JSON value. Filters are consumed only after full list and identifier search. Location replaces the default recorded provider scope with owned cloud facts.

func PrepareVolumeTypeSearchOptions

func PrepareVolumeTypeSearchOptions(ctx context.Context, options ...VolumeTypeSearchOption) (VolumeTypeSearchOpts, error)

PrepareVolumeTypeSearchOptions applies original callbacks once without service I/O, retaining JSON for lazy consumption by the eventual operation.

type VolumeTypeSelectionError

type VolumeTypeSelectionError struct {
	NameOrID string
	Length   int
}

func (*VolumeTypeSelectionError) Error

func (e *VolumeTypeSelectionError) Error() string

func (*VolumeTypeSelectionError) Unwrap

func (e *VolumeTypeSelectionError) Unwrap() error

type VolumeTypesPage

type VolumeTypesPage = GetVolumesPage

VolumeTypesPage owns one admitted physical response independently of rows.

Source Files

Directories

Path Synopsis
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
Package metadata contains owned Cinder metadata results and header options.
Package metadata contains owned Cinder metadata results and header options.
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
v2
Code generated by sdkgen; DO NOT EDIT.
Code generated by sdkgen; DO NOT EDIT.
availabilityzones
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
backups
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
limits
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
quotasets
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
schedulerstats
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
services
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
snapshots
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
transfers
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
volumes
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
v3
Code generated by sdkgen; DO NOT EDIT.
Code generated by sdkgen; DO NOT EDIT.
attachments
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
availabilityzones
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
backups
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
capabilities
Package capabilities reads Cinder backend capabilities with owned Resource views.
Package capabilities reads Cinder backend capabilities with owned Resource views.
clusters
Package clusters implements the pinned openstacksdk block_storage v3 cluster proxy calls over Cinder clusters, a route Gophercloud v2.15.0 does not bind.
Package clusters implements the pinned openstacksdk block_storage v3 cluster proxy calls over Cinder clusters, a route Gophercloud v2.15.0 does not bind.
consistencygroups
Package consistencygroups provides owned records for the legacy Cinder v3 API.
Package consistencygroups provides owned records for the legacy Cinder v3 API.
consistencygroupsnapshots
Package consistencygroupsnapshots provides legacy Cinder consistency group-snapshot user operations.
Package consistencygroupsnapshots provides legacy Cinder consistency group-snapshot user operations.
defaulttypes
Package defaulttypes implements the pinned openstacksdk block_storage v3 default volume type proxy calls over Cinder default-types, a route Gophercloud v2.15.0 does not bind.
Package defaulttypes implements the pinned openstacksdk block_storage v3 default volume type proxy calls over Cinder default-types, a route Gophercloud v2.15.0 does not bind.
groups
Package groups provides owned Cinder v3 generic volume-group records.
Package groups provides owned Cinder v3 generic volume-group records.
groupsnapshots
Package groupsnapshots provides Cinder generic group-snapshot user operations.
Package groupsnapshots provides Cinder generic group-snapshot user operations.
grouptypes
Package grouptypes implements the pinned openstacksdk block_storage v3 group type proxy calls, including the group_specs sub-API, over Cinder group_types, a route Gophercloud v2.15.0 does not bind.
Package grouptypes implements the pinned openstacksdk block_storage v3 group type proxy calls, including the group_specs sub-API, over Cinder group_types, a route Gophercloud v2.15.0 does not bind.
internal/cinderowned
Package cinderowned owns the Cinder v3 record workflow shared by the SDK-owned group type, default type and cluster packages and by the owned service actions.
Package cinderowned owns the Cinder v3 record workflow shared by the SDK-owned group type, default type and cluster packages and by the owned service actions.
limits
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
manageablevolumes
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
messages
Package messages provides Cinder user-message lookup, listing and deletion.
Package messages provides Cinder user-message lookup, listing and deletion.
qos
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
quotasets
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
resourcefilters
Package resourcefilters owns the Cinder v3 allowed-filter catalogue.
Package resourcefilters owns the Cinder v3 allowed-filter catalogue.
schedulerstats
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
services
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
snapshots
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
transfers
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
volumes
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
volumetypes
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.
Code generated by sdkgen from Gophercloud v2.15.0; DO NOT EDIT.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL