Skip to content

Commit 92e1a4f

Browse files
committed
pkg/nodediscovery: split AlibabaCloud logic into nodediscovery_alibabacloud.go
The AlibabaCloud case in nodediscovery.go imported pkg/alibabacloud/eni/types and pkg/alibabacloud/metadata. While neither of these currently pulls the AlibabaCloud SDK (github.com/aliyun/alibaba-cloud-sdk-go) into the operator-generic binary, keeping the AlibabaCloud-specific node-mutation code inside the generic nodediscovery.go made it easy for a future change to a metadata helper or eni/types definition to silently re-introduce that SDK as a transitive dependency. Move the IPAMAlibabaCloud case body into a separate file (pkg/nodediscovery/nodediscovery_alibabacloud.go), with no build tag, and have nodediscovery.go's mutateNodeResource() delegate to mutateAlibabaCloudNodeResource(). This isolates the AlibabaCloud imports to a single file that is trivially auditable and is also covered by tools/cloud-dep-check (added in a follow-up commit), which fails the build if any AlibabaCloud SDK package shows up in the non-AlibabaCloud operator binaries. No build tag and no stub are needed because pkg/alibabacloud/metadata and pkg/alibabacloud/eni/types do not transitively pull the AlibabaCloud SDK; the linter is what guarantees that property going forward. Binary sizes (linux/amd64 release builds, `go build -ldflags="-s -w"`): binary before after delta cilium-operator-generic 113.25 MiB 113.25 MiB 0 B cilium-operator-aws 146.33 MiB 146.33 MiB 0 B cilium-operator-azure 118.10 MiB 118.10 MiB 0 B cilium-operator-alibabacloud 144.08 MiB 144.08 MiB 0 B cilium-operator (combined) 182.32 MiB 182.32 MiB 0 B Signed-off-by: Andr Martins <andre@cilium.io>
1 parent 2e14cfc commit 92e1a4f

2 files changed

Lines changed: 94 additions & 71 deletions

File tree

pkg/nodediscovery/nodediscovery.go

