diff --git a/go.mod b/go.mod index 823d260..2a650a9 100644 --- a/go.mod +++ b/go.mod @@ -6,8 +6,8 @@ require ( github.com/gophercloud/gophercloud/v2 v2.1.0 github.com/gophercloud/utils/v2 v2.0.0-20240812072210-8ce1fc0f2894 github.com/olekukonko/tablewriter v0.0.5 - github.com/sapcc/go-api-declarations v1.12.5 - github.com/sapcc/go-bits v0.0.0-20240905070742-0ac071bc79e7 + github.com/sapcc/go-api-declarations v1.12.6 + github.com/sapcc/go-bits v0.0.0-20240912081530-0967be9f0a6b github.com/sapcc/gophercloud-sapcc/v2 v2.0.2 github.com/spf13/cobra v1.8.1 ) @@ -18,7 +18,7 @@ require ( github.com/mattn/go-runewidth v0.0.9 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect - golang.org/x/sys v0.24.0 // indirect - golang.org/x/text v0.17.0 // indirect + golang.org/x/sys v0.25.0 // indirect + golang.org/x/text v0.18.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 79314d0..a1228a5 100644 --- a/go.sum +++ b/go.sum @@ -14,10 +14,10 @@ github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrk github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/sapcc/go-api-declarations v1.12.5 h1:NjA3ydh9VyxSGGxYEaufmK9Jqk2WC9OM/vi1mktkIu8= -github.com/sapcc/go-api-declarations v1.12.5/go.mod h1:83R3hTANhuRXt/pXDby37IJetw8l7DG41s33Tp9NXxI= -github.com/sapcc/go-bits v0.0.0-20240905070742-0ac071bc79e7 h1:Y5PXn4j/KA6T4sse0+kbvDq5KzVcp8X8BAcfjeauwBQ= -github.com/sapcc/go-bits v0.0.0-20240905070742-0ac071bc79e7/go.mod h1:DaDx6wsOyTlpmPIxklfOD6SgR0Au05FQenghLb/ALic= +github.com/sapcc/go-api-declarations v1.12.6 h1:04sQmS3ipzPc+ENSCWW9A4FgCN7Qa5JIbNUNh7ziQJA= +github.com/sapcc/go-api-declarations v1.12.6/go.mod h1:83R3hTANhuRXt/pXDby37IJetw8l7DG41s33Tp9NXxI= +github.com/sapcc/go-bits v0.0.0-20240912081530-0967be9f0a6b h1:t9u9Flob/wvaMfttFxfY4cG5iMx3Cs2I3FGSIqHTJ0U= +github.com/sapcc/go-bits v0.0.0-20240912081530-0967be9f0a6b/go.mod h1:ERkSk9u7zke3ZaV0Ug+SWg7y6KRfeRBx/1CkqovTvgA= github.com/sapcc/gophercloud-sapcc/v2 v2.0.2 h1:SxLVKQqm759bFYl4iDVU2ELys6fcLpsUqMtxv0s2Z6M= github.com/sapcc/gophercloud-sapcc/v2 v2.0.2/go.mod h1:c+guCOMR8/sGXDus5VEVrjQ7pdmT7JEQaInJWysbBzQ= github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= @@ -26,10 +26,10 @@ github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg= -golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc= -golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= +golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= +golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/vendor/github.com/sapcc/go-api-declarations/liquid/doc.go b/vendor/github.com/sapcc/go-api-declarations/liquid/doc.go index 8118f2e..db4f4e2 100644 --- a/vendor/github.com/sapcc/go-api-declarations/liquid/doc.go +++ b/vendor/github.com/sapcc/go-api-declarations/liquid/doc.go @@ -30,8 +30,9 @@ // - "A liquid" (lower case) refers to a server implementing LIQUID. // - "The liquid's service" refers to the OpenStack service that the liquid is a part of or connected to. // -// Each liquid provides access to one or more resources. -// A resource is any countable or measurable kind of entity managed by the liquid's service. +// Each liquid provides access to zero or more resources and zero or more rates: +// - A resource is any countable or measurable kind of entity managed by the liquid's service. +// - A rate is any countable or measurable series of events or transfers managed by the liquid's service. // // Limes discovers liquids through the Keystone service catalog. // Each liquid should be registered there with a service type that has the prefix "liquid-". @@ -39,6 +40,11 @@ // // # Inside a resource: Usage, quota, capacity, overcommit // +// Resources describe objects that are provisioned at some point and then kept around until they are later deleted. +// Examples of resources include VMs in a compute service, volumes in a storage service, or floating IPs in a network service. +// (This does not mean that each individual floating IP is a resource. The entire concept of "floating IPs" is the resource.) +// Resource usage and capacity is always measured at a specific point in time, like for the Prometheus metric type "gauge". +// // All resources report a usage value for each Keystone project. // This describes how much of the resource is used by objects created within the project. // For example, the usage for the compute resource "cores" is the sum of all vCPUs allocated to each VM in that project. @@ -58,7 +64,17 @@ // Capacity and usage may be AZ-aware, in which case one value will be reported per availability zone (AZ). // Quota is not modelled as AZ-aware since there are no OpenStack services that support AZ-aware quota at this time. // -// # Structure +// # Inside a rate: Usage +// +// Rates are measurements that only ever increase over time, similar to the Prometheus metric type "counter". +// For example, if a compute service has the resource "VMs", it might have rates like "VM creations" or "VM deletions". +// Rates describe countable events like in this example, or measurable transfers like "bytes transferred" on network links. +// +// All rates report a usage value for each Keystone project. +// Usage for each project must increase monotonically over time. +// Usage may be AZ-aware, in which case one value will be reported per availability zone (AZ). +// +// # API structure // // LIQUID is structured as a REST-like HTTP API akin to those of the various OpenStack services. // Like with any other OpenStack API, the client (i.e. Limes) authenticates to the liquid by providing its Keystone token in the HTTP header "X-Auth-Token". @@ -115,6 +131,10 @@ // [Prometheus]: https://prometheus.io/ package liquid -// ResourceName identifies a resource within a service. This type is used to distinguish -// resource names from other types of string values in function signatures. +// ResourceName identifies a resource within a service. +// This type is used to distinguish resource names from other types of string values in function signatures. type ResourceName string + +// RateName identifies a rate within a service. +// This type is used to distinguish rate names from other types of string values in function signatures. +type RateName string diff --git a/vendor/github.com/sapcc/go-api-declarations/liquid/info.go b/vendor/github.com/sapcc/go-api-declarations/liquid/info.go index 67fca29..5e48436 100644 --- a/vendor/github.com/sapcc/go-api-declarations/liquid/info.go +++ b/vendor/github.com/sapcc/go-api-declarations/liquid/info.go @@ -37,6 +37,9 @@ type ServiceInfo struct { // Info for each resource that this service provides. Resources map[ResourceName]ResourceInfo `json:"resources"` + // Info for each rate that this service provides. + Rates map[RateName]RateInfo `json:"rates"` + // Info for each metric family that is included in a response to a query for cluster capacity. CapacityMetricFamilies map[MetricName]MetricFamilyInfo `json:"capacityMetricFamilies"` @@ -54,7 +57,7 @@ type ServiceInfo struct { // This type appears in type ServiceInfo. type ResourceInfo struct { // If omitted or empty, the resource is "countable" and any quota or usage values describe a number of objects. - // If non-empty, the resource is "measured" and quota or usage values are measured in the given unit. + // If non-empty, the resource is "measured" and quota or usage values are in multiples of the given unit. // For example, the compute resource "cores" is countable, but the compute resource "ram" is measured, usually in MiB. Unit Unit `json:"unit,omitempty"` @@ -70,6 +73,20 @@ type ResourceInfo struct { HasQuota bool `json:"hasQuota"` } +// RateInfo describes a rate that a liquid's service provides. +// This type appears in type ServiceInfo. +type RateInfo struct { + // If omitted or empty, the rate is "countable" and usage values describe a number of events. + // If non-empty, the rate is "measured" and usage values are in multiples of the given unit. + // For example, the storage rate "volume_creations" is countable, but the network rate "outbound_transfer" is measured, e.g. in bytes. + Unit Unit `json:"unit,omitempty"` + + // Whether the liquid reports usage for this rate on the project level. + // This must currently be true because there is no other reason for a rate to exist. + // This requirement may be relaxed in the future, if LIQUID starts modelling rate limits and there are rates that have limits, but no usage tracking. + HasUsage bool `json:"hasUsage"` +} + // ProjectMetadata includes metadata about a project from Keystone. // // It appears in types ServiceUsageRequest and ServiceQuotaRequest if requested by the ServiceInfo. diff --git a/vendor/github.com/sapcc/go-api-declarations/liquid/report_capacity.go b/vendor/github.com/sapcc/go-api-declarations/liquid/report_capacity.go index 4ee320b..eafef11 100644 --- a/vendor/github.com/sapcc/go-api-declarations/liquid/report_capacity.go +++ b/vendor/github.com/sapcc/go-api-declarations/liquid/report_capacity.go @@ -68,10 +68,10 @@ type ServiceCapacityReport struct { InfoVersion int64 `json:"infoVersion"` // Must contain an entry for each resource that was declared in type ServiceInfo with "HasCapacity = true". - Resources map[ResourceName]*ResourceCapacityReport `json:"resources"` + Resources map[ResourceName]*ResourceCapacityReport `json:"resources,omitempty"` // Must contain an entry for each metric family that was declared for capacity metrics in type ServiceInfo. - Metrics map[MetricName][]Metric `json:"metrics"` + Metrics map[MetricName][]Metric `json:"metrics,omitempty"` } // ResourceCapacityReport contains capacity data for a resource. diff --git a/vendor/github.com/sapcc/go-api-declarations/liquid/report_usage.go b/vendor/github.com/sapcc/go-api-declarations/liquid/report_usage.go index a4bbe90..d542b94 100644 --- a/vendor/github.com/sapcc/go-api-declarations/liquid/report_usage.go +++ b/vendor/github.com/sapcc/go-api-declarations/liquid/report_usage.go @@ -19,6 +19,11 @@ package liquid +import ( + "encoding/json" + "math/big" +) + // ServiceUsageRequest is the request payload format for POST /v1/projects/:uuid/report-usage. type ServiceUsageRequest struct { // All AZs known to Limes. @@ -31,6 +36,10 @@ type ServiceUsageRequest struct { // Metadata about the project from Keystone. // Only included if the ServiceInfo declared a need for it. ProjectMetadata *ProjectMetadata `json:"projectMetadata,omitempty"` + + // The serialized state from the previous ServiceUsageReport received by Limes for this project, if any. + // Refer to the same field on type ServiceUsageReport for details. + SerializedState json.RawMessage `json:"serializedState,omitempty"` } // ServiceUsageReport is the response payload format for POST /v1/projects/:uuid/report-usage. @@ -40,10 +49,23 @@ type ServiceUsageReport struct { InfoVersion int64 `json:"infoVersion"` // Must contain an entry for each resource that was declared in type ServiceInfo. - Resources map[ResourceName]*ResourceUsageReport `json:"resources"` + Resources map[ResourceName]*ResourceUsageReport `json:"resources,omitempty"` + + // Must contain an entry for each rate that was declared in type ServiceInfo. + Rates map[RateName]*RateUsageReport `json:"rates,omitempty"` // Must contain an entry for each metric family that was declared for usage metrics in type ServiceInfo. - Metrics map[MetricName][]Metric `json:"metrics"` + Metrics map[MetricName][]Metric `json:"metrics,omitempty"` + + // Opaque state for Limes to persist and return to the liquid in the next ServiceUsageRequest for the same project. + // This should only be used if the liquid needs to store project-level data, but does not have its own database. + // + // This field is intended specifically for rate usage measurements, esp. to detect and handle counter resets in the backend. + // In this case, it might contain information like "counter C had value V at time T". + // + // Warning: As of the time of this writing, Limes may not loop this field back consistently if the liquid has resources. + // This behavior is considered a bug and will be fixed eventually. + SerializedState json.RawMessage `json:"serializedState,omitempty"` } // ResourceUsageReport contains usage data for a resource in a single project. @@ -122,3 +144,27 @@ func (r *ResourceUsageReport) AddLocalizedUsage(az AvailabilityZone, usage uint6 r.PerAZ[az] = &AZResourceUsageReport{Usage: usage} } } + +// RateUsageReport contains usage data for a rate in a single project. +// It appears in type ServiceUsageReport. +type RateUsageReport struct { + // For non-AZ-aware rates, the only entry shall be for AvailabilityZoneAny. + // Use func InAnyAZ to quickly construct a suitable structure. + // + // For AZ-aware rates, there shall be an entry for each AZ mentioned in ServiceUsageRequest.AllAZs. + // Reports for AZ-aware rates may also include an entry for AvailabilityZoneUnknown as needed. + PerAZ map[AvailabilityZone]*AZRateUsageReport `json:"perAZ"` +} + +// AZRateUsageReport contains usage data for a rate in a single project and AZ. +// It appears in type RateUsageReport. +type AZRateUsageReport struct { + // The amount of usage for this rate. Must be non-nil if the rate is declared with HasUsage = true. + // + // For a given rate, project and AZ, this value must only ever increase monotonically over time. + // If there is the possibility of counter resets or limited retention in the underlying data source, the liquid must add its own logic to guarantee monotonicity. + // A common strategy is to remember previous measurements in the SerializedState field of type ServiceUsageReport. + // + // This field is modeled as a bigint because network rates like "bytes transferred" may easily exceed the range of uint64 over time. + Usage *big.Int `json:"usage,omitempty"` +} diff --git a/vendor/golang.org/x/sys/windows/syscall_windows.go b/vendor/golang.org/x/sys/windows/syscall_windows.go index 1fa34fd..5cee9a3 100644 --- a/vendor/golang.org/x/sys/windows/syscall_windows.go +++ b/vendor/golang.org/x/sys/windows/syscall_windows.go @@ -313,6 +313,10 @@ func NewCallbackCDecl(fn interface{}) uintptr { //sys SetConsoleMode(console Handle, mode uint32) (err error) = kernel32.SetConsoleMode //sys GetConsoleScreenBufferInfo(console Handle, info *ConsoleScreenBufferInfo) (err error) = kernel32.GetConsoleScreenBufferInfo //sys setConsoleCursorPosition(console Handle, position uint32) (err error) = kernel32.SetConsoleCursorPosition +//sys GetConsoleCP() (cp uint32, err error) = kernel32.GetConsoleCP +//sys GetConsoleOutputCP() (cp uint32, err error) = kernel32.GetConsoleOutputCP +//sys SetConsoleCP(cp uint32) (err error) = kernel32.SetConsoleCP +//sys SetConsoleOutputCP(cp uint32) (err error) = kernel32.SetConsoleOutputCP //sys WriteConsole(console Handle, buf *uint16, towrite uint32, written *uint32, reserved *byte) (err error) = kernel32.WriteConsoleW //sys ReadConsole(console Handle, buf *uint16, toread uint32, read *uint32, inputControl *byte) (err error) = kernel32.ReadConsoleW //sys resizePseudoConsole(pconsole Handle, size uint32) (hr error) = kernel32.ResizePseudoConsole diff --git a/vendor/golang.org/x/sys/windows/types_windows.go b/vendor/golang.org/x/sys/windows/types_windows.go index 3f03b3d..7b97a15 100644 --- a/vendor/golang.org/x/sys/windows/types_windows.go +++ b/vendor/golang.org/x/sys/windows/types_windows.go @@ -1060,6 +1060,7 @@ const ( SIO_GET_EXTENSION_FUNCTION_POINTER = IOC_INOUT | IOC_WS2 | 6 SIO_KEEPALIVE_VALS = IOC_IN | IOC_VENDOR | 4 SIO_UDP_CONNRESET = IOC_IN | IOC_VENDOR | 12 + SIO_UDP_NETRESET = IOC_IN | IOC_VENDOR | 15 // cf. http://support.microsoft.com/default.aspx?scid=kb;en-us;257460 diff --git a/vendor/golang.org/x/sys/windows/zsyscall_windows.go b/vendor/golang.org/x/sys/windows/zsyscall_windows.go index 9bb979a..4c2e1bd 100644 --- a/vendor/golang.org/x/sys/windows/zsyscall_windows.go +++ b/vendor/golang.org/x/sys/windows/zsyscall_windows.go @@ -247,7 +247,9 @@ var ( procGetCommandLineW = modkernel32.NewProc("GetCommandLineW") procGetComputerNameExW = modkernel32.NewProc("GetComputerNameExW") procGetComputerNameW = modkernel32.NewProc("GetComputerNameW") + procGetConsoleCP = modkernel32.NewProc("GetConsoleCP") procGetConsoleMode = modkernel32.NewProc("GetConsoleMode") + procGetConsoleOutputCP = modkernel32.NewProc("GetConsoleOutputCP") procGetConsoleScreenBufferInfo = modkernel32.NewProc("GetConsoleScreenBufferInfo") procGetCurrentDirectoryW = modkernel32.NewProc("GetCurrentDirectoryW") procGetCurrentProcessId = modkernel32.NewProc("GetCurrentProcessId") @@ -347,8 +349,10 @@ var ( procSetCommMask = modkernel32.NewProc("SetCommMask") procSetCommState = modkernel32.NewProc("SetCommState") procSetCommTimeouts = modkernel32.NewProc("SetCommTimeouts") + procSetConsoleCP = modkernel32.NewProc("SetConsoleCP") procSetConsoleCursorPosition = modkernel32.NewProc("SetConsoleCursorPosition") procSetConsoleMode = modkernel32.NewProc("SetConsoleMode") + procSetConsoleOutputCP = modkernel32.NewProc("SetConsoleOutputCP") procSetCurrentDirectoryW = modkernel32.NewProc("SetCurrentDirectoryW") procSetDefaultDllDirectories = modkernel32.NewProc("SetDefaultDllDirectories") procSetDllDirectoryW = modkernel32.NewProc("SetDllDirectoryW") @@ -2162,6 +2166,15 @@ func GetComputerName(buf *uint16, n *uint32) (err error) { return } +func GetConsoleCP() (cp uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetConsoleCP.Addr(), 0, 0, 0, 0) + cp = uint32(r0) + if cp == 0 { + err = errnoErr(e1) + } + return +} + func GetConsoleMode(console Handle, mode *uint32) (err error) { r1, _, e1 := syscall.Syscall(procGetConsoleMode.Addr(), 2, uintptr(console), uintptr(unsafe.Pointer(mode)), 0) if r1 == 0 { @@ -2170,6 +2183,15 @@ func GetConsoleMode(console Handle, mode *uint32) (err error) { return } +func GetConsoleOutputCP() (cp uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetConsoleOutputCP.Addr(), 0, 0, 0, 0) + cp = uint32(r0) + if cp == 0 { + err = errnoErr(e1) + } + return +} + func GetConsoleScreenBufferInfo(console Handle, info *ConsoleScreenBufferInfo) (err error) { r1, _, e1 := syscall.Syscall(procGetConsoleScreenBufferInfo.Addr(), 2, uintptr(console), uintptr(unsafe.Pointer(info)), 0) if r1 == 0 { @@ -3038,6 +3060,14 @@ func SetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error) { return } +func SetConsoleCP(cp uint32) (err error) { + r1, _, e1 := syscall.Syscall(procSetConsoleCP.Addr(), 1, uintptr(cp), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + func setConsoleCursorPosition(console Handle, position uint32) (err error) { r1, _, e1 := syscall.Syscall(procSetConsoleCursorPosition.Addr(), 2, uintptr(console), uintptr(position), 0) if r1 == 0 { @@ -3054,6 +3084,14 @@ func SetConsoleMode(console Handle, mode uint32) (err error) { return } +func SetConsoleOutputCP(cp uint32) (err error) { + r1, _, e1 := syscall.Syscall(procSetConsoleOutputCP.Addr(), 1, uintptr(cp), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + func SetCurrentDirectory(path *uint16) (err error) { r1, _, e1 := syscall.Syscall(procSetCurrentDirectoryW.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0) if r1 == 0 { diff --git a/vendor/modules.txt b/vendor/modules.txt index 55c42fb..bacad22 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -34,7 +34,7 @@ github.com/mitchellh/go-homedir # github.com/olekukonko/tablewriter v0.0.5 ## explicit; go 1.12 github.com/olekukonko/tablewriter -# github.com/sapcc/go-api-declarations v1.12.5 +# github.com/sapcc/go-api-declarations v1.12.6 ## explicit; go 1.21 github.com/sapcc/go-api-declarations/bininfo github.com/sapcc/go-api-declarations/internal/marshal @@ -42,8 +42,8 @@ github.com/sapcc/go-api-declarations/limes github.com/sapcc/go-api-declarations/limes/rates github.com/sapcc/go-api-declarations/limes/resources github.com/sapcc/go-api-declarations/liquid -# github.com/sapcc/go-bits v0.0.0-20240905070742-0ac071bc79e7 -## explicit; go 1.22 +# github.com/sapcc/go-bits v0.0.0-20240912081530-0967be9f0a6b +## explicit; go 1.23 github.com/sapcc/go-bits/httpext github.com/sapcc/go-bits/logg github.com/sapcc/go-bits/osext @@ -62,10 +62,10 @@ github.com/spf13/cobra # github.com/spf13/pflag v1.0.5 ## explicit; go 1.12 github.com/spf13/pflag -# golang.org/x/sys v0.24.0 +# golang.org/x/sys v0.25.0 ## explicit; go 1.18 golang.org/x/sys/windows -# golang.org/x/text v0.17.0 +# golang.org/x/text v0.18.0 ## explicit; go 1.18 golang.org/x/text/encoding golang.org/x/text/encoding/charmap