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  }