Lines changed: 1 addition & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@ import (
1414
"k8s.io/utils/net"
1515

1616
"github.com/cilium/cilium/daemon/cmd/cni"
17-
alibabaCloudTypes "github.com/cilium/cilium/pkg/alibabacloud/eni/types"
18-
alibabaCloudMetadata "github.com/cilium/cilium/pkg/alibabacloud/metadata"
1917
"github.com/cilium/cilium/pkg/controller"
2018
"github.com/cilium/cilium/pkg/defaults"
2119
ipamOption "github.com/cilium/cilium/pkg/ipam/option"
@@ -394,75 +392,7 @@ func (n *NodeDiscovery) mutateNodeResource(ctx context.Context, nodeResource *ci
394392
return n.mutateAzureNodeResource(ctx, nodeResource, ln)
395393

396394
case ipamOption.IPAMAlibabaCloud:
397-
nodeResource.Spec.AlibabaCloud = alibabaCloudTypes.Spec{}
398-
399-
instanceID, err := alibabaCloudMetadata.GetInstanceID(ctx)
400-
if err != nil {
401-
logging.Fatal(n.logger, "Unable to retrieve InstanceID of own ECS instance", logfields.Error, err)
402-
}
403-
404-
if instanceID == "" {
405-
return errors.New("InstanceID of own ECS instance is empty")
406-
}
407-
408-
instanceType, err := alibabaCloudMetadata.GetInstanceType(ctx)
409-
if err != nil {
410-
logging.Fatal(n.logger, "Unable to retrieve InstanceType of own ECS instance", logfields.Error, err)
411-
}
412-
vpcID, err := alibabaCloudMetadata.GetVPCID(ctx)
413-
if err != nil {
414-
logging.Fatal(n.logger, "Unable to retrieve VPC ID of own ECS instance", logfields.Error, err)
415-
}
416-
vpcCidrBlock, err := alibabaCloudMetadata.GetVPCCIDRBlock(ctx)
417-
if err != nil {
418-
logging.Fatal(n.logger, "Unable to retrieve VPC CIDR block of own ECS instance", logfields.Error, err)
419-
}
420-
zoneID, err := alibabaCloudMetadata.GetZoneID(ctx)
421-
if err != nil {
422-
logging.Fatal(n.logger, "Unable to retrieve Zone ID of own ECS instance", logfields.Error, err)
423-
}
424-
nodeResource.Spec.InstanceID = instanceID
425-
nodeResource.Spec.AlibabaCloud.InstanceType = instanceType
426-
nodeResource.Spec.AlibabaCloud.VPCID = vpcID
427-
nodeResource.Spec.AlibabaCloud.CIDRBlock = vpcCidrBlock
428-
nodeResource.Spec.AlibabaCloud.AvailabilityZone = zoneID
429-
430-
nodeResource.Spec.IPAM.PreAllocate = n.config.IPAMPreAllocate
431-
nodeResource.Spec.IPAM.MinAllocate = n.config.IPAMMinAllocate
432-
nodeResource.Spec.IPAM.MaxAllocate = n.config.IPAMMaxAllocate
433-
nodeResource.Spec.AlibabaCloud.VSwitches = n.config.AlibabaCloudVSwitches
434-
nodeResource.Spec.AlibabaCloud.VSwitchTags = n.config.AlibabaCloudVSwitchTags
435-
nodeResource.Spec.AlibabaCloud.SecurityGroups = n.config.AlibabaCloudSecurityGroups
436-
nodeResource.Spec.AlibabaCloud.SecurityGroupTags = n.config.AlibabaCloudSecurityGroupTags
437-
438-
if c := n.cniConfigManager.GetCustomNetConf(); c != nil {
439-
if c.AlibabaCloud.VPCID != "" {
440-
nodeResource.Spec.AlibabaCloud.VPCID = c.AlibabaCloud.VPCID
441-
}
442-
if c.AlibabaCloud.CIDRBlock != "" {
443-
nodeResource.Spec.AlibabaCloud.CIDRBlock = c.AlibabaCloud.CIDRBlock
444-
}
445-
446-
if len(c.AlibabaCloud.VSwitches) > 0 {
447-
nodeResource.Spec.AlibabaCloud.VSwitches = c.AlibabaCloud.VSwitches
448-
}
449-
450-
if len(c.AlibabaCloud.VSwitchTags) > 0 {
451-
nodeResource.Spec.AlibabaCloud.VSwitchTags = c.AlibabaCloud.VSwitchTags
452-
}
453-
454-
if len(c.AlibabaCloud.SecurityGroups) > 0 {
455-
nodeResource.Spec.AlibabaCloud.SecurityGroups = c.AlibabaCloud.SecurityGroups
456-
}
457-
458-
if len(c.AlibabaCloud.SecurityGroupTags) > 0 {
459-
nodeResource.Spec.AlibabaCloud.SecurityGroupTags = c.AlibabaCloud.SecurityGroupTags
460-
}
461-
462-
if c.IPAM.PreAllocate != 0 {
463-
nodeResource.Spec.IPAM.PreAllocate = c.IPAM.PreAllocate
464-
}
465-
}
395+
return n.mutateAlibabaCloudNodeResource(ctx, nodeResource)
466396
}
467397

468398
return nil
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
// SPDX-License-Identifier: Apache-2.0
2+
// Copyright Authors of Cilium
3+
4+
package nodediscovery
5+
6+
import (
7+
"context"
8+
"errors"
9+
10+
alibabaCloudTypes "github.com/cilium/cilium/pkg/alibabacloud/eni/types"
11+
alibabaCloudMetadata "github.com/cilium/cilium/pkg/alibabacloud/metadata"
12+
ciliumv2 "github.com/cilium/cilium/pkg/k8s/apis/cilium.io/v2"
13+
"github.com/cilium/cilium/pkg/logging"
14+
"github.com/cilium/cilium/pkg/logging/logfields"
15+
)
16+
17+
// mutateAlibabaCloudNodeResource fills in the AlibabaCloud-specific fields
18+
// of the CiliumNode resource. It is kept in a separate file so that the
19+
// AlibabaCloud-specific imports are not pulled in via the main
20+
// nodediscovery.go.
21+
func (n *NodeDiscovery) mutateAlibabaCloudNodeResource(ctx context.Context, nodeResource *ciliumv2.CiliumNode) error {
22+
nodeResource.Spec.AlibabaCloud = alibabaCloudTypes.Spec{}
23+
24+
instanceID, err := alibabaCloudMetadata.GetInstanceID(ctx)
25+
if err != nil {
26+
logging.Fatal(n.logger, "Unable to retrieve InstanceID of own ECS instance", logfields.Error, err)
27+
}
28+
29+
if instanceID == "" {
30+
return errors.New("InstanceID of own ECS instance is empty")
31+
}
32+
33+
instanceType, err := alibabaCloudMetadata.GetInstanceType(ctx)
34+
if err != nil {
35+
logging.Fatal(n.logger, "Unable to retrieve InstanceType of own ECS instance", logfields.Error, err)
36+
}
37+
vpcID, err := alibabaCloudMetadata.GetVPCID(ctx)
38+
if err != nil {
39+
logging.Fatal(n.logger, "Unable to retrieve VPC ID of own ECS instance", logfields.Error, err)
40+
}
41+
vpcCidrBlock, err := alibabaCloudMetadata.GetVPCCIDRBlock(ctx)
42+
if err != nil {
43+
logging.Fatal(n.logger, "Unable to retrieve VPC CIDR block of own ECS instance", logfields.Error, err)
44+
}
45+
zoneID, err := alibabaCloudMetadata.GetZoneID(ctx)
46+
if err != nil {
47+
logging.Fatal(n.logger, "Unable to retrieve Zone ID of own ECS instance", logfields.Error, err)
48+
}
49+
nodeResource.Spec.InstanceID = instanceID
50+
nodeResource.Spec.AlibabaCloud.InstanceType = instanceType
51+
nodeResource.Spec.AlibabaCloud.VPCID = vpcID
52+
nodeResource.Spec.AlibabaCloud.CIDRBlock = vpcCidrBlock
53+
nodeResource.Spec.AlibabaCloud.AvailabilityZone = zoneID
54+
55+
nodeResource.Spec.IPAM.PreAllocate = n.config.IPAMPreAllocate
56+
nodeResource.Spec.IPAM.MinAllocate = n.config.IPAMMinAllocate
57+
nodeResource.Spec.IPAM.MaxAllocate = n.config.IPAMMaxAllocate
58+
nodeResource.Spec.AlibabaCloud.VSwitches = n.config.AlibabaCloudVSwitches
59+
nodeResource.Spec.AlibabaCloud.VSwitchTags = n.config.AlibabaCloudVSwitchTags
60+
nodeResource.Spec.AlibabaCloud.SecurityGroups = n.config.AlibabaCloudSecurityGroups
61+
nodeResource.Spec.AlibabaCloud.SecurityGroupTags = n.config.AlibabaCloudSecurityGroupTags
62+
63+
if c := n.cniConfigManager.GetCustomNetConf(); c != nil {
64+
if c.AlibabaCloud.VPCID != "" {
65+
nodeResource.Spec.AlibabaCloud.VPCID = c.AlibabaCloud.VPCID
66+
}
67+
if c.AlibabaCloud.CIDRBlock != "" {
68+
nodeResource.Spec.AlibabaCloud.CIDRBlock = c.AlibabaCloud.CIDRBlock
69+
}
70+
71+
if len(c.AlibabaCloud.VSwitches) > 0 {
72+
nodeResource.Spec.AlibabaCloud.VSwitches = c.AlibabaCloud.VSwitches
73+
}
74+
75+
if len(c.AlibabaCloud.VSwitchTags) > 0 {
76+
nodeResource.Spec.AlibabaCloud.VSwitchTags = c.AlibabaCloud.VSwitchTags
77+
}
78+
79+
if len(c.AlibabaCloud.SecurityGroups) > 0 {
80+
nodeResource.Spec.AlibabaCloud.SecurityGroups = c.AlibabaCloud.SecurityGroups
81+
}
82+
83+
if len(c.AlibabaCloud.SecurityGroupTags) > 0 {
84+
nodeResource.Spec.AlibabaCloud.SecurityGroupTags = c.AlibabaCloud.SecurityGroupTags
85+
}
86+
87+
if c.IPAM.PreAllocate != 0 {
88+
nodeResource.Spec.IPAM.PreAllocate = c.IPAM.PreAllocate
89+
}
90+
}
91+
92+
return nil
93+
}

0 commit comments

Comments
 (0)