mirror of
https://github.com/edgelesssys/constellation.git
synced 2024-12-27 08:29:33 -05:00
260d2571c1
Co-authored-by: Daniel Weiße <66256922+daniel-weisse@users.noreply.github.com> Co-authored-by: 3u13r <lc@edgeless.systems>
70 lines
2.0 KiB
Go
70 lines
2.0 KiB
Go
package metadata
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"net"
|
|
"strconv"
|
|
|
|
"github.com/edgelesssys/constellation/bootstrapper/role"
|
|
"github.com/edgelesssys/constellation/internal/constants"
|
|
)
|
|
|
|
// InstanceMetadata describes metadata of a peer.
|
|
type InstanceMetadata struct {
|
|
Name string
|
|
ProviderID string
|
|
Role role.Role
|
|
PrivateIPs []string
|
|
PublicIPs []string
|
|
AliasIPRanges []string
|
|
// SSHKeys maps usernames to ssh public keys.
|
|
SSHKeys map[string][]string
|
|
}
|
|
|
|
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)
|
|
}
|
|
|
|
// InitServerEndpoints returns the list of endpoints for the init server, which are running on the control plane nodes.
|
|
func InitServerEndpoints(ctx context.Context, lister InstanceLister) ([]string, error) {
|
|
instances, err := lister.List(ctx)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("retrieving instances list from cloud provider: %w", err)
|
|
}
|
|
initServerEndpoints := []string{}
|
|
for _, instance := range instances {
|
|
if instance.Role == role.ControlPlane {
|
|
for _, ip := range instance.PrivateIPs {
|
|
initServerEndpoints = append(initServerEndpoints, net.JoinHostPort(ip, strconv.Itoa(constants.BootstrapperPort)))
|
|
}
|
|
}
|
|
}
|
|
|
|
return initServerEndpoints, nil
|
|
}
|
|
|
|
// KMSEndpoints returns the list of endpoints for the KMS service, which are running on the control plane nodes.
|
|
func KMSEndpoints(ctx context.Context, lister InstanceLister) ([]string, error) {
|
|
instances, err := lister.List(ctx)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("retrieving instances list from cloud provider: %w", err)
|
|
}
|
|
kmsEndpoints := []string{}
|
|
for _, instance := range instances {
|
|
if instance.Role == role.ControlPlane {
|
|
for _, ip := range instance.PrivateIPs {
|
|
kmsEndpoints = append(kmsEndpoints, net.JoinHostPort(ip, strconv.Itoa(constants.KMSNodePort)))
|
|
}
|
|
}
|
|
}
|
|
|
|
return kmsEndpoints, nil
|
|
}
|