constellation/internal/cloud/metadata/metadata.go

70 lines
2.0 KiB
Go
Raw Normal View History

2022-06-21 11:59:12 -04:00
package metadata
import (
"context"
"fmt"
"net"
"strconv"
"github.com/edgelesssys/constellation/bootstrapper/role"
2022-06-21 11:59:12 -04:00
"github.com/edgelesssys/constellation/internal/constants"
)
// InstanceMetadata describes metadata of a peer.
2022-06-21 11:59:12 -04:00
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
}
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)
}
// InitServerEndpoints returns the list of endpoints for the init server, which are running on the control plane nodes.
2022-06-28 10:08:05 -04:00
func InitServerEndpoints(ctx context.Context, lister InstanceLister) ([]string, error) {
instances, err := lister.List(ctx)
2022-06-21 11:59:12 -04:00
if err != nil {
return nil, fmt.Errorf("retrieving instances list from cloud provider: %w", err)
}
2022-06-28 10:08:05 -04:00
initServerEndpoints := []string{}
2022-06-21 11:59:12 -04:00
for _, instance := range instances {
if instance.Role == role.ControlPlane {
2022-06-21 11:59:12 -04:00
for _, ip := range instance.PrivateIPs {
initServerEndpoints = append(initServerEndpoints, net.JoinHostPort(ip, strconv.Itoa(constants.BootstrapperPort)))
2022-06-21 11:59:12 -04:00
}
}
}
2022-06-28 10:08:05 -04:00
return initServerEndpoints, nil
2022-06-21 11:59:12 -04:00
}
2022-06-29 10:17:23 -04:00
// 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
}