constellation/operators/constellation-node-operator/internal/gcp/client/disks.go
Malte Poll 717570d00a [node operator] Add GCP client
Signed-off-by: Malte Poll <mp@edgeless.systems>
2022-08-09 10:29:04 +02:00

37 lines
1.1 KiB
Go

package client
import (
"fmt"
"regexp"
"google.golang.org/genproto/googleapis/cloud/compute/v1"
)
var (
diskSourceRegex = regexp.MustCompile(`^https://www.googleapis.com/compute/v1/projects/([^/]+)/zones/([^/]+)/disks/([^/]+)$`)
computeAPIBase = regexp.MustCompile(`^https://www.googleapis.com/compute/v1/(.+)$`)
)
// diskSourceToDiskReq converts a disk source URI to a disk request.
func diskSourceToDiskReq(diskSource string) (*compute.GetDiskRequest, error) {
matches := diskSourceRegex.FindStringSubmatch(diskSource)
if len(matches) != 4 {
return nil, fmt.Errorf("error splitting diskSource: %v", diskSource)
}
return &compute.GetDiskRequest{
Disk: matches[3],
Project: matches[1],
Zone: matches[2],
}, nil
}
// uriNormalize normalizes a compute API URI by removing the optional URI prefix.
// for normalization, the prefix 'https://www.googleapis.com/compute/v1/' is removed.
func uriNormalize(imageURI string) string {
matches := computeAPIBase.FindStringSubmatch(imageURI)
if len(matches) != 2 {
return imageURI
}
return matches[1]
}