Skip to content

Commit

Permalink
Merge pull request #791 from l1b0k/feat/index
Browse files Browse the repository at this point in the history
support NetworkCardIndex
  • Loading branch information
BSWANG authored Mar 5, 2025
2 parents 483727a + 85b254e commit 917a644
Show file tree
Hide file tree
Showing 33 changed files with 767 additions and 81 deletions.
14 changes: 8 additions & 6 deletions cmd/terway-controlplane/terway-controlplane.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ import (
multiippod "github.com/AliyunContainerService/terway/pkg/controller/multi-ip/pod"
"github.com/AliyunContainerService/terway/pkg/controller/node"
"github.com/AliyunContainerService/terway/pkg/controller/preheating"
"github.com/AliyunContainerService/terway/pkg/controller/status"
"github.com/AliyunContainerService/terway/pkg/controller/webhook"
"github.com/AliyunContainerService/terway/pkg/metric"
"github.com/AliyunContainerService/terway/pkg/utils"
Expand Down Expand Up @@ -221,12 +222,13 @@ func main() {
}
wg := &wait.Group{}
ctrlCtx := &register.ControllerCtx{
Context: ctx,
Config: cfg,
VSwitchPool: vSwitchCtrl,
AliyunClient: aliyunClient,
Wg: wg,
TracerProvider: tp,
Context: ctx,
Config: cfg,
VSwitchPool: vSwitchCtrl,
AliyunClient: aliyunClient,
Wg: wg,
TracerProvider: tp,
NodeStatusCache: status.NewCache[status.NodeStatus](),
}

for name := range register.Controllers {
Expand Down
14 changes: 9 additions & 5 deletions pkg/aliyun/client/ecs.go
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ func (a *OpenAPI) DescribeNetworkInterface(ctx context.Context, vpcID string, en
}

// AttachNetworkInterface attach eni
func (a *OpenAPI) AttachNetworkInterface(ctx context.Context, eniID, instanceID, trunkENIID string) error {
func (a *OpenAPI) AttachNetworkInterface(ctx context.Context, opts ...AttachNetworkInterfaceOption) error {
ctx, span := a.Tracer.Start(ctx, APIAttachNetworkInterface)
defer span.End()

Expand All @@ -175,11 +175,15 @@ func (a *OpenAPI) AttachNetworkInterface(ctx context.Context, eniID, instanceID,
return err
}

req := ecs.CreateAttachNetworkInterfaceRequest()
req.NetworkInterfaceId = eniID
req.InstanceId = instanceID
req.TrunkNetworkInstanceId = trunkENIID
option := &AttachNetworkInterfaceOptions{}
for _, opt := range opts {
opt.ApplyTo(option)
}

req, err := option.ECS()
if err != nil {
return err
}
l := LogFields(logf.FromContext(ctx), req)

start := time.Now()
Expand Down
4 changes: 2 additions & 2 deletions pkg/aliyun/client/eni.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,10 @@ func (a *OpenAPI) DescribeNetworkInterfaceV2(ctx context.Context, opts ...Descri
return nil, ErrNotImplemented
}

func (a *OpenAPI) AttachNetworkInterfaceV2(ctx context.Context, eniID, instanceID, trunkENIID string) error {
func (a *OpenAPI) AttachNetworkInterfaceV2(ctx context.Context, opts ...AttachNetworkInterfaceOption) error {
switch GetBackendAPI(ctx) {
case BackendAPIECS:
return a.AttachNetworkInterface(ctx, eniID, instanceID, trunkENIID)
return a.AttachNetworkInterface(ctx, opts...)
case BackendAPIEFLO:
return nil
}
Expand Down
4 changes: 2 additions & 2 deletions pkg/aliyun/client/interface_default.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import (
type ECS interface {
CreateNetworkInterface(ctx context.Context, opts ...CreateNetworkInterfaceOption) (*NetworkInterface, error)
DescribeNetworkInterface(ctx context.Context, vpcID string, eniID []string, instanceID string, instanceType string, status string, tags map[string]string) ([]*NetworkInterface, error)
AttachNetworkInterface(ctx context.Context, eniID, instanceID, trunkENIID string) error
AttachNetworkInterface(ctx context.Context, opts ...AttachNetworkInterfaceOption) error
DetachNetworkInterface(ctx context.Context, eniID, instanceID, trunkENIID string) error
DeleteNetworkInterface(ctx context.Context, eniID string) error
WaitForNetworkInterface(ctx context.Context, eniID string, status string, backoff wait.Backoff, ignoreNotExist bool) (*NetworkInterface, error)
Expand Down Expand Up @@ -50,7 +50,7 @@ func SetBackendAPI(ctx context.Context, b BackendAPI) context.Context {
type ENI interface {
CreateNetworkInterfaceV2(ctx context.Context, opts ...CreateNetworkInterfaceOption) (*NetworkInterface, error)
DescribeNetworkInterfaceV2(ctx context.Context, opts ...DescribeNetworkInterfaceOption) ([]*NetworkInterface, error)
AttachNetworkInterface(ctx context.Context, eniID, instanceID, trunkENIID string) error
AttachNetworkInterface(ctx context.Context, opts ...AttachNetworkInterfaceOption) error
DetachNetworkInterface(ctx context.Context, eniID, instanceID, trunkENIID string) error
DeleteNetworkInterfaceV2(ctx context.Context, eniID string) error
AssignPrivateIPAddressV2(ctx context.Context, opts ...AssignPrivateIPAddressOption) ([]IPSet, error)
Expand Down
17 changes: 17 additions & 0 deletions pkg/aliyun/client/limit.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,16 @@ import (
"time"

"github.com/aliyun/alibaba-cloud-sdk-go/services/ecs"
"github.com/samber/lo"
"golang.org/x/sync/singleflight"
"k8s.io/apimachinery/pkg/util/cache"
logf "sigs.k8s.io/controller-runtime/pkg/log"
)

type NetworkCard struct {
Index int
}

// Limits specifies the IPAM relevant instance limits
type Limits struct {
InstanceTypeID string
Expand Down Expand Up @@ -44,6 +49,8 @@ type Limits struct {
InstanceBandwidthRx int

InstanceBandwidthTx int

NetworkCards []NetworkCard
}

func (l *Limits) SupportMultiIPIPv6() bool {
Expand Down Expand Up @@ -203,6 +210,15 @@ func getInstanceType(instanceTypeInfo *ecs.InstanceType) *Limits {
memberAdapterLimit = 0
maxMemberAdapterLimit = 0
}

cards := lo.Map(instanceTypeInfo.NetworkCards.NetworkCardInfo, func(item ecs.NetworkCardInfo, index int) NetworkCard {
return NetworkCard{
Index: item.NetworkCardIndex,
}
})
if len(cards) == 0 {
cards = nil
}
return &Limits{
InstanceTypeID: instanceTypeInfo.InstanceTypeId,
Adapters: adapterLimit,
Expand All @@ -214,6 +230,7 @@ func getInstanceType(instanceTypeInfo *ecs.InstanceType) *Limits {
ERdmaAdapters: max(eRdmaLimit, 0),
InstanceBandwidthRx: instanceTypeInfo.InstanceBandwidthRx,
InstanceBandwidthTx: instanceTypeInfo.InstanceBandwidthTx,
NetworkCards: cards,
}
}

Expand Down
42 changes: 42 additions & 0 deletions pkg/aliyun/client/limit_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,48 @@ func TestGetInstanceType(t *testing.T) {
InstanceBandwidthTx: 500,
},
},
{
name: "multi card",
input: &ecs.InstanceType{
EniQuantity: 4,
EniPrivateIpAddressQuantity: 5,
EniIpv6AddressQuantity: 10,
EniTotalQuantity: 6,
EriQuantity: 2,
InstanceBandwidthRx: 1000,
InstanceBandwidthTx: 500,
EniTrunkSupported: false,
NetworkCards: ecs.NetworkCards{
NetworkCardInfo: []ecs.NetworkCardInfo{
{
NetworkCardIndex: 0,
},
{
NetworkCardIndex: 1,
},
},
},
},
expected: &Limits{
Adapters: 4,
TotalAdapters: 6,
IPv4PerAdapter: 5,
IPv6PerAdapter: 10,
MemberAdapterLimit: 0,
MaxMemberAdapterLimit: 0,
ERdmaAdapters: 2,
InstanceBandwidthRx: 1000,
InstanceBandwidthTx: 500,
NetworkCards: []NetworkCard{
{
Index: 0,
},
{
Index: 1,
},
},
},
},
}

for _, tt := range tests {
Expand Down
19 changes: 13 additions & 6 deletions pkg/aliyun/client/mocks/ECS.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion pkg/aliyun/client/mocks/EFLO.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion pkg/aliyun/client/mocks/LimitProvider.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion pkg/aliyun/client/mocks/VPC.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

58 changes: 58 additions & 0 deletions pkg/aliyun/client/options.go
Original file line number Diff line number Diff line change
Expand Up @@ -401,3 +401,61 @@ func (o *DescribeNetworkInterfaceOptions) EFLO() *eflo.ListElasticNetworkInterfa

return req
}

type AttachNetworkInterfaceOption interface {
ApplyTo(*AttachNetworkInterfaceOptions)
}

type AttachNetworkInterfaceOptions struct {
NetworkInterfaceID *string
InstanceID *string
TrunkNetworkInstanceID *string
NetworkCardIndex *int
Backoff *wait.Backoff
}

func (o *AttachNetworkInterfaceOptions) ApplyTo(in *AttachNetworkInterfaceOptions) {
if o.NetworkInterfaceID != nil {
in.NetworkInterfaceID = o.NetworkInterfaceID
}
if o.InstanceID != nil {
in.InstanceID = o.InstanceID
}
if o.TrunkNetworkInstanceID != nil {
in.TrunkNetworkInstanceID = o.TrunkNetworkInstanceID
}
if o.NetworkCardIndex != nil {
in.NetworkCardIndex = o.NetworkCardIndex
}
if o.Backoff != nil {
in.Backoff = o.Backoff
}
}

func (o *AttachNetworkInterfaceOptions) ECS() (*ecs.AttachNetworkInterfaceRequest, error) {
req := ecs.CreateAttachNetworkInterfaceRequest()
if o.NetworkInterfaceID != nil {
req.NetworkInterfaceId = *o.NetworkInterfaceID
}
if o.InstanceID != nil {
req.InstanceId = *o.InstanceID
}
if o.TrunkNetworkInstanceID != nil {
req.TrunkNetworkInstanceId = *o.TrunkNetworkInstanceID
}
if o.NetworkCardIndex != nil {
req.NetworkCardIndex = requests.NewInteger(*o.NetworkCardIndex)
}

if o.Backoff == nil {
o.Backoff = &wait.Backoff{
Steps: 1,
}
}

if req.InstanceId == "" || req.NetworkInterfaceId == "" {
return nil, ErrInvalidArgs
}

return req, nil
}
Loading

0 comments on commit 917a644

Please sign in to comment.