64 lines
1.8 KiB
Go
Raw Normal View History

/*
Copyright (c) Edgeless Systems GmbH
SPDX-License-Identifier: AGPL-3.0-only
*/
2022-06-21 17:59:12 +02:00
package metadata
import (
"context"
"fmt"
"net"
"strconv"
2022-09-21 13:47:57 +02:00
"github.com/edgelesssys/constellation/v2/internal/constants"
"github.com/edgelesssys/constellation/v2/internal/role"
2022-06-21 17:59:12 +02:00
)
// InstanceMetadata describes metadata of a peer.
2022-06-21 17:59:12 +02:00
type InstanceMetadata struct {
Name string
ProviderID string
Role role.Role
// VPCIP is the primary IP address of the instance in the VPC.
VPCIP string
2022-10-26 00:27:40 +02:00
// SecondaryIPRange is the VPC wide CIDR from which subnets are attached to VMs as AliasIPRanges.
// May be empty on certain CSPs.
SecondaryIPRange string
// AliasIPRanges is a list of IP ranges that are attached.
// May be empty on certain CSPs.
2022-10-26 00:27:40 +02:00
AliasIPRanges []string
2022-06-21 17:59:12 +02:00
}
// InstanceSelfer provide instance metadata about themselves.
2022-06-28 16:08:05 +02:00
type InstanceSelfer interface {
// Self retrieves the current instance.
Self(ctx context.Context) (InstanceMetadata, error)
}
// InstanceLister list information about instance metadata.
2022-06-28 16:08:05 +02:00
type InstanceLister interface {
// List retrieves all instances belonging to the current constellation.
List(ctx context.Context) ([]InstanceMetadata, error)
}
// JoinServiceEndpoints returns the list of endpoints for the join service, which are running on the control plane nodes.
func JoinServiceEndpoints(ctx context.Context, lister InstanceLister) ([]string, error) {
2022-06-29 16:17:23 +02:00
instances, err := lister.List(ctx)
if err != nil {
return nil, fmt.Errorf("retrieving instances list from cloud provider: %w", err)
}
joinEndpoints := []string{}
2022-06-29 16:17:23 +02:00
for _, instance := range instances {
if instance.Role == role.ControlPlane {
if instance.VPCIP != "" {
joinEndpoints = append(joinEndpoints, net.JoinHostPort(instance.VPCIP, strconv.Itoa(constants.JoinServiceNodePort)))
2022-06-29 16:17:23 +02:00
}
}
}
return joinEndpoints, nil
2022-06-29 16:17:23 +02:00
}