2022-09-05 03:06:08 -04:00
|
|
|
/*
|
|
|
|
Copyright (c) Edgeless Systems GmbH
|
|
|
|
|
|
|
|
SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
*/
|
|
|
|
|
2022-06-21 11:59:12 -04:00
|
|
|
package metadata
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"fmt"
|
|
|
|
"net"
|
|
|
|
"strconv"
|
|
|
|
|
2022-09-21 07:47:57 -04:00
|
|
|
"github.com/edgelesssys/constellation/v2/internal/constants"
|
|
|
|
"github.com/edgelesssys/constellation/v2/internal/role"
|
2022-06-21 11:59:12 -04:00
|
|
|
)
|
|
|
|
|
2022-07-08 04:59:59 -04:00
|
|
|
// InstanceMetadata describes metadata of a peer.
|
2022-06-21 11:59:12 -04:00
|
|
|
type InstanceMetadata struct {
|
2022-08-04 05:08:20 -04:00
|
|
|
Name string
|
|
|
|
ProviderID string
|
|
|
|
Role role.Role
|
|
|
|
// VPCIP is the primary IP address of the instance in the VPC.
|
|
|
|
VPCIP string
|
|
|
|
// PublicIP is the primary public IP of the instance, if available, empty string otherwise.
|
|
|
|
PublicIP string
|
2022-06-21 11:59:12 -04:00
|
|
|
AliasIPRanges []string
|
|
|
|
// SSHKeys maps usernames to ssh public keys.
|
|
|
|
SSHKeys map[string][]string
|
2022-10-24 18:49:58 -04:00
|
|
|
|
|
|
|
// SubnetworkCIDR is the CIDR of the subnetwork the instance is in.
|
|
|
|
// May be empty on certain CSPs.
|
|
|
|
SubnetworkCIDR string
|
2022-06-21 11:59:12 -04:00
|
|
|
}
|
|
|
|
|
2022-06-28 10:08:05 -04:00
|
|
|
type InstanceSelfer interface {
|
|
|
|
// Self retrieves the current instance.
|
|
|
|
Self(ctx context.Context) (InstanceMetadata, error)
|
|
|
|
}
|
|
|
|
|
|
|
|
type InstanceLister interface {
|
|
|
|
// List retrieves all instances belonging to the current constellation.
|
|
|
|
List(ctx context.Context) ([]InstanceMetadata, error)
|
|
|
|
}
|
|
|
|
|
2022-07-26 04:58:39 -04:00
|
|
|
// 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 10:17:23 -04:00
|
|
|
instances, err := lister.List(ctx)
|
|
|
|
if err != nil {
|
|
|
|
return nil, fmt.Errorf("retrieving instances list from cloud provider: %w", err)
|
|
|
|
}
|
2022-07-26 04:58:39 -04:00
|
|
|
joinEndpoints := []string{}
|
2022-06-29 10:17:23 -04:00
|
|
|
for _, instance := range instances {
|
|
|
|
if instance.Role == role.ControlPlane {
|
2022-08-04 05:08:20 -04:00
|
|
|
if instance.VPCIP != "" {
|
|
|
|
joinEndpoints = append(joinEndpoints, net.JoinHostPort(instance.VPCIP, strconv.Itoa(constants.JoinServiceNodePort)))
|
2022-06-29 10:17:23 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-07-26 04:58:39 -04:00
|
|
|
return joinEndpoints, nil
|
2022-06-29 10:17:23 -04:00
|
|
|
}
|