From 24cb8a9de059d33e0cac078e9b3e14237d3e74c5 Mon Sep 17 00:00:00 2001 From: Beraldo Leal Date: Thu, 18 Jul 2024 15:57:49 -0400 Subject: [PATCH] gcp: introducing GCP cloud-provider This is basically Cfir's work with some modifications to support the repository layout and small fixes. Rigth now, GKE is not supported because #1909, so this initial implementation requires a k8s cluster (either local or at Google Compute Engine). Signed-off-by: Cfir Cohen Signed-off-by: Beraldo Leal --- .gitignore | 3 + src/cloud-api-adaptor/Makefile | 4 +- .../cmd/cloud-api-adaptor/gcp.go | 10 + src/cloud-api-adaptor/entrypoint.sh | 23 ++- src/cloud-api-adaptor/go.mod | 9 +- src/cloud-api-adaptor/go.sum | 18 +- .../install/overlays/gcp/kustomization.yaml | 55 +++++ .../overlays/gcp/tls_certs_volume_mount.yaml | 21 ++ src/cloud-providers/gcp/manager.go | 40 ++++ src/cloud-providers/gcp/provider.go | 191 ++++++++++++++++++ src/cloud-providers/gcp/types.go | 21 ++ src/cloud-providers/go.mod | 14 +- src/cloud-providers/go.sum | 34 ++++ src/csi-wrapper/go.mod | 2 +- src/csi-wrapper/go.sum | 4 +- src/peerpod-ctrl/Makefile | 2 +- 16 files changed, 438 insertions(+), 13 deletions(-) create mode 100644 src/cloud-api-adaptor/cmd/cloud-api-adaptor/gcp.go create mode 100644 src/cloud-api-adaptor/install/overlays/gcp/kustomization.yaml create mode 100644 src/cloud-api-adaptor/install/overlays/gcp/tls_certs_volume_mount.yaml create mode 100644 src/cloud-providers/gcp/manager.go create mode 100644 src/cloud-providers/gcp/provider.go create mode 100644 src/cloud-providers/gcp/types.go diff --git a/.gitignore b/.gitignore index 166a6b8acc..f8a5d1a893 100644 --- a/.gitignore +++ b/.gitignore @@ -36,3 +36,6 @@ src/cloud-api-adaptor/*.qcow2 .git-commit .git-commit.tmp *.tar.gz + +# Secrets +install/overlays/gcp/GCP_CREDENTIALS diff --git a/src/cloud-api-adaptor/Makefile b/src/cloud-api-adaptor/Makefile index 651f401f57..92a27a532f 100644 --- a/src/cloud-api-adaptor/Makefile +++ b/src/cloud-api-adaptor/Makefile @@ -28,9 +28,9 @@ RESOURCE_CTRL ?= true YQ_CHECKSUM_${ARCH} ?= $(YQ_CHECKSUM) # BUILTIN_CLOUD_PROVIDERS is used for binary build -- what providers are built in the binaries. ifeq ($(RELEASE_BUILD),true) - BUILTIN_CLOUD_PROVIDERS ?= aws azure ibmcloud vsphere + BUILTIN_CLOUD_PROVIDERS ?= aws azure gcp ibmcloud vsphere else - BUILTIN_CLOUD_PROVIDERS ?= aws azure ibmcloud vsphere libvirt docker + BUILTIN_CLOUD_PROVIDERS ?= aws azure gcp ibmcloud vsphere libvirt docker endif all: build diff --git a/src/cloud-api-adaptor/cmd/cloud-api-adaptor/gcp.go b/src/cloud-api-adaptor/cmd/cloud-api-adaptor/gcp.go new file mode 100644 index 0000000000..3649480b86 --- /dev/null +++ b/src/cloud-api-adaptor/cmd/cloud-api-adaptor/gcp.go @@ -0,0 +1,10 @@ +//go:build gcp + +// (C) Copyright Confidential Containers Contributors +// SPDX-License-Identifier: Apache-2.0 + +package main + +import ( + _ "github.com/confidential-containers/cloud-api-adaptor/src/cloud-providers/gcp" +) diff --git a/src/cloud-api-adaptor/entrypoint.sh b/src/cloud-api-adaptor/entrypoint.sh index 113c2ca9df..db18a3fc6c 100755 --- a/src/cloud-api-adaptor/entrypoint.sh +++ b/src/cloud-api-adaptor/entrypoint.sh @@ -85,6 +85,22 @@ azure() { ${optionals} } +gcp() { +test_vars GCP_CREDENTIALS + +[[ "${PODVM_IMAGE_NAME}" ]] && optionals+="-gcp-image-name ${PODVM_IMAGE_NAME} " +[[ "${GCP_PROJECT_ID}" ]] && optionals+="-gcp-project-id ${GCP_PROJECT_ID} " +[[ "${GCP_ZONE}" ]] && optionals+="-gcp-zone ${GCP_ZONE} " # if not set retrieved from IMDS +[[ "${GCP_MACHINE_TYPE}" ]] && optionals+="-gcp-machine-type ${GCP_MACHINE_TYPE} " # default e2-medium +[[ "${GCP_NETWORK}" ]] && optionals+="-gcp-network ${GCP_NETWORK} " # defaults to 'default' + +set -x +exec cloud-api-adaptor gcp \ + -pods-dir /run/peerpod/pods \ + ${optionals} \ + -socket /run/peerpod/hypervisor.sock +} + ibmcloud() { one_of IBMCLOUD_API_KEY IBMCLOUD_IAM_PROFILE_ID @@ -179,9 +195,10 @@ docker() { help_msg() { cat < # set - path to ca.crt +# - # set - path to client.crt +# - # set - path to client.key +##TLS_SETTINGS + +patchesStrategicMerge: +##TLS_SETTINGS + #- tls_certs_volume_mount.yaml # set (for tls) +##TLS_SETTINGS diff --git a/src/cloud-api-adaptor/install/overlays/gcp/tls_certs_volume_mount.yaml b/src/cloud-api-adaptor/install/overlays/gcp/tls_certs_volume_mount.yaml new file mode 100644 index 0000000000..c82c10f399 --- /dev/null +++ b/src/cloud-api-adaptor/install/overlays/gcp/tls_certs_volume_mount.yaml @@ -0,0 +1,21 @@ +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: cloud-api-adaptor-daemonset + namespace: confidential-containers-system + labels: + app: cloud-api-adaptor +spec: + template: + spec: + containers: + - name: cloud-api-adaptor-con + volumeMounts: + - mountPath: /etc/certificates + name: certs + volumes: + - name: certs + secret: + secretName: certs-for-tls + +# to apply this uncomment the patchesStrategicMerge of this file in kustomization.yaml diff --git a/src/cloud-providers/gcp/manager.go b/src/cloud-providers/gcp/manager.go new file mode 100644 index 0000000000..5482ec7d82 --- /dev/null +++ b/src/cloud-providers/gcp/manager.go @@ -0,0 +1,40 @@ +// (C) Copyright Confidential Containers Contributors +// SPDX-License-Identifier: Apache-2.0 + +package gcp + +import ( + "flag" + + provider "github.com/confidential-containers/cloud-api-adaptor/src/cloud-providers" +) + +var gcpcfg Config + +type Manager struct{} + +func init() { + provider.AddCloudProvider("gcp", &Manager{}) +} + +func (_ *Manager) ParseCmd(flags *flag.FlagSet) { + + flags.StringVar(&gcpcfg.GcpCredentials, "gcp-credentials", "", "Google Application Credentials, defaults to `GCP_CREDENTIALS`") + flags.StringVar(&gcpcfg.ProjectId, "gcp-project-id", "", "GCP Project ID") + flags.StringVar(&gcpcfg.Zone, "gcp-zone", "", "Zone") + flags.StringVar(&gcpcfg.ImageName, "gcp-image-name", "", "Pod VM image name") + flags.StringVar(&gcpcfg.MachineType, "gcp-machine-type", "e2-medium", "Pod VM instance type") + flags.StringVar(&gcpcfg.Network, "gcp-network", "", "Network ID to be used for the Pod VMs") +} + +func (_ *Manager) LoadEnv() { + provider.DefaultToEnv(&gcpcfg.GcpCredentials, "GCP_CREDENTIALS", "") +} + +func (_ *Manager) NewProvider() (provider.Provider, error) { + return NewProvider(&gcpcfg) +} + +func (_ *Manager) GetConfig() (config *Config) { + return &gcpcfg +} diff --git a/src/cloud-providers/gcp/provider.go b/src/cloud-providers/gcp/provider.go new file mode 100644 index 0000000000..22227803cf --- /dev/null +++ b/src/cloud-providers/gcp/provider.go @@ -0,0 +1,191 @@ +// (C) Copyright Confidential Containers Contributors +// SPDX-License-Identifier: Apache-2.0 + +package gcp + +import ( + "context" + "encoding/base64" + "fmt" + "log" + "net/netip" + + compute "cloud.google.com/go/compute/apiv1" + computepb "cloud.google.com/go/compute/apiv1/computepb" + provider "github.com/confidential-containers/cloud-api-adaptor/src/cloud-providers" + "github.com/confidential-containers/cloud-api-adaptor/src/cloud-providers/util" + "github.com/confidential-containers/cloud-api-adaptor/src/cloud-providers/util/cloudinit" + "golang.org/x/oauth2/google" + option "google.golang.org/api/option" + proto "google.golang.org/protobuf/proto" +) + +var logger = log.New(log.Writer(), "[adaptor/cloud/gcp] ", log.LstdFlags|log.Lmsgprefix) +var computeScope = "https://www.googleapis.com/auth/compute" + +const maxInstanceNameLen = 63 + +type gcpProvider struct { + serviceConfig *Config + instancesClient *compute.InstancesClient +} + +func (p *gcpProvider) ConfigVerifier() error { + return nil +} + +func NewProvider(config *Config) (provider.Provider, error) { + logger.Printf("gcp config: %#v", config.Redact()) + provider := &gcpProvider{ + serviceConfig: config, + instancesClient: nil, + } + if config.GcpCredentials != "" { + creds, err := google.CredentialsFromJSON(context.TODO(), []byte(config.GcpCredentials), computeScope) + if err != nil { + return nil, fmt.Errorf("configuration error when using creds: %s", err) + } + provider.instancesClient, err = compute.NewInstancesRESTClient(context.TODO(), option.WithCredentials(creds)) + if err != nil { + return nil, fmt.Errorf("NewInstancesRESTClient with credentials error: %s", err) + } + } else { + var err error + provider.instancesClient, err = compute.NewInstancesRESTClient(context.TODO()) + if err != nil { + return nil, fmt.Errorf("NewInstancesRESTClient error: %s", err) + } + } + return provider, nil +} + +func getIPs(instance *computepb.Instance) ([]netip.Addr, error) { + var podNodeIPs []netip.Addr + for _, nic := range instance.GetNetworkInterfaces() { + for _, access := range nic.GetAccessConfigs() { + ipStr := access.GetNatIP() + ip, err := netip.ParseAddr(ipStr) + if err != nil { + return nil, fmt.Errorf("failed to parse pod node IP %q: %w", ipStr, err) + } + podNodeIPs = append(podNodeIPs, ip) + logger.Printf("%s", ip.String()) + } + } + return podNodeIPs, nil +} + +func (p *gcpProvider) CreateInstance(ctx context.Context, podName, sandboxID string, cloudConfig cloudinit.CloudConfigGenerator, spec provider.InstanceTypeSpec) (*provider.Instance, error) { + + instanceName := util.GenerateInstanceName(podName, sandboxID, maxInstanceNameLen) + logger.Printf("CreateInstance: name: %q", instanceName) + + userData, err := cloudConfig.Generate() + if err != nil { + return nil, err + } + + //Convert userData to base64 + userDataEnc := base64.StdEncoding.EncodeToString([]byte(userData)) + logger.Printf("userDataEnc: %s", userDataEnc) + + insertReq := &computepb.InsertInstanceRequest{ + Project: p.serviceConfig.ProjectId, + Zone: p.serviceConfig.Zone, + InstanceResource: &computepb.Instance{ + Name: proto.String(instanceName), + Disks: []*computepb.AttachedDisk{ + { + InitializeParams: &computepb.AttachedDiskInitializeParams{ + DiskSizeGb: proto.Int64(20), + SourceImage: proto.String(fmt.Sprintf("projects/%s/global/images/%s", p.serviceConfig.ProjectId, p.serviceConfig.ImageName)), + DiskType: proto.String(fmt.Sprintf("zones/%s/diskTypes/pd-standard", p.serviceConfig.Zone)), + }, + AutoDelete: proto.Bool(true), + Boot: proto.Bool(true), + Type: proto.String(computepb.AttachedDisk_PERSISTENT.String()), + }, + }, + Metadata: &computepb.Metadata{ + Items: []*computepb.Items{ + { + Key: proto.String("user-data"), + Value: proto.String(userDataEnc), + }, + { + Key: proto.String("user-data-encoding"), + Value: proto.String("base64"), + }, + }, + }, + MachineType: proto.String(fmt.Sprintf("zones/%s/machineTypes/%s", p.serviceConfig.Zone, p.serviceConfig.MachineType)), + NetworkInterfaces: []*computepb.NetworkInterface{ + { + AccessConfigs: []*computepb.AccessConfig{ + { + Name: proto.String("External NAT"), + NetworkTier: proto.String("PREMIUM"), + }, + }, + StackType: proto.String("IPV4_Only"), + Name: proto.String(p.serviceConfig.Network), + }, + }, + }, + } + op, err := p.instancesClient.Insert(ctx, insertReq) + if err != nil { + return nil, fmt.Errorf("Instances.Insert error: %s. req: %v", err, insertReq) + } + err = op.Wait(ctx) + if err != nil { + return nil, fmt.Errorf("waiting for Instances.Insert error: %s. req: %v", err, insertReq) + } + logger.Printf("created an instance %s for sandbox %s", instanceName, sandboxID) + + getReq := &computepb.GetInstanceRequest{ + Project: p.serviceConfig.ProjectId, + Zone: p.serviceConfig.Zone, + Instance: instanceName, + } + + instance, err := p.instancesClient.Get(ctx, getReq) + if err != nil { + return nil, fmt.Errorf("unable to get instance: %w, req: %v", err, getReq) + } + logger.Printf("instance name %s, id %d", instance.GetName(), instance.GetId()) + + ips, err := getIPs(instance) + if err != nil { + logger.Printf("failed to get IPs for the instance: %v", err) + return nil, err + } + + return &provider.Instance{ + ID: instance.GetName(), + Name: instance.GetName(), + IPs: ips, + }, nil +} + +func (p *gcpProvider) DeleteInstance(ctx context.Context, instanceID string) error { + req := &computepb.DeleteInstanceRequest{ + Project: p.serviceConfig.ProjectId, + Zone: p.serviceConfig.Zone, + Instance: instanceID, + } + op, err := p.instancesClient.Delete(ctx, req) + if err != nil { + return fmt.Errorf("Instances.Delete error: %w, req: %v", err, req) + } + err = op.Wait(ctx) + if err != nil { + return fmt.Errorf("waiting for Instances.Delete error: %s. req: %v", err, req) + } + logger.Printf("deleted an instance %s", instanceID) + return nil +} + +func (p *gcpProvider) Teardown() error { + return nil +} diff --git a/src/cloud-providers/gcp/types.go b/src/cloud-providers/gcp/types.go new file mode 100644 index 0000000000..617b431d02 --- /dev/null +++ b/src/cloud-providers/gcp/types.go @@ -0,0 +1,21 @@ +// (C) Copyright Confidential Containers Contributors +// SPDX-License-Identifier: Apache-2.0 + +package gcp + +import ( + "github.com/confidential-containers/cloud-api-adaptor/src/cloud-providers/util" +) + +type Config struct { + GcpCredentials string + ProjectId string + Zone string + ImageName string + MachineType string + Network string +} + +func (c Config) Redact() Config { + return *util.RedactStruct(&c, "GcpCredentials").(*Config) +} diff --git a/src/cloud-providers/go.mod b/src/cloud-providers/go.mod index 90f45b8c46..5985e7c8b7 100644 --- a/src/cloud-providers/go.mod +++ b/src/cloud-providers/go.mod @@ -3,6 +3,7 @@ module github.com/confidential-containers/cloud-api-adaptor/src/cloud-providers go 1.21 require ( + cloud.google.com/go/compute v1.23.3 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.11.1 github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.6.0 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v4 v4.2.1 @@ -23,6 +24,9 @@ require ( github.com/kdomanski/iso9660 v0.4.0 github.com/stretchr/testify v1.9.0 github.com/vmware/govmomi v0.33.1 + golang.org/x/oauth2 v0.17.0 + google.golang.org/api v0.149.0 + google.golang.org/protobuf v1.33.0 gopkg.in/yaml.v2 v2.4.0 k8s.io/apimachinery v0.26.0 k8s.io/client-go v0.26.0 @@ -31,6 +35,7 @@ require ( ) require ( + cloud.google.com/go/compute/metadata v0.2.3 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.8.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork v1.1.0 // indirect github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 // indirect @@ -69,11 +74,15 @@ require ( github.com/go-playground/validator/v10 v10.13.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang-jwt/jwt/v5 v5.2.1 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.3 // indirect github.com/google/gnostic v0.5.7-v3refs // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/google/gofuzz v1.2.0 // indirect + github.com/google/s2a-go v0.1.7 // indirect github.com/google/uuid v1.6.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect + github.com/googleapis/gax-go/v2 v2.12.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-retryablehttp v0.7.7 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect @@ -104,6 +113,7 @@ require ( github.com/vishvananda/netlink v1.2.1-beta.2 // indirect github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f // indirect go.mongodb.org/mongo-driver v1.11.3 // indirect + go.opencensus.io v0.24.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.50.0 // indirect go.opentelemetry.io/otel v1.25.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.21.0 // indirect @@ -112,15 +122,15 @@ require ( go.opentelemetry.io/otel/trace v1.25.0 // indirect golang.org/x/crypto v0.24.0 // indirect golang.org/x/net v0.26.0 // indirect - golang.org/x/oauth2 v0.17.0 // indirect golang.org/x/sys v0.21.0 // indirect golang.org/x/term v0.21.0 // indirect golang.org/x/text v0.16.0 // indirect golang.org/x/time v0.3.0 // indirect google.golang.org/appengine v1.6.8 // indirect + google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17 // indirect google.golang.org/grpc v1.61.2 // indirect - google.golang.org/protobuf v1.33.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect gotest.tools/v3 v3.5.1 // indirect diff --git a/src/cloud-providers/go.sum b/src/cloud-providers/go.sum index 0d1f212d60..2e6bd06352 100644 --- a/src/cloud-providers/go.sum +++ b/src/cloud-providers/go.sum @@ -1,4 +1,10 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.110.10 h1:LXy9GEO+timppncPIAZoOj3l58LIU9k+kn48AN7IO3Y= +cloud.google.com/go v0.110.10/go.mod h1:v1OoFqYxiBkUrruItNM3eT4lLByNjxmJSV/xDKJNnic= +cloud.google.com/go/compute v1.23.3 h1:6sVlXXBmbd7jNX0Ipq0trII3e4n1/MsADLK6a+aiVlk= +cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI= +cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= +cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.11.1 h1:E+OJmp2tPvt1W+amx48v1eqbjDYsgN+RzP4q16yV5eM= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.11.1/go.mod h1:a6xsAQUZg+VsS3TJ05SRp524Hs4pZ/AeFSr5ENf0Yjo= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.6.0 h1:U2rTu3Ef+7w9FHKIAXM6ZyqF3UOWJZ12zIm8zECAFfg= @@ -73,6 +79,7 @@ github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqy github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/confidential-containers/cloud-api-adaptor/src/cloud-api-adaptor v0.8.0 h1:kklDlgChV8fWq+Hjdso83G4BhEgwbGk3XgkqfwFGgqE= github.com/confidential-containers/cloud-api-adaptor/src/cloud-api-adaptor v0.8.0/go.mod h1:2VdYYFEIbNmfXAJsc7OV7FGs6T4BRs2twNXwNVAWMqI= github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= @@ -100,7 +107,9 @@ github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDD github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= @@ -190,6 +199,9 @@ github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69 github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk= github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -200,6 +212,7 @@ github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrU github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= @@ -211,7 +224,9 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= @@ -221,9 +236,16 @@ github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= +github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= +github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= +github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas= +github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 h1:YBftPWNWd4WwGqtY2yeZL2ef8rHAxPBD8KFhJpmcqms= github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0/go.mod h1:YN5jB8ie0yfIUg6VvR9Kz84aCaG7AsGZnLjhHbUqwPg= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= @@ -382,6 +404,8 @@ go.mongodb.org/mongo-driver v1.7.5/go.mod h1:VXEWRZ6URJIkUq2SCAyapmhH0ZLRBP+FT4x go.mongodb.org/mongo-driver v1.10.0/go.mod h1:wsihk0Kdgv8Kqu1Anit4sfK+22vSFbUrAVEYRhCXrA8= go.mongodb.org/mongo-driver v1.11.3 h1:Ql6K6qYHEzB6xvu4+AU0BoRoqf9vFPcc4o7MUIdPW8Y= go.mongodb.org/mongo-driver v1.11.3/go.mod h1:PTSz5yu21bkT/wXpkS7WR5f0ddqw5quethTUn9WM+2g= +go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.50.0 h1:cEPbyTSEHlQR89XVlyo78gqluF8Y3oMeBkXGWzQsfXY= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.50.0/go.mod h1:DKdbWcT4GH1D0Y3Sqt/PFXt2naRKDWtU+eE6oLdFNA8= go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k= @@ -423,6 +447,7 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -442,6 +467,8 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -496,6 +523,8 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.149.0 h1:b2CqT6kG+zqJIVKRQ3ELJVLN1PwHZ6DJ3dW8yl82rgY= +google.golang.org/api v0.149.0/go.mod h1:Mwn1B7JTXrzXtnvmzQE2BD6bYZQ8DShKZDZbeN9I7qI= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= @@ -506,14 +535,17 @@ google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17 h1:wpZ8pe2x1Q3f2KyT5f8oP/fa9rHAKgFPr/HZdNuS+PQ= +google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:J7XzRzVy1+IPwWHZUzoD0IccYZIrXILAQpc+Qy9CMhY= google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 h1:JpwMPBpFN3uKhdaekDpiNlImDdkUAyiJ6ez/uxGaUSo= google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:0xJLfVdJqpAPl8tDg1ujOCGzx6LFLttXT5NhllGOXY4= google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17 h1:Jyp0Hsi0bmHXG6k9eATXoYtjd6e2UzZ1SCn/wIupY14= google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:oQ5rr10WTTMvP4A36n8JpR1OrO1BEiV4f78CneXZxkA= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.61.2 h1:TzJay21lXCf7BiNFKl7mSskt5DlkKAumAYTs52SpJeo= google.golang.org/grpc v1.61.2/go.mod h1:VUbo7IFqmF1QtCAstipjG0GIoq49KvMe9+h1jFLBNJs= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= @@ -522,8 +554,10 @@ google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQ google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= diff --git a/src/csi-wrapper/go.mod b/src/csi-wrapper/go.mod index 3d1cc08966..132320bc21 100644 --- a/src/csi-wrapper/go.mod +++ b/src/csi-wrapper/go.mod @@ -46,7 +46,7 @@ require ( golang.org/x/sys v0.21.0 // indirect golang.org/x/term v0.21.0 // indirect golang.org/x/text v0.16.0 // indirect - golang.org/x/time v0.3.0 // indirect + golang.org/x/time v0.5.0 // indirect golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect google.golang.org/appengine v1.6.8 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240213162025-012b6fc9bca9 // indirect diff --git a/src/csi-wrapper/go.sum b/src/csi-wrapper/go.sum index e3b85808e8..5d46768dae 100644 --- a/src/csi-wrapper/go.sum +++ b/src/csi-wrapper/go.sum @@ -182,8 +182,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= -golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= -golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= +golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= diff --git a/src/peerpod-ctrl/Makefile b/src/peerpod-ctrl/Makefile index c61dd05f2c..c13f17c912 100644 --- a/src/peerpod-ctrl/Makefile +++ b/src/peerpod-ctrl/Makefile @@ -63,7 +63,7 @@ endif SHELL = /usr/bin/env bash -o pipefail .SHELLFLAGS = -ec -BUILTIN_CLOUD_PROVIDERS ?= aws azure ibmcloud vsphere libvirt docker +BUILTIN_CLOUD_PROVIDERS ?= aws azure gcp ibmcloud vsphere libvirt docker # Build tags required to build cloud-api-adaptor are derived from BUILTIN_CLOUD_PROVIDERS. # When libvirt is specified, CGO_ENABLED is set to 1. space := $() $()