Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ require (
github.com/alibabacloud-go/darabonba-openapi v0.1.16
github.com/alibabacloud-go/darabonba-openapi/v2 v2.1.13
github.com/alibabacloud-go/ecs-20140526/v7 v7.4.2
github.com/alibabacloud-go/eflo-controller-20221215/v3 v3.0.0
github.com/alibabacloud-go/eflo-controller-20221215/v3 v3.0.4
github.com/alibabacloud-go/ens-20171110/v3 v3.0.2
github.com/alibabacloud-go/nas-20170626/v4 v4.2.0
github.com/alibabacloud-go/sts-20150401/v2 v2.0.4
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ github.com/alibabacloud-go/debug v1.0.1 h1:MsW9SmUtbb1Fnt3ieC6NNZi6aEwrXfDksD4QA
github.com/alibabacloud-go/debug v1.0.1/go.mod h1:8gfgZCCAC3+SCzjWtY053FrOcd4/qlH6IHTI4QyICOc=
github.com/alibabacloud-go/ecs-20140526/v7 v7.4.2 h1:A+rE0e+5XlrniPd+68bUHIq8Fh9fG1SIVpn6szd/6ac=
github.com/alibabacloud-go/ecs-20140526/v7 v7.4.2/go.mod h1:Jwyp6loA3nt1hZu5fmyZahVMjZxNr2eDeXadPUnSKA0=
github.com/alibabacloud-go/eflo-controller-20221215/v3 v3.0.0 h1:pZLIXOMPzHy49K891UCgwC4ihgoUYnTwvK4VIExkwzs=
github.com/alibabacloud-go/eflo-controller-20221215/v3 v3.0.0/go.mod h1:SKN9dFS7vtPV1hfeLYE0iu4lB8OiFWz/4lq6FRkdapc=
github.com/alibabacloud-go/eflo-controller-20221215/v3 v3.0.4 h1:1yYY3qRNVj/cemO2W9hJlIf4IF4r4eRyXacbK/geKNo=
github.com/alibabacloud-go/eflo-controller-20221215/v3 v3.0.4/go.mod h1:SKN9dFS7vtPV1hfeLYE0iu4lB8OiFWz/4lq6FRkdapc=
github.com/alibabacloud-go/endpoint-util v1.1.0 h1:r/4D3VSw888XGaeNpP994zDUaxdgTSHBbVfZlzf6b5Q=
github.com/alibabacloud-go/endpoint-util v1.1.0/go.mod h1:O5FuCALmCKs2Ff7JFJMudHs0I5EBgecXXxZRyswlEjE=
github.com/alibabacloud-go/ens-20171110/v3 v3.0.2 h1:MOcjqAf7cACXaPKAv37WMjp7zHARcrdmGQm08PYiiPM=
Expand Down
11 changes: 10 additions & 1 deletion main.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import (
"time"

ecs20140526 "github.com/alibabacloud-go/ecs-20140526/v7/client"
eflo_controller20221215 "github.com/alibabacloud-go/eflo-controller-20221215/v3/client"
sts20150401 "github.com/alibabacloud-go/sts-20150401/v2/client"
alicred_old "github.com/aliyun/credentials-go/credentials"
"github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/bmcpfs"
Expand Down Expand Up @@ -146,7 +147,7 @@ func main() {

// initialize node metadata
meta := metadata.NewMetadata()
meta.EnableEcs(http.DefaultTransport)
meta.EnableIMDS(http.DefaultTransport)

cfg, err := options.GetRestConfig()
if err != nil {
Expand Down Expand Up @@ -179,10 +180,18 @@ func main() {
} else {
cred := alicred_old.FromCredentialsProvider(provider.GetProviderName(), provider)

efloClient, err := eflo_controller20221215.NewClient(utils.GetEfloControllerConfig(regionID).SetCredential(cred))
if err != nil {
klog.ErrorS(err, "failed to get efloClient for metadata")
} else {
meta.EnableEFLO(efloClient)
}

ecsClient, err := ecs20140526.NewClient(utils.GetEcsConfig(regionID).SetCredential(cred))
if err != nil {
klog.ErrorS(err, "failed to get ecsClient for metadata")
} else {
// Goes after EFLO, because if EFLO API confirms it's a lingjun instance, we can skip ECS API.
meta.EnableOpenAPI(ecsClient)
}

Expand Down
2 changes: 1 addition & 1 deletion pkg/cloud/ecsinterface.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ type ECSInterface interface {
DetachDisk(request *ecs.DetachDiskRequest) (response *ecs.DetachDiskResponse, err error)
DeleteDisk(request *ecs.DeleteDiskRequest) (response *ecs.DeleteDiskResponse, err error)
DescribeInstances(request *ecs.DescribeInstancesRequest) (response *ecs.DescribeInstancesResponse, err error)
DescribeInstanceTypes(request *ecs.DescribeInstanceTypesRequest) (response *ecs.DescribeInstanceTypesResponse, err error)
DescribeDisks(request *ecs.DescribeDisksRequest) (response *ecs.DescribeDisksResponse, err error)
ResizeDisk(request *ecs.ResizeDiskRequest) (response *ecs.ResizeDiskResponse, err error)
CreateSnapshot(request *ecs.CreateSnapshotRequest) (response *ecs.CreateSnapshotResponse, err error)
Expand All @@ -22,4 +21,5 @@ type ECSInterface interface {

type ECSv2Interface interface {
DescribeInstances(request *ecs20140526.DescribeInstancesRequest) (response *ecs20140526.DescribeInstancesResponse, err error)
DescribeInstanceTypes(request *ecs20140526.DescribeInstanceTypesRequest) (response *ecs20140526.DescribeInstanceTypesResponse, err error)
}
30 changes: 15 additions & 15 deletions pkg/cloud/ecsmock.go

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

12 changes: 7 additions & 5 deletions pkg/cloud/metadata/ack_cluster_profile.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ var MetadataProfileDataKeys = map[MetadataKey]string{
AccountID: "uid",
}

func NewProfileMetadata(client kubernetes.Interface) (*ProfileMetadata, error) {
profile, err := client.CoreV1().ConfigMaps("kube-system").Get(context.Background(), "ack-cluster-profile", metav1.GetOptions{})
func NewProfileMetadata(ctx context.Context, client kubernetes.Interface) (*ProfileMetadata, error) {
profile, err := client.CoreV1().ConfigMaps("kube-system").Get(ctx, "ack-cluster-profile", metav1.GetOptions{})
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -47,7 +47,9 @@ type ProfileFetcher struct {
client kubernetes.Interface
}

func (f *ProfileFetcher) FetchFor(key MetadataKey) (MetadataProvider, error) {
func (f *ProfileFetcher) ID() fetcherID { return profileFetcherID }

func (f *ProfileFetcher) FetchFor(ctx *mcontext, key MetadataKey) (middleware, error) {
switch key {
case DataPlaneZoneID: // supported
default:
Expand All @@ -56,9 +58,9 @@ func (f *ProfileFetcher) FetchFor(key MetadataKey) (MetadataProvider, error) {
return nil, ErrUnknownMetadataKey
}
}
p, err := NewProfileMetadata(f.client)
p, err := NewProfileMetadata(ctx, f.client)
if err != nil {
return nil, err
}
return newImmutableProvider(p, "ClusterProfile"), nil
return newImmutable(strProvider{p}, "ClusterProfile"), nil
}
2 changes: 1 addition & 1 deletion pkg/cloud/metadata/ack_cluster_profile_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ func TestGetClusterProfile(t *testing.T) {
t.Parallel()

client := fake.NewSimpleClientset(&testProfile)
m, err := NewProfileMetadata(client)
m, err := NewProfileMetadata(testMContext(t), client)
assert.NoError(t, err)

expectedValues := map[MetadataKey]string{
Expand Down
35 changes: 0 additions & 35 deletions pkg/cloud/metadata/ecs_dynamic.go

This file was deleted.

71 changes: 71 additions & 0 deletions pkg/cloud/metadata/ecs_instance_type.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package metadata

import (
"fmt"

ecs20140526 "github.com/alibabacloud-go/ecs-20140526/v7/client"
"github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/cloud"
)

type ECSInstanceTypeMetadata struct {
t *ecs20140526.DescribeInstanceTypesResponseBodyInstanceTypesInstanceType
}

func NewEcsInstanceTypeMetadata(c cloud.ECSv2Interface, instanceType string) (*ECSInstanceTypeMetadata, error) {
req := ecs20140526.DescribeInstanceTypesRequest{
InstanceTypes: []*string{&instanceType},
}
resp, err := c.DescribeInstanceTypes(&req)
if err != nil {
return nil, fmt.Errorf("failed to describe instance type %s: %w", instanceType, err)
}
if resp.Body == nil || resp.Body.InstanceTypes == nil {
return nil, fmt.Errorf("no instance types field: %s", instanceType)
}
for _, t := range resp.Body.InstanceTypes.InstanceType {
if t != nil && t.InstanceTypeId != nil && *t.InstanceTypeId == instanceType {
return &ECSInstanceTypeMetadata{t: t}, nil
}
}
return nil, fmt.Errorf("instance type %s not found in response", instanceType)
}

func (m *ECSInstanceTypeMetadata) GetAny(_ *mcontext, key MetadataKey) (any, error) {
switch key {
case diskQuantity:
if m.t.DiskQuantity != nil {
return *m.t.DiskQuantity, nil
}
}
return nil, ErrUnknownMetadataKey
}

type ECSInstanceTypeFetcher struct {
ecsClient cloud.ECSv2Interface
mPre middleware
}

func (f *ECSInstanceTypeFetcher) ID() fetcherID { return ecsInstanceTypeFetcherID }

func (f *ECSInstanceTypeFetcher) FetchFor(ctx *mcontext, key MetadataKey) (middleware, error) {
switch key {
case diskQuantity:
default:
return nil, ErrUnknownMetadataKey
}

kind, err := f.mPre.GetAny(ctx, machineKind)
if err == nil && kind != MachineKindECS { // skip for non-ECS instances
ctx.logger.V(1).Info("skip ECS DescribeInstanceTypes metadata fetcher", "machineKind", kind)
return empty{}, nil
}
t, err := f.mPre.GetAny(ctx, InstanceType)
if err != nil {
return nil, fmt.Errorf("instance type is not available: %w", err)
}
p, err := NewEcsInstanceTypeMetadata(f.ecsClient, t.(string))
if err != nil {
return nil, err
}
return newImmutable(p, "ECS_Instance_Type"), nil
}
Loading