full diff: 616e8db4c3...6068d1894d
a replace rule was needed (similar as in github.com/docker/docker) to fix some
dependency issues;
github.com/docker/cli/cli/trust imports
github.com/theupdateframework/notary/trustpinning tested by
github.com/theupdateframework/notary/trustpinning.test imports
github.com/cloudflare/cfssl/helpers imports
github.com/google/certificate-transparency-go imports
go.etcd.io/etcd/v3 imports
go.etcd.io/etcd/tests/v3/integration imports
go.etcd.io/etcd/server/v3/embed imports
go.opentelemetry.io/otel/semconv: module go.opentelemetry.io/otel@latest found (v1.7.0), but does not contain package go.opentelemetry.io/otel/semconv
github.com/docker/cli/cli/trust imports
github.com/theupdateframework/notary/trustpinning tested by
github.com/theupdateframework/notary/trustpinning.test imports
github.com/cloudflare/cfssl/helpers imports
github.com/google/certificate-transparency-go imports
go.etcd.io/etcd/v3 imports
go.etcd.io/etcd/tests/v3/integration imports
go.etcd.io/etcd/server/v3/embed imports
go.opentelemetry.io/otel/exporters/otlp imports
go.opentelemetry.io/otel/sdk/metric/controller/basic imports
go.opentelemetry.io/otel/metric/registry: module go.opentelemetry.io/otel/metric@latest found (v0.30.0), but does not contain package go.opentelemetry.io/otel/metric/registry
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
112 lines
2.4 KiB
Go
112 lines
2.4 KiB
Go
package genericresource
|
|
|
|
import (
|
|
"github.com/moby/swarmkit/v2/api"
|
|
)
|
|
|
|
// NewSet creates a set object
|
|
func NewSet(key string, vals ...string) []*api.GenericResource {
|
|
rs := make([]*api.GenericResource, 0, len(vals))
|
|
|
|
for _, v := range vals {
|
|
rs = append(rs, NewString(key, v))
|
|
}
|
|
|
|
return rs
|
|
}
|
|
|
|
// NewString creates a String resource
|
|
func NewString(key, val string) *api.GenericResource {
|
|
return &api.GenericResource{
|
|
Resource: &api.GenericResource_NamedResourceSpec{
|
|
NamedResourceSpec: &api.NamedGenericResource{
|
|
Kind: key,
|
|
Value: val,
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
// NewDiscrete creates a Discrete resource
|
|
func NewDiscrete(key string, val int64) *api.GenericResource {
|
|
return &api.GenericResource{
|
|
Resource: &api.GenericResource_DiscreteResourceSpec{
|
|
DiscreteResourceSpec: &api.DiscreteGenericResource{
|
|
Kind: key,
|
|
Value: val,
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
// GetResource returns resources from the "resources" parameter matching the kind key
|
|
func GetResource(kind string, resources []*api.GenericResource) []*api.GenericResource {
|
|
var res []*api.GenericResource
|
|
|
|
for _, r := range resources {
|
|
if Kind(r) != kind {
|
|
continue
|
|
}
|
|
|
|
res = append(res, r)
|
|
}
|
|
|
|
return res
|
|
}
|
|
|
|
// ConsumeNodeResources removes "res" from nodeAvailableResources
|
|
func ConsumeNodeResources(nodeAvailableResources *[]*api.GenericResource, res []*api.GenericResource) {
|
|
if nodeAvailableResources == nil {
|
|
return
|
|
}
|
|
|
|
w := 0
|
|
|
|
loop:
|
|
for _, na := range *nodeAvailableResources {
|
|
for _, r := range res {
|
|
if Kind(na) != Kind(r) {
|
|
continue
|
|
}
|
|
|
|
if remove(na, r) {
|
|
continue loop
|
|
}
|
|
// If this wasn't the right element then
|
|
// we need to continue
|
|
}
|
|
|
|
(*nodeAvailableResources)[w] = na
|
|
w++
|
|
}
|
|
|
|
*nodeAvailableResources = (*nodeAvailableResources)[:w]
|
|
}
|
|
|
|
// Returns true if the element is to be removed from the list
|
|
func remove(na, r *api.GenericResource) bool {
|
|
switch tr := r.Resource.(type) {
|
|
case *api.GenericResource_DiscreteResourceSpec:
|
|
if na.GetDiscreteResourceSpec() == nil {
|
|
return false // Type change, ignore
|
|
}
|
|
|
|
na.GetDiscreteResourceSpec().Value -= tr.DiscreteResourceSpec.Value
|
|
if na.GetDiscreteResourceSpec().Value <= 0 {
|
|
return true
|
|
}
|
|
case *api.GenericResource_NamedResourceSpec:
|
|
if na.GetNamedResourceSpec() == nil {
|
|
return false // Type change, ignore
|
|
}
|
|
|
|
if tr.NamedResourceSpec.Value != na.GetNamedResourceSpec().Value {
|
|
return false // not the right item, ignore
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
return false
|
|
}
|