github.com/cilium/cilium@v1.16.2/pkg/alibabacloud/eni/limits/limits.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // Copyright Authors of Cilium 3 4 package limits 5 6 import ( 7 "context" 8 9 openapi "github.com/cilium/cilium/pkg/alibabacloud/api" 10 ipamTypes "github.com/cilium/cilium/pkg/ipam/types" 11 "github.com/cilium/cilium/pkg/lock" 12 ) 13 14 // limits contains limits for adapter count and addresses. The mappings will be 15 // updated from agent configuration at bootstrap time. 16 // 17 // Source: https://www.alibabacloud.com/help/doc-detail/25378.htm 18 var limits = struct { 19 lock.RWMutex 20 21 m map[string]ipamTypes.Limits 22 }{ 23 m: map[string]ipamTypes.Limits{}, 24 } 25 26 // Update update the limit map 27 func Update(limitMap map[string]ipamTypes.Limits) { 28 limits.Lock() 29 defer limits.Unlock() 30 31 for k, v := range limitMap { 32 limits.m[k] = v 33 } 34 } 35 36 // Get returns the instance limits of a particular instance type. 37 func Get(instanceType string) (limit ipamTypes.Limits, ok bool) { 38 limits.RLock() 39 limit, ok = limits.m[instanceType] 40 limits.RUnlock() 41 return 42 } 43 44 // UpdateFromAPI updates limits for instance 45 // https://www.alibabacloud.com/help/doc-detail/25620.htm 46 func UpdateFromAPI(ctx context.Context, ecs *openapi.Client) error { 47 instanceTypeInfos, err := ecs.GetInstanceTypes(ctx) 48 if err != nil { 49 return err 50 } 51 52 limits.Lock() 53 defer limits.Unlock() 54 55 for _, instanceTypeInfo := range instanceTypeInfos { 56 instanceType := instanceTypeInfo.InstanceTypeId 57 adapterLimit := instanceTypeInfo.EniQuantity 58 ipv4PerAdapter := instanceTypeInfo.EniPrivateIpAddressQuantity 59 ipv6PerAdapter := instanceTypeInfo.EniIpv6AddressQuantity 60 61 limits.m[instanceType] = ipamTypes.Limits{ 62 Adapters: adapterLimit, 63 IPv4: ipv4PerAdapter, 64 IPv6: ipv6PerAdapter, 65 } 66 } 67 68 return nil 69 }