refactoring: utils functions to get info from tags

This commit is contained in:
Leïla MARABESE 2023-07-12 16:23:25 +02:00
parent 1675f21b0a
commit 9cdc30dfcb
5 changed files with 43 additions and 46 deletions

View File

@ -100,9 +100,7 @@ func (i *nodeIdentifier) IdentifyNode(ctx context.Context, node *corev1.Node) (*
} }
labels := map[string]string{} labels := map[string]string{}
for _, tag := range server.Tags { role := scaleway.InstanceRoleFromTags(server.Tags)
if strings.HasPrefix(tag, scaleway.TagNameRolePrefix) {
role := strings.TrimPrefix(tag, scaleway.TagNameRolePrefix+"=")
switch kops.InstanceGroupRole(role) { switch kops.InstanceGroupRole(role) {
case kops.InstanceGroupRoleControlPlane: case kops.InstanceGroupRoleControlPlane:
labels[nodelabels.RoleLabelControlPlane20] = "" labels[nodelabels.RoleLabelControlPlane20] = ""
@ -113,8 +111,6 @@ func (i *nodeIdentifier) IdentifyNode(ctx context.Context, node *corev1.Node) (*
default: default:
klog.Warningf("Unknown node role %q for server %s(%d)", role, server.Name, server.ID) klog.Warningf("Unknown node role %q for server %s(%d)", role, server.Name, server.ID)
} }
}
}
info := &nodeidentity.Info{ info := &nodeidentity.Info{
InstanceID: serverID, InstanceID: serverID,

View File

@ -19,7 +19,6 @@ package protokube
import ( import (
"fmt" "fmt"
"net" "net"
"strings"
"github.com/scaleway/scaleway-sdk-go/api/instance/v1" "github.com/scaleway/scaleway-sdk-go/api/instance/v1"
"github.com/scaleway/scaleway-sdk-go/scw" "github.com/scaleway/scaleway-sdk-go/scw"
@ -108,11 +107,8 @@ func (s ScwCloudProvider) InstanceInternalIP() net.IP {
} }
func (s *ScwCloudProvider) GossipSeeds() (gossip.SeedProvider, error) { func (s *ScwCloudProvider) GossipSeeds() (gossip.SeedProvider, error) {
for _, tag := range s.server.Tags { clusterName := scaleway.ClusterNameFromTags(s.server.Tags)
if !strings.HasPrefix(tag, scaleway.TagClusterName) { if clusterName != "" {
continue
}
clusterName := strings.TrimPrefix(tag, scaleway.TagClusterName+"=")
return gossipscw.NewSeedProvider(s.scwClient, clusterName) return gossipscw.NewSeedProvider(s.scwClient, clusterName)
} }
return nil, fmt.Errorf("failed to find cluster name label for running server: %v", s.server.Tags) return nil, fmt.Errorf("failed to find cluster name label for running server: %v", s.server.Tags)

View File

@ -147,12 +147,7 @@ func NewScwCloud(tags map[string]string) (ScwCloud, error) {
} }
func (s *scwCloudImplementation) ClusterName(tags []string) string { func (s *scwCloudImplementation) ClusterName(tags []string) string {
for _, tag := range tags { return ClusterNameFromTags(tags)
if strings.HasPrefix(tag, TagClusterName) {
return strings.TrimPrefix(tag, TagClusterName+"=")
}
}
return ""
} }
func (s *scwCloudImplementation) DNS() (dnsprovider.Interface, error) { func (s *scwCloudImplementation) DNS() (dnsprovider.Interface, error) {
@ -345,13 +340,7 @@ func findServerGroups(s *scwCloudImplementation, clusterName string) (map[string
serverGroups := make(map[string][]*instance.Server) serverGroups := make(map[string][]*instance.Server)
for _, server := range servers { for _, server := range servers {
igName := "" igName := InstanceGroupNameFromTags(server.Tags)
for _, tag := range server.Tags {
if strings.HasPrefix(tag, TagInstanceGroup) {
igName = strings.TrimPrefix(tag, TagInstanceGroup+"=")
break
}
}
serverGroups[igName] = append(serverGroups[igName], server) serverGroups[igName] = append(serverGroups[igName], server)
} }
@ -376,11 +365,7 @@ func buildCloudGroup(ig *kops.InstanceGroup, sg []*instance.Server, nodeMap map[
} }
cloudInstance.State = cloudinstances.State(server.State) cloudInstance.State = cloudinstances.State(server.State)
cloudInstance.MachineType = server.CommercialType cloudInstance.MachineType = server.CommercialType
for _, tag := range server.Tags { cloudInstance.Roles = append(cloudInstance.Roles, InstanceRoleFromTags(server.Tags))
if strings.HasPrefix(tag, TagNameRolePrefix) {
cloudInstance.Roles = append(cloudInstance.Roles, strings.TrimPrefix(tag, TagNameRolePrefix))
}
}
if server.PrivateIP != nil { if server.PrivateIP != nil {
cloudInstance.PrivateIP = *server.PrivateIP cloudInstance.PrivateIP = *server.PrivateIP
} }

View File

@ -68,6 +68,33 @@ func ParseRegionFromZone(zone scw.Zone) (region scw.Region, err error) {
return region, nil return region, nil
} }
func ClusterNameFromTags(tags []string) string {
for _, tag := range tags {
if strings.HasPrefix(tag, TagClusterName) {
return strings.TrimPrefix(tag, TagClusterName+"=")
}
}
return ""
}
func InstanceGroupNameFromTags(tags []string) string {
for _, tag := range tags {
if strings.HasPrefix(tag, TagInstanceGroup) {
return strings.TrimPrefix(tag, TagInstanceGroup+"=")
}
}
return ""
}
func InstanceRoleFromTags(tags []string) string {
for _, tag := range tags {
if strings.HasPrefix(tag, TagNameRolePrefix) {
return strings.TrimPrefix(tag, TagNameRolePrefix+"=")
}
}
return ""
}
func getScalewayProfile() (*scw.Profile, error) { func getScalewayProfile() (*scw.Profile, error) {
scwProfileName := os.Getenv("SCW_PROFILE") scwProfileName := os.Getenv("SCW_PROFILE")
if scwProfileName == "" { if scwProfileName == "" {

View File

@ -105,16 +105,9 @@ func (v scalewayVerifier) VerifyToken(ctx context.Context, rawRequest *http.Requ
challengeEndPoints = append(challengeEndPoints, net.JoinHostPort(server.IPv6.Address.String(), strconv.Itoa(wellknownports.NodeupChallenge))) challengeEndPoints = append(challengeEndPoints, net.JoinHostPort(server.IPv6.Address.String(), strconv.Itoa(wellknownports.NodeupChallenge)))
} }
igName := ""
for _, tag := range server.Tags {
if strings.HasPrefix(tag, TagInstanceGroup) {
igName = strings.TrimPrefix(tag, TagInstanceGroup+"=")
}
}
result := &bootstrap.VerifyResult{ result := &bootstrap.VerifyResult{
NodeName: server.Name, NodeName: server.Name,
InstanceGroupName: igName, InstanceGroupName: InstanceGroupNameFromTags(server.Tags),
CertificateNames: addresses, CertificateNames: addresses,
ChallengeEndpoint: challengeEndPoints[0], ChallengeEndpoint: challengeEndPoints[0],
} }