Releases: IBM/vpc-go-sdk
v0.70.1
Highlights
- Introduced Allowed Use Constraints for images, volumes, snapshots, and bare metal server disks
- Added new APIs to list compatible instance and server profiles
- Extended models with
allowed_use
struct definitions - Improved validations and structured error propagation for new APIs
- fix(template): correctly unmarshal InstanceTemplate response by type
Allowed use compatibility constraints (Feature)
-
Added support for compatibility filtering using
allowed_use
expressions, enabling fine-grained control over provisioning:-
Applies to
Image
,Snapshot
,Volume
, andBareMetalServerDisk
-
Evaluates provisioning constraints like:
enable_secure_boot
,gpu.count
,gpu.memory
,gpu.model
,gpu.manufacturer
-
-
Added new types:
ImageAllowedUse
,SnapshotAllowedUse
,ImageAllowedUsePrototype
,ImageAllowedUsePatch
BareMetalServerDiskAllowedUse
,SnapshotAllowedUsePrototype
,SnapshotAllowedUsePatch
-
Expressions are validated during create, patch, and provisioning workflows
Profile compatibility listing APIs
-
Added APIs to list compatible instance or server profiles based on
allowed_use
expressions:ListImageInstanceProfiles
ListImageBareMetalServerProfiles
ListSnapshotInstanceProfiles
ListVolumeInstanceProfiles
-
Each API supports:
- Pagination (
start
,limit
) - Context propagation (
WithContext
variants) - Query parameter-based versioning and generation enforcement
- Pagination (
Struct and field extensions
-
Extended existing models with new
allowed_use
fields:Image
,Snapshot
,ImagePatch
,ImagePrototype
,BareMetalServerDisk
-
Added corresponding unmarshalling and validation logic for all additions
-
Patch methods now include
allowed_use
patch helpers andAsPatch()
extensions
Documentation & code comments
-
Enhanced documentation for:
CreateInstance
,UpdateInstance
,CreateBareMetalServer
,UpdateBareMetalServer
, and similar methodsCreateEndpointGateway
now documents prototype structure and validation logicListEndpointGateways
explicitly defines sort behavior
Breaking Changes
- No methods or types were removed
v0.70.0
Highlights
- Introduced Allowed Use Constraints for images, volumes, snapshots, and bare metal server disks
- Added new APIs to list compatible instance and server profiles
- Extended models with
allowed_use
struct definitions - Improved validations and structured error propagation for new APIs
Allowed use compatibility constraints (Feature)
-
Added support for compatibility filtering using
allowed_use
expressions, enabling fine-grained control over provisioning:-
Applies to
Image
,Snapshot
,Volume
, andBareMetalServerDisk
-
Evaluates provisioning constraints like:
enable_secure_boot
,gpu.count
,gpu.memory
,gpu.model
,gpu.manufacturer
-
-
Added new types:
ImageAllowedUse
,SnapshotAllowedUse
,ImageAllowedUsePrototype
,ImageAllowedUsePatch
BareMetalServerDiskAllowedUse
,SnapshotAllowedUsePrototype
,SnapshotAllowedUsePatch
-
Expressions are validated during create, patch, and provisioning workflows
Profile compatibility listing APIs
-
Added APIs to list compatible instance or server profiles based on
allowed_use
expressions:ListImageInstanceProfiles
ListImageBareMetalServerProfiles
ListSnapshotInstanceProfiles
ListVolumeInstanceProfiles
-
Each API supports:
- Pagination (
start
,limit
) - Context propagation (
WithContext
variants) - Query parameter-based versioning and generation enforcement
- Pagination (
Struct and field extensions
-
Extended existing models with new
allowed_use
fields:Image
,Snapshot
,ImagePatch
,ImagePrototype
,BareMetalServerDisk
-
Added corresponding unmarshalling and validation logic for all additions
-
Patch methods now include
allowed_use
patch helpers andAsPatch()
extensions
Documentation & code comments
-
Enhanced documentation for:
CreateInstance
,UpdateInstance
,CreateBareMetalServer
,UpdateBareMetalServer
, and similar methodsCreateEndpointGateway
now documents prototype structure and validation logicListEndpointGateways
explicitly defines sort behavior
Breaking Changes
- No methods or types were removed
v0.69.1
Highlights
- Updated default API version from
2025-04-22
to2025-07-08
- Introduced Public Address Range management for VPCs
- Enhanced support for remote images and filtering capabilities
- Refined DNS Resolution Binding constraints and validation
- Improved error propagation and SDK classification
Public Address Range Management (Major Feature)
-
Introduced new resource
PublicAddressRange
:- Enables allocation and management of public IP address ranges within a VPC
-
Added new APIs:
ListPublicAddressRanges
,GetPublicAddressRange
,CreatePublicAddressRange
,UpdatePublicAddressRange
,DeletePublicAddressRange
-
Updated
VPC
struct:- Now includes
public_address_ranges []PublicAddressRangeReference
- Now includes
-
Enhanced
PublicGateway
creation and retrieval:- Now supports optional
public_address_range
assignment
- Now supports optional
-
Added:
- New types:
PublicAddressRange
,PublicAddressRangeReference
,PublicAddressPrefixReference
- Support for pagination, marshal/unmarshal, and interface conversion methods
- Validations and helper methods like
AsPublicAddressRange
,IsPublicAddressRange
, etc.
- New types:
Image Management Enhancements
-
Added support for remote image filtering:
- New query option
remote.account.id
inListImagesOptions
- New query option
-
Lifecycle operations (
UpdateImage
,DeprecateImage
,ObsoleteImage
,DeleteImage
) now reject execution ifremote.account
is set -
Enforced safe updates:
- Disallow changes to
operating_system
andremote
fields for remote images
- Disallow changes to
-
Extended image unmarshalling for new types and safe parsing
DNS Resolution Binding Enhancements
-
Enforced new validation rules:
-
DNS resolution binding disallowed if:
- The VPC already has a DNS resolution binding
dns.enable_hub
istrue
- Multiple connected endpoint gateways exist with
allow_dns_resolution_binding = true
for the same service
-
-
Clarified error messages for binding conflicts and unsupported topologies
SDK Error Classification & Propagation
-
Introduced
createSdkErrorFromApiError
for standardized error mapping -
Improved consistency of SDK error propagation across:
GetVPC
,UpdateVPC
,DeleteVPC
,CreateImage
, and others
-
Wrapped API errors with contextual messages and component info
Internal SDK Improvements
-
Refactored SDK headers:
- SDK-generated headers now inserted before user-defined headers across all operations
- Ensures proper override and precedence for headers
Documentation & Type Improvements
-
Added detailed descriptions for:
CreateVPC
default behavior - automatic creation of ACLs, routing table, security group, address prefixCreateVPCDnsResolutionBinding
- preconditions and constraints
-
Improved documentation across new types (
PublicAddressRange
,RemoteImage
, etc.) -
Added new option constructors:
NewListPublicAddressRangesOptions()
,NewCreatePublicAddressRangeOptions()
, and more
-
Updated
PublicGateway
andImage
examples with accurate field usage
Bug Fixes & Breaking Changes
- Fixed inconsistent SDK error propagation in methods like
DeleteVPC
,UpdateVPC
,UpdateImage
, andDeleteImage
- Improved internal filtering logic for image queries using
remote.account.id
and discontinuedowner_type
- Corrected unmarshalling and object parsing for new/extended image and network resources
v0.69.0
Highlights
- Updated default API version from
2025-04-22
to2025-07-08
- Improved error propagation and SDK classification
SDK Error Classification & Propagation
-
Introduced
createSdkErrorFromApiError
for standardized error mapping -
Improved consistency of SDK error propagation across:
GetVPC
,UpdateVPC
,DeleteVPC
,CreateImage
, and others
-
Wrapped API errors with contextual messages and component info
Internal SDK Improvements
-
Refactored SDK headers:
- SDK-generated headers now inserted before user-defined headers across all operations
- Ensures proper override and precedence for headers
Bug Fixes & Breaking Changes
- Fixed inconsistent SDK error propagation in methods like
DeleteVPC
,UpdateVPC
,UpdateImage
, andDeleteImage
- Improved internal filtering logic for image queries using
remote.account.id
and discontinuedowner_type
- Corrected unmarshalling and object parsing for new/extended image and network resources
v0.68.0
Highlights
- Updated default API version from 2025-04-08 to 2025-04-22
- Added regional endpoint support for VPC services
- Added new owner type filtering for images
- Enhanced architecture support documentation across multiple resources
Regional Endpoint Support
- Implemented
GetServiceURLForRegion
function with support for all IBM Cloud regions - Added endpoint mapping for regions including: au-syd, br-sao, ca-mon, ca-tor, eu-de, eu-es, eu-gb, jp-osa, jp-tok, us-east, us-south
- Replaced generic "service does not support regional URLs" error with proper region validation
Image Management Enhancements
- Added
owner_type
property to Image resource (values:user
,provider
) - Added filtering capability by
owner_type
in ListImagesOptions - Updated Image reference structures for better handling of remote images
Architecture Support Documentation
- Added explicit architecture constants and documentation for:
- Instance VCPUs:
amd64
,s390x
- Bare Metal Server CPUs:
amd64
,s390x
- Various profile architecture types across resources
- Instance VCPUs:
File Share Improvements
- Enhanced documentation for Share properties and methods
- Improved IOPS specifications for file shares
- Updated transit encryption mode documentation
- Clarified share snapshot creation requirements and inheritance behavior
Bug Fixes
- Fixed error handling in LoadBalancerProfile unmarshalling
- Updated service component information to reflect new API version
v0.67.1
v0.67.0
SDK release date : 2025-04-10
Highlights
- Updated default API version from 2025-04-01 to 2025-04-08
SNI Support
- Added
sni_hostname
rule type for TLS negotiation - Enables routing based on the domain name provided during TLS handshake
- For TCP protocol listeners, only
sni_hostname
rule type is supported - Enhanced documentation clarifying when rule
field
property is required vs. optional
Load Balancer as Target for Pool
- Added ability to target another load balancer as a pool member
- Implemented constraint: a pool cannot have multiple members targeting load balancers
- Added specialized health monitoring logic for scenarios where load balancers target other load balancers
- Added new resource types and identity structures to support load balancer targeting
New Changes
- Load Balancer Policy Actions: Added new policy actions
forward_to_listener
andforward_to_pool
to replace the deprecatedforward
action. - Load Balancer Rule Types: Added support for
sni_hostname
rule type for TLS negotiation, especially for TCP protocol listeners. - Load Balancer Pool Members:
- Added ability to target another load balancer as a pool member
- Added new constraint that pools must not already have a member targeting a load balancer
- Load Balancer Profiles: Added information about targetable load balancer profiles
- Health Monitor Documentation: Improved documentation for health monitors in load balancer pools, especially for cases where pool members target other load balancers
New Structures
- Added support for load balancer targets including:
LoadBalancerListenerPolicyTargetLoadBalancerListenerReference
LoadBalancerPoolMemberTargetLoadBalancerReference
- Added various identity types for supporting load balancer targeting
Documentation Updates
- Updated documentation for load balancer listener policies and rules
- Clarified constraints on creating load balancer pool members
- Enhanced documentation for health monitor behavior when targeting load balancers
Bug Fixes
- Fixed incorrect documentation about listener protocol requirements for creating policies
v0.66.0
1. New Features
- support for volume bandwidth
- support for
tdx
confidential compute mode
Added Functions/Methods
- func (*VolumeProfileBandwidth) isaVolumeProfileBandwidth() bool {
- func (*VolumeProfileBandwidthDependent) isaVolumeProfileBandwidth() bool {
- func (*VolumeProfileBandwidthDependentRange) isaVolumeProfileBandwidth() bool {
- func (*VolumeProfileBandwidthEnum) isaVolumeProfileBandwidth() bool {
- func (*VolumeProfileBandwidthFixed) isaVolumeProfileBandwidth() bool {
- func (*VolumeProfileBandwidthRange) isaVolumeProfileBandwidth() bool {
Added Struct Fields
Added Constants
- InstanceConfidentialComputeModeTdxConst = "tdx"
- InstanceGpuManufacturerIntelConst = "intel"
- InstancePatchConfidentialComputeModeTdxConst = "tdx"
- InstanceProfileGpuManufacturerValuesIntelConst = "intel"
- InstanceProfileSupportedConfidentialComputeModesDefaultTdxConst = "tdx"
- InstanceProfileSupportedConfidentialComputeModesValuesTdxConst = "tdx"
- InstancePrototypeConfidentialComputeModeTdxConst = "tdx"
- InstanceTemplateConfidentialComputeModeTdxConst = "tdx"
- InstanceTemplatePrototypeConfidentialComputeModeTdxConst = "tdx"
- VPNGatewayModePolicyConst = "policy"
- InstancePrototypeInstanceByCatalogOfferingConfidentialComputeModeTdxConst = "tdx"
- InstancePrototypeInstanceByImageConfidentialComputeModeTdxConst = "tdx"
- InstancePrototypeInstanceBySourceSnapshotConfidentialComputeModeTdxConst = "tdx"
- InstancePrototypeInstanceBySourceTemplateConfidentialComputeModeTdxConst = "tdx"
- InstancePrototypeInstanceByVolumeConfidentialComputeModeTdxConst = "tdx"
- InstanceTemplatePrototypeInstanceTemplateByImageConfidentialComputeModeTdxConst = "tdx"
- InstanceTemplatePrototypeInstanceTemplateBySourceSnapshotConfidentialComputeModeTdxConst = "tdx"
- InstanceTemplatePrototypeInstanceTemplateBySourceTemplateConfidentialComputeModeTdxConst = "tdx"
- InstanceTemplateInstanceByCatalogOfferingInstanceTemplateContextConfidentialComputeModeTdxConst = "tdx"
- InstanceTemplateInstanceByImageInstanceTemplateContextConfidentialComputeModeTdxConst = "tdx"
- InstanceTemplateInstanceBySourceSnapshotInstanceTemplateContextConfidentialComputeModeTdxConst = "tdx"
- VolumeProfileBandwidthDependentTypeDependentConst = "dependent"
- VolumeProfileBandwidthDependentRangeTypeDependentRangeConst = "dependent_range"
- VolumeProfileBandwidthEnumTypeEnumConst = "enum"
- VolumeProfileBandwidthFixedTypeFixedConst = "fixed"
- VolumeProfileBandwidthRangeTypeRangeConst = "range"
- InstancePrototypeInstanceByCatalogOfferingInstanceByCatalogOfferingInstanceByNetworkAttachmentConfidentialComputeModeTdxConst = "tdx"
- InstancePrototypeInstanceByCatalogOfferingInstanceByCatalogOfferingInstanceByNetworkInterfaceConfidentialComputeModeTdxConst = "tdx"
- InstancePrototypeInstanceByImageInstanceByImageInstanceByNetworkAttachmentConfidentialComputeModeTdxConst = "tdx"
- InstancePrototypeInstanceByImageInstanceByImageInstanceByNetworkInterfaceConfidentialComputeModeTdxConst = "tdx"
- InstancePrototypeInstanceBySourceSnapshotInstanceBySourceSnapshotInstanceByNetworkAttachmentConfidentialComputeModeTdxConst = "tdx"
- InstancePrototypeInstanceBySourceSnapshotInstanceBySourceSnapshotInstanceByNetworkInterfaceConfidentialComputeModeTdxConst = "tdx"
- InstancePrototypeInstanceByVolumeInstanceByVolumeInstanceByNetworkAttachmentConfidentialComputeModeTdxConst = "tdx"
- InstancePrototypeInstanceByVolumeInstanceByVolumeInstanceByNetworkInterfaceConfidentialComputeModeTdxConst = "tdx"
- InstanceTemplatePrototypeInstanceTemplateByCatalogOfferingInstanceTemplateByCatalogOfferingInstanceByNetworkAttachmentConfidentialComputeModeTdxConst = "tdx"
- InstanceTemplatePrototypeInstanceTemplateByCatalogOfferingInstanceTemplateByCatalogOfferingInstanceByNetworkInterfaceConfidentialComputeModeTdxConst = "tdx"
- InstanceTemplatePrototypeInstanceTemplateByImageInstanceTemplateByImageInstanceByNetworkAttachmentConfidentialComputeModeTdxConst = "tdx"
- InstanceTemplatePrototypeInstanceTemplateByImageInstanceTemplateByImageInstanceByNetworkInterfaceConfidentialComputeModeTdxConst = "tdx"
- InstanceTemplatePrototypeInstanceTemplateBySourceSnapshotInstanceTemplateBySourceSnapshotInstanceByNetworkAttachmentConfidentialComputeModeTdxConst = "tdx"
- InstanceTemplatePrototypeInstanceTemplateBySourceSnapshotInstanceTemplateBySourceSnapshotInstanceByNetworkInterfaceConfidentialComputeModeTdxConst = "tdx"
- InstanceTemplateInstanceByCatalogOfferingInstanceTemplateContextInstanceByCatalogOfferingInstanceTemplateContextInstanceByNetworkAttachmentConfidentialComputeModeTdxConst = "tdx"
- InstanceTemplateInstanceByCatalogOfferingInstanceTemplateContextInstanceByCatalogOfferingInstanceTemplateContextInstanceByNetworkInterfaceConfidentialComputeModeTdxConst = "tdx"
- InstanceTemplateInstanceByImageInstanceTemplateContextInstanceByImageInstanceTemplateContextInstanceByNetworkAttachmentConfidentialComputeModeTdxConst = "tdx"
- InstanceTemplateInstanceByImageInstanceTemplateContextInstanceByImageInstanceTemplateContextInstanceByNetworkInterfaceConfidentialComputeModeTdxConst = "tdx"
- InstanceTemplateInstanceBySourceSnapshotInstanceTemplateContextInstanceBySourceSnapshotInstanceTemplateContextInstanceByNetworkAttachmentConfidentialComputeModeTdxConst = "tdx"
- InstanceTemplateInstanceBySourceSnapshotInstanceTemplateContextInstanceBySourceSnapshotInstanceTemplateContextInstanceByNetworkInterfaceConfidentialComputeModeTdxConst = "tdx"
2. Breaking Changes
Modified Function Signatures
``
-func (vpc *VpcV1) DeleteSnapshot(deleteSnapshotOptions *DeleteSnapshotOptions) (result *Snapshot, response *core.DetailedResponse, err error) {
#### ``
```diff
-func (vpc *VpcV1) DeleteSnapshotWithContext(ctx context.Context, deleteSnapshotOptions *DeleteSnapshotOptions) (result *Snapshot, response *core.DetailedResponse, err error) {
### Removed Functions/Methods
- func (vpc *VpcV1) DeleteSnapshot(deleteSnapshotOptions *DeleteSnapshotOptions) (result *Snapshot, response *core.DetailedResponse, err error) {
- func (vpc *VpcV1) DeleteSnapshotWithContext(ctx context.Context, deleteSnapshotOptions *DeleteSnapshotOptions) (result *Snapshot, response *core.DetailedResponse, err error) {
### API Version Changes
2025-04-01
v0.65.0
NEW FEATURES
- Support for Snapshot in DeleteSnapshot response
- Support for FailsafePolicy in LoadBalancerPool, LoadBalancerPoolPatch
- Support for FailsafePolicyActions in LoadBalancer
- Added StorageGeneration property to Snapshot and Volume
- Added new constants for hardware manufacturers:
- InstanceGpuManufacturerNvidiaConst = "nvidia"
- InstanceVcpuManufacturerAmdConst = "amd"
- InstanceVcpuManufacturerIBMConst = "ibm"
- InstanceVcpuManufacturerIntelConst = "intel"
- DedicatedHostProfileVcpuManufacturerValueAmdConst = "amd"
- DedicatedHostProfileVcpuManufacturerValueIBMConst = "ibm"
- DedicatedHostProfileVcpuManufacturerValueIntelConst = "intel"
- Added constants for failsafe policy actions:
- LoadBalancerFailsafePolicyActionsBypassConst = "bypass"
- LoadBalancerFailsafePolicyActionsDropConst = "drop"
- LoadBalancerFailsafePolicyActionsFailConst = "fail"
- LoadBalancerFailsafePolicyActionsForwardConst = "forward"
- Added new Snapshot lifecycle state constant:
- SnapshotLifecycleStateUnusableConst = "unusable"
BREAKING CHANGES
- In
CreateLoadBalancerOptions
, Pools is changed from LoadBalancerPoolPrototype to LoadBalancerPoolPrototypeLoadBalancerContext - In
CreateLoadBalancerPoolOptions
, HealthMonitor is changed from LoadBalancerPoolHealthMonitorPrototype to LoadBalancerPoolHealthMonitorPrototypeIntf - Removed
Default
field fromInstanceProfileVcpuArchitecture
- Removed
Default
field fromInstanceProfileVcpuManufacturer
OperatingSystem
field in Image is now required (added validate:"required")- DeleteLoadBalancerPool adds restriction that pool must not "be the target pool in the failsafe policy for any other pool"
- Constants renamed due to type renames:
- LoadBalancerPoolPrototypeProxyProtocolDisabledConst → LoadBalancerPoolPrototypeLoadBalancerContextProxyProtocolDisabledConst
- LoadBalancerPoolPrototypeProxyProtocolV1Const → LoadBalancerPoolPrototypeLoadBalancerContextProxyProtocolV1Const
- LoadBalancerPoolPrototypeProxyProtocolV2Const → LoadBalancerPoolPrototypeLoadBalancerContextProxyProtocolV2Const
- LoadBalancerPoolPrototypeProtocolHTTPConst → LoadBalancerPoolPrototypeLoadBalancerContextProtocolHTTPConst
- LoadBalancerPoolPrototypeProtocolHTTPSConst → LoadBalancerPoolPrototypeLoadBalancerContextProtocolHTTPSConst
- LoadBalancerPoolPrototypeProtocolTCPConst → LoadBalancerPoolPrototypeLoadBalancerContextProtocolTCPConst
- LoadBalancerPoolPrototypeProtocolUDPConst → LoadBalancerPoolPrototypeLoadBalancerContextProtocolUDPConst
- LoadBalancerPoolPrototypeAlgorithmLeastConnectionsConst → LoadBalancerPoolPrototypeLoadBalancerContextAlgorithmLeastConnectionsConst
- LoadBalancerPoolPrototypeAlgorithmRoundRobinConst → LoadBalancerPoolPrototypeLoadBalancerContextAlgorithmRoundRobinConst
- LoadBalancerPoolPrototypeAlgorithmWeightedRoundRobinConst → LoadBalancerPoolPrototypeLoadBalancerContextAlgorithmWeightedRoundRobinConst
CHANGES
- API version updated to
2025-03-04
(from2024-12-17
) - API version date range updated to
2025-03-08
(from2024-12-18
) - Documentation improvements:
- Load balancer port ranges now described as "non-overlapping" instead of "unique"
- Flow Log Collector now explicitly mentions "TCP and UDP data" rather than general "data"
- Port range and protocol descriptions more precise
- Default values documented:
- Unspecified connection limit for load balancers will default to
15000
- Unspecified idle connection timeout will default to
50
- Unspecified weight for load balancer pool members will default to
50
- Unspecified connection limit for load balancers will default to
BUG FIXES
- None
v0.64.1
What's Changed
- chore(deps): bump golang.org/x/crypto from 0.21.0 to 0.31.0 by @dependabot in #109
- chore(deps): bump golang.org/x/net from 0.23.0 to 0.33.0 by @dependabot in #110
Full Changelog: v0.64.0...v0.64.1