@@ -14,6 +14,7 @@ import (
1414
1515 "github.com/kernel/hypeman-go/internal/apijson"
1616 "github.com/kernel/hypeman-go/internal/apiquery"
17+ shimjson "github.com/kernel/hypeman-go/internal/encoding/json"
1718 "github.com/kernel/hypeman-go/internal/requestconfig"
1819 "github.com/kernel/hypeman-go/option"
1920 "github.com/kernel/hypeman-go/packages/param"
@@ -675,11 +676,16 @@ func (r *SetSnapshotScheduleRequestParam) UnmarshalJSON(data []byte) error {
675676
676677type SnapshotPolicy struct {
677678 Compression shared.SnapshotCompressionConfig `json:"compression"`
679+ // Delay before standby snapshot compression begins, expressed as a Go duration
680+ // like "30s" or "5m". Applies only to standby compression and defaults to
681+ // immediate start when omitted.
682+ StandbyCompressionDelay string `json:"standby_compression_delay"`
678683 // JSON contains metadata for fields, check presence with [respjson.Field.Valid].
679684 JSON struct {
680- Compression respjson.Field
681- ExtraFields map [string ]respjson.Field
682- raw string
685+ Compression respjson.Field
686+ StandbyCompressionDelay respjson.Field
687+ ExtraFields map [string ]respjson.Field
688+ raw string
683689 } `json:"-"`
684690}
685691
@@ -699,7 +705,11 @@ func (r SnapshotPolicy) ToParam() SnapshotPolicyParam {
699705}
700706
701707type SnapshotPolicyParam struct {
702- Compression shared.SnapshotCompressionConfigParam `json:"compression,omitzero"`
708+ // Delay before standby snapshot compression begins, expressed as a Go duration
709+ // like "30s" or "5m". Applies only to standby compression and defaults to
710+ // immediate start when omitted.
711+ StandbyCompressionDelay param.Opt [string ] `json:"standby_compression_delay,omitzero"`
712+ Compression shared.SnapshotCompressionConfigParam `json:"compression,omitzero"`
703713 paramObj
704714}
705715
@@ -808,6 +818,24 @@ func (r *SnapshotScheduleRetentionParam) UnmarshalJSON(data []byte) error {
808818 return apijson .UnmarshalRoot (data , r )
809819}
810820
821+ type StandbyInstanceRequestParam struct {
822+ // Delay before standby snapshot compression begins, expressed as a Go duration
823+ // like "30s" or "5m". Overrides the instance default for this standby operation
824+ // only.
825+ CompressionDelay param.Opt [string ] `json:"compression_delay,omitzero"`
826+ // Compression settings for standby snapshot memory. Overrides instance defaults.
827+ Compression shared.SnapshotCompressionConfigParam `json:"compression,omitzero"`
828+ paramObj
829+ }
830+
831+ func (r StandbyInstanceRequestParam ) MarshalJSON () (data []byte , err error ) {
832+ type shadow StandbyInstanceRequestParam
833+ return param .MarshalObject (r , (* shadow )(& r ))
834+ }
835+ func (r * StandbyInstanceRequestParam ) UnmarshalJSON (data []byte ) error {
836+ return apijson .UnmarshalRoot (data , r )
837+ }
838+
811839type VolumeMount struct {
812840 // Path where volume is mounted in the guest
813841 MountPath string `json:"mount_path" api:"required"`
@@ -964,8 +992,9 @@ type InstanceNewParams struct {
964992 Hypervisor InstanceNewParamsHypervisor `json:"hypervisor,omitzero"`
965993 // Network configuration for the instance
966994 Network InstanceNewParamsNetwork `json:"network,omitzero"`
967- // Snapshot compression policy for this instance. Controls compression settings
968- // applied when creating snapshots or entering standby.
995+ // Snapshot policy for this instance. Controls compression settings applied when
996+ // creating snapshots or entering standby, plus any default standby-only
997+ // compression delay.
969998 SnapshotPolicy SnapshotPolicyParam `json:"snapshot_policy,omitzero"`
970999 // User-defined key-value tags.
9711000 Tags map [string ]string `json:"tags,omitzero"`
@@ -1275,13 +1304,12 @@ const (
12751304)
12761305
12771306type InstanceStandbyParams struct {
1278- Compression shared. SnapshotCompressionConfigParam `json:"compression,omitzero"`
1307+ StandbyInstanceRequest StandbyInstanceRequestParam
12791308 paramObj
12801309}
12811310
12821311func (r InstanceStandbyParams ) MarshalJSON () (data []byte , err error ) {
1283- type shadow InstanceStandbyParams
1284- return param .MarshalObject (r , (* shadow )(& r ))
1312+ return shimjson .Marshal (r .StandbyInstanceRequest )
12851313}
12861314func (r * InstanceStandbyParams ) UnmarshalJSON (data []byte ) error {
12871315 return apijson .UnmarshalRoot (data , r )
0 commit comments