From ebf7dd8842e398af6970c5d6b465dc575922e822 Mon Sep 17 00:00:00 2001 From: Paul Meyer <49727155+katexochen@users.noreply.github.com> Date: Tue, 7 Mar 2023 11:58:33 +0100 Subject: [PATCH] openstack: use metadata client where possible Signed-off-by: Paul Meyer <49727155+katexochen@users.noreply.github.com> --- disk-mapper/cmd/main.go | 32 ++++++++++++++++---------------- joinservice/cmd/main.go | 18 ++++++++++++------ 2 files changed, 28 insertions(+), 22 deletions(-) diff --git a/disk-mapper/cmd/main.go b/disk-mapper/cmd/main.go index e574f96cd..9b923a0c1 100644 --- a/disk-mapper/cmd/main.go +++ b/disk-mapper/cmd/main.go @@ -31,6 +31,7 @@ import ( "github.com/edgelesssys/constellation/v2/internal/cloud/cloudprovider" gcpcloud "github.com/edgelesssys/constellation/v2/internal/cloud/gcp" "github.com/edgelesssys/constellation/v2/internal/cloud/metadata" + "github.com/edgelesssys/constellation/v2/internal/cloud/openstack" qemucloud "github.com/edgelesssys/constellation/v2/internal/cloud/qemu" "github.com/edgelesssys/constellation/v2/internal/constants" "github.com/edgelesssys/constellation/v2/internal/grpc/dialer" @@ -64,7 +65,7 @@ func main() { var err error var diskPath string var issuer atls.Issuer - var metadataAPI setup.MetadataAPI + var metadataClient setup.MetadataAPI switch cloudprovider.FromString(*csp) { case cloudprovider.AWS: // on AWS Nitro platform, disks are attached over NVMe @@ -74,9 +75,9 @@ func main() { _ = exportPCRs() log.With(zap.Error(err)).Fatalf("Unable to resolve Azure state disk path") } - metadataAPI, err = awscloud.New(context.Background()) + metadataClient, err = awscloud.New(context.Background()) if err != nil { - log.With(zap.Error(err)).Fatalf("Failed to set up AWS metadata API") + log.With(zap.Error(err)).Fatalf("Failed to set up AWS metadata client") } issuer = aws.NewIssuer(log) @@ -87,9 +88,9 @@ func main() { _ = exportPCRs() log.With(zap.Error(err)).Fatalf("Unable to resolve Azure state disk path") } - metadataAPI, err = azurecloud.New(context.Background()) + metadataClient, err = azurecloud.New(context.Background()) if err != nil { - log.With(zap.Error).Fatalf("Failed to set up Azure metadata API") + log.With(zap.Error).Fatalf("Failed to set up Azure metadata client") } issuer = azure.NewIssuer(log) @@ -103,26 +104,25 @@ func main() { issuer = gcp.NewIssuer(log) gcpMeta, err := gcpcloud.New(context.Background()) if err != nil { - log.With(zap.Error).Fatalf("Failed to create GCP client") + log.With(zap.Error).Fatalf("Failed to create GCP metadata client") } defer gcpMeta.Close() - metadataAPI = gcpMeta + metadataClient = gcpMeta case cloudprovider.OpenStack: diskPath = openstackStateDiskPath - // TODO(malt3): implement OpenStack metadata API and quote issuer - // issuer = ... - // metadataAPI = ... - - // TODO(katexochen): Remove the following + metadataClient, err = openstack.New(context.Background()) + if err != nil { + log.With(zap.Error).Fatalf("Failed to create OpenStack metadata client") + } + // TODO(malt3): implement OpenStack quote issuer issuer = qemu.NewIssuer(log) - metadataAPI = qemucloud.New() _ = exportPCRs() case cloudprovider.QEMU: diskPath = qemuStateDiskPath issuer = qemu.NewIssuer(log) - metadataAPI = qemucloud.New() + metadataClient = qemucloud.New() _ = exportPCRs() default: @@ -154,14 +154,14 @@ func main() { if mapper.IsLUKSDevice() { // set up rejoin client var self metadata.InstanceMetadata - self, err = metadataAPI.Self(context.Background()) + self, err = metadataClient.Self(context.Background()) if err != nil { log.With(zap.Error(err)).Fatalf("Failed to get self metadata") } rejoinClient := rejoinclient.New( dialer.New(issuer, nil, &net.Dialer{}), self, - metadataAPI, + metadataClient, log.Named("rejoinClient"), ) diff --git a/joinservice/cmd/main.go b/joinservice/cmd/main.go index c0f547262..616703bd1 100644 --- a/joinservice/cmd/main.go +++ b/joinservice/cmd/main.go @@ -21,6 +21,7 @@ import ( "github.com/edgelesssys/constellation/v2/internal/cloud/cloudprovider" gcpcloud "github.com/edgelesssys/constellation/v2/internal/cloud/gcp" "github.com/edgelesssys/constellation/v2/internal/cloud/metadata" + "github.com/edgelesssys/constellation/v2/internal/cloud/openstack" qemucloud "github.com/edgelesssys/constellation/v2/internal/cloud/qemu" "github.com/edgelesssys/constellation/v2/internal/constants" "github.com/edgelesssys/constellation/v2/internal/file" @@ -115,17 +116,17 @@ func main() { } func getVPCIP(ctx context.Context, provider string) (string, error) { - var metadata metadataAPI + var metadataClient metadataAPI var err error switch cloudprovider.FromString(provider) { case cloudprovider.AWS: - metadata, err = awscloud.New(ctx) + metadataClient, err = awscloud.New(ctx) if err != nil { return "", err } case cloudprovider.Azure: - metadata, err = azurecloud.New(ctx) + metadataClient, err = azurecloud.New(ctx) if err != nil { return "", err } @@ -135,14 +136,19 @@ func getVPCIP(ctx context.Context, provider string) (string, error) { return "", err } defer gcpMeta.Close() - metadata = gcpMeta + metadataClient = gcpMeta + case cloudprovider.OpenStack: + metadataClient, err = openstack.New(ctx) + if err != nil { + return "", err + } case cloudprovider.QEMU: - metadata = qemucloud.New() + metadataClient = qemucloud.New() default: return "", errors.New("unsupported cloud provider") } - self, err := metadata.Self(ctx) + self, err := metadataClient.Self(ctx) if err != nil { return "", err }